From f59dc65f08b6201a337b69c040e9247339320c7c Mon Sep 17 00:00:00 2001 From: phobos2077 Date: Thu, 30 May 2024 16:30:40 +0200 Subject: [PATCH] Release preparations - Updated docs - Added crafting readme - Updated batch scripts and installer - Changed called_freq_mult to a "safer" 0.5 - Corrected BringX rewards for new economy - Minor script fixes --- docs/crafting_readme.txt | 15 +++++++ docs/ecco_changelog.txt | 13 +++--- docs/ecco_changelog_ru.txt | 45 +++++++++++++++++++ docs/ecco_readme.txt | 20 +++++++++ extra/build_zip.cmd | 27 +++++++++++ extra/compile_all.cmd | 5 +++ extra/installer.iss | 10 +++-- extra/makedat.cmd | 5 ++- root/data/text/russian/dialog/dcvic.msg | 1 + root/mods/ecco/combat.ini | 2 +- scripts_src/_pbs_craft/craft_schematics.h | 10 ++++- scripts_src/_pbs_headers/quests_bringX.h | 4 +- .../_pbs_headers/talking_heads_compat.h | 2 +- scripts_src/_pbs_main/gl_pbs_ai.ssl | 3 +- .../_pbs_main/gl_pbs_critical_table.ssl | 2 +- 15 files changed, 145 insertions(+), 19 deletions(-) create mode 100644 docs/crafting_readme.txt create mode 100644 extra/build_zip.cmd diff --git a/docs/crafting_readme.txt b/docs/crafting_readme.txt new file mode 100644 index 0000000..98c8408 --- /dev/null +++ b/docs/crafting_readme.txt @@ -0,0 +1,15 @@ +Crafting system in EcCo is made completely independent from the rest of the mod. +It is fully configurable and only requires a fairly recent version of sfall. + +All recipes and general settings are configured in data/config/pbs_craft.ini (description for every setting and recipe examples included). +All custom art is in data/pcx folder. You can change it however you need as long as you don't change image sizes. + +You can choose to use recipe categories, if you have many recipes. +You can use sfall global vars to unlock certain recipes (they will only show if given gvar value is non 0). +If gvar value is a number - it will be automatically treated as a regular Fallout global var. + +You can use schematics system to easily add new unlockable recipes to the game: +- Set schema=1 for a recipe. +- Designate a certain set of items as a "schematics" and list them in [Main].schematic_pids +- Open a script that will spawn a schematic item (such as shop stock box) and include "craft_schematics.h". +- Call check_restock_craft_schematic to spawn a schematic item, see comment for details. diff --git a/docs/ecco_changelog.txt b/docs/ecco_changelog.txt index f02e8e1..ee88d5d 100644 --- a/docs/ecco_changelog.txt +++ b/docs/ecco_changelog.txt @@ -14,24 +14,26 @@ v0.9.6: - added critical healing success: restores much more HP than normal - added critical failure: reduces remaining uses of a kit/bag - added ignoring daily limits when using kits/bags +- added ability to use Super Tool Kit and Multitool to repair party robots better - buffed skill level influence on critical success and failure chances - buffed restored HP amount for all 3 skills - nerfed rest heal interval to 6 hours (from 3) - nerfed world travel heal interval to 24 hours (was 1 real-time second; requires future sfall update) - nerfed Stimpak scaling from 0.9.5 and removed Super Stimpak from scaling -- fixed numerious bugs and inconsistencies of vanilla healing system > Economy: - reduced all barter prices by ~40% (makes money more valuable) - reduced buy/sell price gap by ~10-15% (heavily depends on skill) - reduced party money in existing saves by 20% -- reduced prices of some subdermal implants and weapon upgrades -- reduced a few late-game large monetary transactions +- reduced prices of some subdermal implants, weapon upgrades and a few late-game large monetary transactions - reduced prices of learning stuff from a Klamath Trapper +- reduced drugs in dead NPC's by further 40% +- improved requirements/rewards ratio for new creature parts fetch quests - tweaked a few item prices > Crafting: - changed metal armor recipes to require buying schematics +- added schematic for improving Flamer - fixed craft button disappearing when using external HRP - fixed bug with disassemble that allowed for infinite item exploit @@ -39,11 +41,6 @@ v0.9.6: - added Demolition Expert to reduce arming AP cost by half - fixed inconsistent AP cost between different methods of arming traps -> Balance: -- changed monster part quests requirements/rewards ratio to make economic sense -- reduced drugs in dead NPC's by further 40% -- minor weapon stat tweaks - > Installer: - added more options for disabling some mod features diff --git a/docs/ecco_changelog_ru.txt b/docs/ecco_changelog_ru.txt index ea40b24..837d132 100644 --- a/docs/ecco_changelog_ru.txt +++ b/docs/ecco_changelog_ru.txt @@ -1,5 +1,50 @@ -=== СПИСОК ИЗМЕНЕНИЙ ===- +v0.9.6: +> Бой и ИИ: +- увеличена частота прицельных выстрелов ИИ +- добавлено выпадение оружия из рук при некоторых критических попаданиях по рукам +- снижен минимальный уровень ИН для прицельных выстрелов ИИ +- поправлен урон и разброс пуль в очередях некоторого оружия для соответствия их предназначению +- исправлена анимация смерти огнём при использовании Молотова и 40мм зажигательных гранат + +> Лечение: +- заменено использование навыков Первая Помощь, Доктор и Ремонт на своё скриптовое решение +- добавлен фикс. количество использований для аптечек и докторских сумок (вместо 10% шанса на удаление) +- добавлен критический успех лечения: восстановит больше ОЗ +- добавлена критическая неудача: удалит часть медикаментов в аптечке/сумке +- добавлена возможность использовать инструменты для ускоренного ремонта роботов в команде +- использование аптечек/сумок обходит посуточное ограничение на использование навыков лечения +- усилено влияние навыка на вероятность критического успеха или неудачи +- увеличены базовые значения восстанавливаемых ОЗ +- снижена скорость лечения при отдыхе (раз в 6ч. вместо 3х) +- снижена скорость лечения при путешествиях (раз в 24 игровых часа вместо раза 1 секунду; требует обновление sfall) +- снижено влияние навыка на лечение Стимпаками из 0.9.5 и убрано влияние на Супер Стимпак + +> Экономика: +- снижены все цены на ~40% (деньги стали дороже) +- снижено соотношение цен покупки к ценам продажи на ~10-15% (сильно зависит от навыка) +- снижены денежные запасы в текущих сохранениях на 20% +- снижены цены на некоторые подкожные импланты, апгрейды оружия и некоторые крупные транзакции в поздней игре +- снижена цена обучения у траппера в Кламате +- скорректированы цены некоторых предметов +- улучшено соотношение требования/награда в новых заданиях на сбор частей тел существ +- снижено количество лекарств в трупах ещё на 40% + +> Ремесло: +- добавлены рецепты для создания металлической брони в продажу некоторым торговцам +- добавлен рецепт улучшения Огнемёта +- исправлена исчезающая кнопка ремесла при использовании внешнего патча HRP +- исправлена возможность создавать бесконечные предметы сборкой/разборкой некоторых рецептов + +> Ловушки: +- способность Подрывник снижает требуемые ОД для установки ловушек во время боя +- исправлены неточности в требуемых ОД для установки ловушек разными способами + +> Установщик: +- добавлено больше опция для отключения частей мода + + v0.9.5 > Ремесло: - редизайн кнопки ремесла и окна описания предмета diff --git a/docs/ecco_readme.txt b/docs/ecco_readme.txt index 7bb0d28..29f6916 100644 --- a/docs/ecco_readme.txt +++ b/docs/ecco_readme.txt @@ -193,6 +193,26 @@ +-=== MANUAL INSTALLATION (ZIP) ===- +1. Follow normal installation steps from the github releases page up until using the installer. +2. Unpack zip contents into the game root folder, overwriting files. +3. Open ddraw.ini and find/change the following options in the [Misc] section: + +DamageFormula=0 +ObjCanHearObjFix=1 +DerivedStats=sfall\stats.ini +SkillsFile=sfall\skills.ini +PerksFile=sfall\perks.ini +BooksFile=sfall\books.ini +MovieTimer_artimer1=120 +MovieTimer_artimer2=235 +MovieTimer_artimer3=350 +MovieTimer_artimer4=470 + +4. Follow the rest of the installation steps from github. + + + -=== COMPATIBILITY ===- Talking Heads Addon & Talking Heads Actually Talk (THAT): - Full built-in support, no patches needed (if you previously used compatibility patches, DELETE them) diff --git a/extra/build_zip.cmd b/extra/build_zip.cmd new file mode 100644 index 0000000..90013fc --- /dev/null +++ b/extra/build_zip.cmd @@ -0,0 +1,27 @@ +@ECHO OFF +setlocal EnableExtensions + +set cwd=%cd% +cd /d "%~dp0..\" + +set root=%cd% +set archive=%root%\extra\pbs_fo2rpu_ecco_mod_v0-9-6.zip + +if exist %archive% ( + echo Deleting existing %archive%... + del %archive% +) + +set exe="C:\Program Files (x86)\7-Zip\7z.exe" + +echo Adding mod files... +cd /d %root%\root +%exe% a %archive% mods\* sfall\* > nul + +echo Adding docs... +cd /d %root%\docs +%exe% a %archive% ecco_readme.txt ecco_changelog.txt > nul + +echo Done! + +cd /d "%cwd%" diff --git a/extra/compile_all.cmd b/extra/compile_all.cmd index ecbf35a..d38d2db 100644 --- a/extra/compile_all.cmd +++ b/extra/compile_all.cmd @@ -11,6 +11,11 @@ if not exist "%output%" mkdir %output% cd /d "%output%" SET output=%cd% +if "%1"=="-r" ( + echo Deleting all compiled scripts... + del /Q *.int +) + rem SET compile=%root%\extra\bin\compile.exe cd /d "%root%/scripts_src" diff --git a/extra/installer.iss b/extra/installer.iss index be5a7f0..f7156ae 100644 --- a/extra/installer.iss +++ b/extra/installer.iss @@ -17,7 +17,7 @@ AppName={#MyAppName} AppID=pbs_fallout2_economy_and_combat AppVerName={#MyAppPublisher} {#MyAppName} -OutputBaseFilename=pbs_fo2rpu_ecco_mod_v0-9-WIP +OutputBaseFilename=pbs_fo2rpu_ecco_mod_v0-9-6 DefaultDirName={sd}\Games\Fallout2\ AppendDefaultDirName=no ;UsePreviousAppDir=no @@ -64,7 +64,8 @@ en.InstallCustom=Custom install en.InstallNull=Uncheck all en.CMain=EcCo Gameplay Overhaul mod -en.CAICalledShots=More frequent called shots by NPC's +en.CAICalledShots=Improved AI aimed attack selection algorithm +en.CAICalledShotsMore=More frequent aimed attacks en.CCriticals=Critical hit table improvements en.CCarryUnspentAP=Carry up to 2 unspent AP to next round en.CRemoveBonusRoF=Removal of Bonus Rate of Fire perk @@ -89,7 +90,8 @@ ru.InstallCustom=Выборочная установка ru.InstallNull=Ничего не выбирать ru.CMain=EcCo - переработка геймплея -ru.CAICalledShots=Более частые прицельные атаки ИИ +ru.CAICalledShots=Улучшенный алгоритм выбора прицельных атак ИИ +ru.CAICalledShotsMore=Более частые прицельные атаки ru.CCriticals=Улучшения таблицы критических повреждений ru.CCarryUnspentAP=Перенос части непотраченных ОД на следующих ход ru.CRemoveBonusRoF=Удаление перка "Бонус скорострельности" @@ -118,6 +120,7 @@ Name: "custom"; Description: "{cm:InstallCustom}"; Flags: iscustom Name: "main"; Description: "{cm:CMain}"; Types: full custom; Flags: fixed ;Name: "option"; Description: "{cm:COptions}"; Types: full Name: "ai_called_shots"; Description: "{cm:CAICalledShots}"; Types: full +Name: "ai_called_shots\more"; Description: "{cm:CAICalledShotsMore}"; Types: full Name: "criticals"; Description: "{cm:CCriticals}"; Types: full Name: "carry_unspent_ap"; Description: "{cm:CCarryUnspentAP}"; Types: full Name: "remove_bonus_rof"; Description: "{cm:CRemoveBonusRoF}"; Types: full @@ -170,6 +173,7 @@ Filename: "{app}\ddraw.ini"; Section: "Misc"; Key: "MovieTimer_artimer4"; String ;Filename: "{app}\ddraw.ini"; Section: "Misc"; Key: "CheckWeaponAmmoCost"; String: "1"; Components: combat Filename: "{app}\mods\ecco\combat.ini"; Section: "AI"; Key: "called_tweaks"; String: "0"; Components: not ai_called_shots +Filename: "{app}\mods\ecco\combat.ini"; Section: "AI"; Key: "called_freq_mult"; String: "1.0"; Components: not ai_called_shots\more Filename: "{app}\mods\ecco\combat.ini"; Section: "CRITICALS"; Key: "enable_tweaks"; String: "0"; Components: not criticals Filename: "{app}\mods\ecco\combat.ini"; Section: "CRITICALS"; Key: "drop_flag_fix"; String: "0"; Components: not criticals Filename: "{app}\mods\ecco\combat.ini"; Section: "APCOST"; Key: "carry_unspent_ap"; String: "0"; Components: not carry_unspent_ap diff --git a/extra/makedat.cmd b/extra/makedat.cmd index 6b59da0..23b5823 100644 --- a/extra/makedat.cmd +++ b/extra/makedat.cmd @@ -7,7 +7,10 @@ cd /d "%~dp0..\" SET root=%cd% SET mainDat=rpu_y_ecco.dat -if exist %mainDat% del %mainDat% +if exist %mainDat% ( + echo Deleting existing %mainDat%... + del %mainDat% +) cd /d "%root%\root\data" %root%\extra\bin\dat2.exe a -r %mainDat% art\* config\* data\* maps\* pcx\* proto\* scripts\* sound\* text\* diff --git a/root/data/text/russian/dialog/dcvic.msg b/root/data/text/russian/dialog/dcvic.msg index db7aed2..3f563b9 100644 --- a/root/data/text/russian/dialog/dcvic.msg +++ b/root/data/text/russian/dialog/dcvic.msg @@ -156,6 +156,7 @@ {2311}{}{ . .} {2403}{}{ 13?} {2404}{}{, .} +{2405}{}{ ?} {2500}{}{, .} {2501}{}{ , .} {2502}{}{ , .} diff --git a/root/mods/ecco/combat.ini b/root/mods/ecco/combat.ini index 5a72ab3..29541d1 100644 --- a/root/mods/ecco/combat.ini +++ b/root/mods/ecco/combat.ini @@ -6,7 +6,7 @@ called_tweaks=1 called_int_req=6,4,2 ; Global multiplier for called_freq of all AI packets (ai.txt). Useful to increase called shot frequency across the game without editing every packet. -called_freq_mult=0.2 +called_freq_mult=0.5 [DAMAGE] diff --git a/scripts_src/_pbs_craft/craft_schematics.h b/scripts_src/_pbs_craft/craft_schematics.h index f2b7be6..e685be3 100644 --- a/scripts_src/_pbs_craft/craft_schematics.h +++ b/scripts_src/_pbs_craft/craft_schematics.h @@ -6,6 +6,14 @@ #define ARR_SCHEMAS "pbs_craft_schemas" +#ifndef debug_log + #ifdef ndebug + #define debug_log(msg, ...) ndebug(msg) + #else + #define debug_log(msg, ...) debug_msg("craft_schematics.h: " + msg) + #endif +#endif + variable craft_schemas_map; @@ -41,7 +49,7 @@ procedure check_restock_craft_schematic(variable schematicPid, variable craftedI if (isKnown or random(1, 100) > probability) then return; - ndebug("spawning crafting schematic " + schematicPid + " for item " + craftedItemPid); + debug_log("spawning crafting schematic " + schematicPid + " for item " + craftedItemPid); item := create_object(schematicPid, 0, 0); set_weapon_ammo_count(item, craftedItemPid); // set count before adding to prevent stacking add_obj_to_inven(self_obj, item); diff --git a/scripts_src/_pbs_headers/quests_bringX.h b/scripts_src/_pbs_headers/quests_bringX.h index 372fae8..b68fa0c 100644 --- a/scripts_src/_pbs_headers/quests_bringX.h +++ b/scripts_src/_pbs_headers/quests_bringX.h @@ -37,7 +37,7 @@ // <0 - time when next available #define LVAR_BRING_X (8) -#define _BRING_REWARD (6000) +#define _BRING_REWARD (4000) #define _BRING_COUNT (8) #define is_first_bring (local_var(LVAR_BRING_X) == 0) @@ -107,7 +107,7 @@ end // <0 - quest was completed, time when next available #define LVAR_BRING_X (8) -#define _BRING_REWARD (1200) +#define _BRING_REWARD (900) #define _BRING_COUNT (10) #define is_first_bring (local_var(LVAR_BRING_X) == 0 or local_var(LVAR_BRING_X) == 1) diff --git a/scripts_src/_pbs_headers/talking_heads_compat.h b/scripts_src/_pbs_headers/talking_heads_compat.h index 57a30ed..bc5e446 100644 --- a/scripts_src/_pbs_headers/talking_heads_compat.h +++ b/scripts_src/_pbs_headers/talking_heads_compat.h @@ -184,7 +184,7 @@ #define HEAD_MOR (194) #define HEAD_CERI (195) #define HEAD_RHEA (196) -#define HEAD_JONES (197) +//#define HEAD_JONES (197) #define HEAD_HANGM (198) #define HEAD_BADG (199) #define HEAD_ELD (200) diff --git a/scripts_src/_pbs_main/gl_pbs_ai.ssl b/scripts_src/_pbs_main/gl_pbs_ai.ssl index 71e870b..a8e975f 100644 --- a/scripts_src/_pbs_main/gl_pbs_ai.ssl +++ b/scripts_src/_pbs_main/gl_pbs_ai.ssl @@ -77,6 +77,7 @@ procedure ai_choose_bodypart(variable attacker, variable attackType, variable hi // Roll against called_freq. variable calledFreq := ceil(get_object_ai_data(attacker, AI_CAP_CALLED_FREQ) * ini_called_freq_mult); + //debug_log_fmt("Called freq for packet %d = %d", get_ai(attacker), calledFreq); if (random(1, calledFreq) != 1) then return BODY_UNCALLED; // Minimum INT check. @@ -147,7 +148,7 @@ procedure tohit_handler begin /*debug_log(string_format("tohit %s = %d (same_tile: %d, use_dist: %d, part: %d)", obj_name(attacker), hitChance, sameTile, useDist, bodyPart) - /*+ string_format("; ctd: (crit: %s, part: %d, flags: %d)", + + string_format("; ctd: (crit: %s, part: %d, flags: %d)", obj_name(ctdAttacker), ctdBodyPart, ctdFlags) );*/ // A crazy hack based on understanding exactly when HOOK_TOHIT is called and how main_ctd is used by engine: diff --git a/scripts_src/_pbs_main/gl_pbs_critical_table.ssl b/scripts_src/_pbs_main/gl_pbs_critical_table.ssl index 1fd6885..39f8ef0 100644 --- a/scripts_src/_pbs_main/gl_pbs_critical_table.ssl +++ b/scripts_src/_pbs_main/gl_pbs_critical_table.ssl @@ -85,7 +85,7 @@ procedure combatdamage_handler begin targetFlags := get_sfall_arg_at(4), attackerFlags := get_sfall_arg_at(5); - debug_log_fmt("combatdmg Attacker (%s): %x, Target: %x", obj_name_safe(attacker), attackerFlags, targetFlags); + //debug_log_fmt("combatdmg Attacker (%s): %x, Target: %x", obj_name_safe(attacker), attackerFlags, targetFlags); if (target and attacker and (attackerFlags bwand DAM_HIT) and (targetFlags bwand DAM_DROP)) then begin variable targetWeapon := get_active_weapon(target); if (targetWeapon) then begin