Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions gamedata/configs/text/eng/ui_mm_modded_exes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,18 @@
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_move_to_cover_run_desc">
<text>If enabled, NPCs will run instead of walk when taking cover during combat. This makes firefights more dynamic and prevents NPCs from slowly walking while under fire.</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_novice_k">
<text>AI Dispersion Scale at Rank 0 (ai_dispersion_novice_k)</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_novice_k_desc">
<text>Multiplier applied on top of the vanilla rank-dispersion curve at rank 0 (novice).\n \nDefault: 1.0 (no change from vanilla).\n \nLower values reduce low-rank NPC dispersion; higher values increase it. Applies on every NPC's next shot.</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_experienced_k">
<text>AI Dispersion Scale at Rank 100 (ai_dispersion_experienced_k)</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_experienced_k_desc">
<text>Multiplier applied on top of the vanilla rank-dispersion curve at rank 100 (legend tier; cvar name follows the vanilla LTX naming convention).\n \nDefault: 1.0 (no change from vanilla).\n \nLower values reduce high-rank NPC dispersion; higher values increase it. Applies on every NPC's next shot.</text>
</string>

<!-- Monsters -->
<string id="ui_mm_menu_monsters">
Expand Down
12 changes: 12 additions & 0 deletions gamedata/configs/text/rus/ui_mm_modded_exes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,18 @@
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_move_to_cover_run_desc">
<text>Åñëè âêëþ÷åíî, NPC áóäóò áåæàòü, à íå èäòè øàãîì ïðè ïîèñêå óêðûòèÿ âî âðåìÿ áîÿ. Ýòî äåëàåò ïåðåñòðåëêè áîëåå äèíàìè÷íûìè è íå äàåò NPC ìåäëåííî ïðîãóëèâàòüñÿ ïîä îãíåì.</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_novice_k">
<text>Ìíîæèòåëü ðàçáðîñà ÈÈ ïðè ðàíãå 0 (ai_dispersion_novice_k)</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_novice_k_desc">
<text>Ìíîæèòåëü, ïðèìåíÿåìûé ïîâåðõ ñòàíäàðòíîé êðèâîé ðàçáðîñà ïî ðàíãó ïðè ðàíãå 0 (íîâè÷îê).\n \nÏî óìîë÷àíèþ: 1.0 (áåç èçìåíåíèé îòíîñèòåëüíî îðèãèíàëà).\n \nÁîëåå íèçêèå çíà÷åíèÿ óìåíüøàþò ðàçáðîñ ó NPC íèçêîãî ðàíãà, à áîëåå âûñîêèå óâåëè÷èâàþò åãî. Ïðèìåíÿåòñÿ ïðè ñëåäóþùåì âûñòðåëå êàæäîãî NPC.</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_experienced_k">
<text>Ìíîæèòåëü ðàçáðîñà ÈÈ ïðè ðàíãå 100 (ai_dispersion_experienced_k)</text>
</string>
<string id="ui_mm_modded_exes_gameplay_stalkers_ai_dispersion_experienced_k_desc">
<text>Ìíîæèòåëü, ïðèìåíÿåìûé ïîâåðõ ñòàíäàðòíîé êðèâîé ðàçáðîñà ïî ðàíãó ïðè ðàíãå 100 (ëåãåíäà; èìÿ cvar ñîîòâåòñòâóåò íàçâàíèþ ïåðåìåííîé â ñòàíäàðòíîì LTX).\n \nÏî óìîë÷àíèþ: 1.0 (áåç èçìåíåíèé îòíîñèòåëüíî îðèãèíàëà).\n \nÁîëåå íèçêèå çíà÷åíèÿ óìåíüøàþò ðàçáðîñ ó NPC âûñîêîãî ðàíãà, à áîëåå âûñîêèå óâåëè÷èâàþò åãî. Ïðèìåíÿåòñÿ ïðè ñëåäóþùåì âûñòðåëå êàæäîãî NPC.</text>
</string>

<!-- Monsters -->
<string id="ui_mm_menu_monsters">
Expand Down
3 changes: 3 additions & 0 deletions gamedata/scripts/lua_help_ex.script
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@
g_decouple_horz_recoil // calculate horz recoil independently of vert recoil
g_use_non_linear_inertia // enable non linear weapon inertia movement

ai_dispersion_novice_k [0; 10] // Stalker NPC weapon-dispersion scale on top of vanilla rank curve, at rank 0; live per shot. Default 1.0 (identity).
ai_dispersion_experienced_k [0; 10] // Stalker NPC weapon-dispersion scale on top of vanilla rank curve, at rank 100; live per shot. Default 1.0 (identity).

}

lua extensions {
Expand Down
17 changes: 17 additions & 0 deletions gamedata/scripts/options_modded_exes_stalkers.script
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,21 @@ PAGE = page {
def = false,
cmd = "ai_move_to_cover_run",
},
line {},
track {
id = "ai_dispersion_novice_k",
def = 1.0,
min = 0.0,
max = 10.0,
step = 0.1,
cmd = "ai_dispersion_novice_k",
},
track {
id = "ai_dispersion_experienced_k",
def = 1.0,
min = 0.0,
max = 10.0,
step = 0.1,
cmd = "ai_dispersion_experienced_k",
},
}
7 changes: 7 additions & 0 deletions src/xrGame/ai/stalker/ai_stalker_fire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,18 @@ static float const min_throw_distance = 10.f;

float g_dispersion_base = 1.0f;
float g_dispersion_factor = 1.0f;
float g_ai_dispersion_novice_k = 1.0f;
float g_ai_dispersion_experienced_k = 1.0f;

float CAI_Stalker::GetWeaponAccuracy() const
{
float base = PI / 180.f;
base *= m_fRankDisperison;
// cvar-driven rank-curve scale on top of vanilla, identity at defaults (1.0 / 1.0)
CHARACTER_RANK_VALUE rank = Rank();
clamp(rank, 0, 100);
float rank_k = float(rank) / 100.f;
base *= g_ai_dispersion_experienced_k * rank_k + g_ai_dispersion_novice_k * (1.f - rank_k);
CWeapon* W = smart_cast<CWeapon*>(inventory().ActiveItem());

if (!movement().path_completed())
Expand Down
6 changes: 6 additions & 0 deletions src/xrGame/console_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3025,6 +3025,12 @@ void CCC_RegisterCommands()
extern float g_ai_aim_max_angle;
CMD4(CCC_Float, "ai_aim_max_angle", &g_ai_aim_max_angle, 0.f, 10.f*PI);

extern float g_ai_dispersion_novice_k;
CMD4(CCC_Float, "ai_dispersion_novice_k", &g_ai_dispersion_novice_k, 0.f, 10.f);

extern float g_ai_dispersion_experienced_k;
CMD4(CCC_Float, "ai_dispersion_experienced_k", &g_ai_dispersion_experienced_k, 0.f, 10.f);

#ifdef DEBUG
extern BOOL g_debug_doors;
CMD4(CCC_Integer, "ai_debug_doors", &g_debug_doors, 0, 1);
Expand Down
Loading