mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Backported the fix for TOHIT hook from 4.0 development branch (commit 7bbe84feef)
Updated credits.
This commit is contained in:
@@ -84,6 +84,9 @@ int arg1 - The unmodified hit chance
|
|||||||
critter arg2 - The attacker
|
critter arg2 - The attacker
|
||||||
critter arg3 - The target of the attack
|
critter arg3 - The target of the attack
|
||||||
int arg4 - The targeted bodypart
|
int arg4 - The targeted bodypart
|
||||||
|
int arg5 - Source tile (may differ from attacker's tile, when AI is considering potential fire position)
|
||||||
|
int arg6 - Attack Type (one of ATKTYPE_*)
|
||||||
|
int arg7 - Ranged flag (0 or 1, actually passed 1 even for unarmed attacks, may be a vanilla bug)
|
||||||
|
|
||||||
int ret1 - the new hit chance
|
int ret1 - the new hit chance
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -61,9 +61,8 @@ static const char* ExtraLines[] = {
|
|||||||
"MIB88",
|
"MIB88",
|
||||||
"Rain man",
|
"Rain man",
|
||||||
"Continuum",
|
"Continuum",
|
||||||
"Fakeman",
|
|
||||||
"Drobovik",
|
|
||||||
"Mr.Stalin",
|
"Mr.Stalin",
|
||||||
|
"Drobovik",
|
||||||
"Anyone who has used sfall in their own mods",
|
"Anyone who has used sfall in their own mods",
|
||||||
"The bug reporters and feature requesters",
|
"The bug reporters and feature requesters",
|
||||||
""
|
""
|
||||||
|
|||||||
+20
-14
@@ -102,13 +102,19 @@ static void _stdcall RunHookScript(DWORD hook) {
|
|||||||
|
|
||||||
static void __declspec(naked) ToHitHook() {
|
static void __declspec(naked) ToHitHook() {
|
||||||
__asm {
|
__asm {
|
||||||
hookbegin(4);
|
hookbegin(7);
|
||||||
mov args[4], eax;
|
mov args[4], eax; // attacker
|
||||||
mov args[8], ebx;
|
mov args[8], ebx; // target
|
||||||
mov args[12], ecx;
|
mov args[12], ecx; // body part
|
||||||
|
mov args[16], edx; // source tile
|
||||||
|
mov eax, [esp+4]; // attack type
|
||||||
|
mov args[20], eax;
|
||||||
|
mov eax, [esp+8]; // is ranged
|
||||||
|
mov args[24], eax;
|
||||||
|
mov eax, args[4];
|
||||||
push [esp+8];
|
push [esp+8];
|
||||||
push [esp+8];
|
push [esp+4];
|
||||||
call determine_to_hit_func_
|
call determine_to_hit_func_;
|
||||||
mov args[0], eax;
|
mov args[0], eax;
|
||||||
pushad;
|
pushad;
|
||||||
push HOOK_TOHIT;
|
push HOOK_TOHIT;
|
||||||
@@ -1158,14 +1164,14 @@ static void HookScriptInit2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LoadHookScript("hs_tohit", HOOK_TOHIT);
|
LoadHookScript("hs_tohit", HOOK_TOHIT);
|
||||||
HookCall(0x421686, &ToHitHook);
|
HookCall(0x421686, &ToHitHook); // combat_safety_invalidate_weapon_func_
|
||||||
HookCall(0x4231D9, &ToHitHook);
|
HookCall(0x4231D9, &ToHitHook); // check_ranged_miss_
|
||||||
HookCall(0x42331F, &ToHitHook);
|
HookCall(0x42331F, &ToHitHook); // shoot_along_path_
|
||||||
HookCall(0x4237FC, &ToHitHook);
|
HookCall(0x4237FC, &ToHitHook); // compute_attack_
|
||||||
HookCall(0x424379, &ToHitHook);
|
HookCall(0x424379, &ToHitHook); // determine_to_hit_
|
||||||
HookCall(0x42438D, &ToHitHook);
|
HookCall(0x42438D, &ToHitHook); // determine_to_hit_no_range_
|
||||||
HookCall(0x42439C, &ToHitHook);
|
HookCall(0x42439C, &ToHitHook); // determine_to_hit_from_tile_
|
||||||
HookCall(0x42679A, &ToHitHook);
|
HookCall(0x42679A, &ToHitHook); // combat_to_hit_
|
||||||
|
|
||||||
LoadHookScript("hs_afterhitroll", HOOK_AFTERHITROLL);
|
LoadHookScript("hs_afterhitroll", HOOK_AFTERHITROLL);
|
||||||
MakeCall(0x423893, &AfterHitRollHook, true);
|
MakeCall(0x423893, &AfterHitRollHook, true);
|
||||||
|
|||||||
Reference in New Issue
Block a user