diff --git a/system/client-functions/EnemyDamageSync/EnemyDamageSync.3___.patch.s b/system/client-functions/EnemyDamageSync/EnemyDamageSync.3___.patch.s index c26c79aa..15739687 100644 --- a/system/client-functions/EnemyDamageSync/EnemyDamageSync.3___.patch.s +++ b/system/client-functions/EnemyDamageSync/EnemyDamageSync.3___.patch.s @@ -33,14 +33,6 @@ start: - # Enemy state setup debug hook - .data - .data 4 - .address - bl debug_hook1 - - - # Replace 6x09 with 6xE4 in subcommand handler table .data .data 8 @@ -187,16 +179,16 @@ handle_6xE4: # [std] (G_IncrementEnemyDamage_Extension_6xE4* cmd @ r3) -> void lis r4, 0x4B00 or r5, r4, r8 - stw [r1 - 4], r5 - lfs f1, [r1 - 4] - stw [r1 - 4], r4 - lfs f2, [r1 - 4] + stw [r1 + 0x10], r5 + lfs f1, [r1 + 0x10] + stw [r1 + 0x10], r4 + lfs f2, [r1 + 0x10] fsubs f1, f1, f2 # f1 = static_cast(current_hp) lfs f2, [r31 + 0x0C] fmuls f1, f1, f2 fctiwz f1, f1 - stfd [r1 - 8], f1 - lwz r8, [r1 - 4] + stfd [r1 + 0x10], f1 + lwz r8, [r1 + 0x14] li r4, 1 cmp r8, r4 bge handle_6xE4_proportional_positive @@ -217,8 +209,6 @@ handle_6xE4_not_proportional: blt handle_6xE4_damage_less_than_max_hp sth [r3 + 6], r5 # st->total_damage = cmd->max_hp; - li r4, 0x0C - bl send_debug_info # TODO: Remove this when no longer necessary lwz r4, [r3] andi. r0, r4, 0x800 bne handle_6xE4_return @@ -247,9 +237,7 @@ handle_6xE4_damage_less_than_max_hp: li r4, 0 handle_6xE4_damage_nonnegative: sth [r3 + 6], r4 # st->total_damage = std::max(st->total_damage + cmd->hit_amount, 0); - li r4, 0x0C mr r30, r3 - bl send_debug_info lwz r3, [r1 + 0x18] # if (ene) ene->v50_on_state_updated(&st); cmplwi r3, 0 @@ -391,81 +379,6 @@ set_enemy_total_damage_hook: -# TODO: Remove this when no longer necessary -debug_hook1: - mflr r0 - stw [r1 + 4], r0 - stwu [r1 - 0x20], r1 - mr r6, r3 - mr r7, r4 - mr r3, r4 - li r4, 0x0C - li r5, -1 - bl send_debug_info - mr r3, r6 - mr r4, r7 - addi r1, r1, 0x20 - lwz r0, [r1 + 4] - mtlr r0 - mtctr r12 - bctr - - - -send_debug_info: # (void* data @ r3, uint32_t size @ r4, uint16_t what @ r5) -> void - mflr r0 - stw [r1 + 0x04], r0 - stw [r1 - 0x04], r3 - stw [r1 - 0x08], r4 - stw [r1 - 0x0C], r5 - stw [r1 - 0x10], r6 - stw [r1 - 0x14], r7 - stw [r1 - 0x18], r8 - stw [r1 - 0x1C], r9 - stw [r1 - 0x20], r10 - stw [r1 - 0x24], r11 - stw [r1 - 0x28], r12 - subi r6, r1, 0x40 - sub r6, r6, r4 - stw [r6], r1 - mr r1, r6 - - rlwinm r6, r4, 14, 8, 15 - addis r6, r6, 1 - oris r6, r6, 0xFF00 - rlwinm r5, r5, 0, 16, 31 - or r5, r5, r6 - stw [r1 + 0x08], r5 - li r6, 0 - subi r3, r3, 4 - addi r7, r1, 0x08 - rlwinm r0, r4, 30, 24, 31 - mtctr r0 -copy_again: - lwzu r0, [r3 + 4] - stwu [r7 + 4], r0 - bdnz copy_again - - addi r3, r1, 0x08 - bl send_and_handle_60 - - lwz r1, [r1] - lwz r3, [r1 - 0x04] - lwz r4, [r1 - 0x08] - lwz r5, [r1 - 0x0C] - lwz r6, [r1 - 0x10] - lwz r7, [r1 - 0x14] - lwz r8, [r1 - 0x18] - lwz r9, [r1 - 0x1C] - lwz r10, [r1 - 0x20] - lwz r11, [r1 - 0x24] - lwz r12, [r1 - 0x28] - lwz r0, [r1 + 0x04] - mtlr r0 - blr - - - code_end: .data 0x00000000 diff --git a/system/client-functions/EnemyDamageSync/EnemyDamageSync.4___.patch.s b/system/client-functions/EnemyDamageSync/EnemyDamageSync.4___.patch.s index 8e39655b..6c298f9d 100644 --- a/system/client-functions/EnemyDamageSync/EnemyDamageSync.4___.patch.s +++ b/system/client-functions/EnemyDamageSync/EnemyDamageSync.4___.patch.s @@ -125,11 +125,12 @@ on_add_or_subtract_hp_skip_negate_amount: mov cx, 100 sub cx, [esp + 0x34] # cx = (100 - special_amount) movsx ecx, cx - mov [esp - 4], ecx - fild st0, dword [esp - 4] # current_hp_factor = static_cast(100 - special_amount) - fmul st0, dword [esp + 0x38] # *= weapon_reduction_factor - mov dword [esp - 4], 0x42C80000 # 100.0f - fdiv st0, dword [esp - 4] + push ecx + fild st0, dword [esp] # current_hp_factor = static_cast(100 - special_amount) + fmul st0, dword [esp + 0x3C] # *= weapon_reduction_factor + mov dword [esp], 0x42C80000 # 100.0f + fdiv st0, dword [esp] + add esp, 4 fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100 on_add_or_subtract_hp_not_proportional: @@ -210,12 +211,13 @@ handle_6xE4: # [std] (G_6xE4* cmd @ [esp + 4]) -> void xor edx, edx cmp ecx, edx cmovl ecx, edx - mov [esp - 4], ecx - fild st0, dword [esp - 4] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) + push ecx + fild st0, dword [esp] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) fld st0, dword [ebx + 0x0C] fmulp st1, st0 - fistp dword [esp - 4], st0 - mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + fistp dword [esp], st0 + mov ecx, dword [esp] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + add esp, 4 xor edx, edx inc edx cmp ecx, edx diff --git a/system/client-functions/EnemyDamageSync/EnemyDamageSync.59NL.patch.s b/system/client-functions/EnemyDamageSync/EnemyDamageSync.59NL.patch.s index d0b6f079..90e66651 100644 --- a/system/client-functions/EnemyDamageSync/EnemyDamageSync.59NL.patch.s +++ b/system/client-functions/EnemyDamageSync/EnemyDamageSync.59NL.patch.s @@ -53,12 +53,13 @@ handle_6xE4_start: # (G_6xE4* cmd @ [esp + 4]) -> void xor edx, edx cmp ecx, edx cmovl ecx, edx - mov [esp - 4], ecx - fild st0, dword [esp - 4] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) + push ecx + fild st0, dword [esp] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) fld st0, dword [ebx + 0x0C] fmulp st1, st0 - fistp dword [esp - 4], st0 - mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + fistp dword [esp], st0 + mov ecx, dword [esp] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + add esp, 4 xor edx, edx inc edx cmp ecx, edx @@ -202,11 +203,12 @@ on_add_or_subtract_hp_skip_negate_amount: # esp is 0x18 down from where it is in caller's context mov edx, 100 sub edx, [esp + 0x24] # edx = (100 - special_amount) - mov [esp - 4], edx - fild st0, dword [esp - 4] # current_hp_factor = static_cast(100 - special_amount) - fmul st0, dword [esp + 0x50] # *= weapon_reduction_factor - mov dword [esp - 4], 0x42C80000 # 100.0f - fdiv st0, dword [esp - 4] + push edx + fild st0, dword [esp] # current_hp_factor = static_cast(100 - special_amount) + fmul st0, dword [esp + 0x54] # *= weapon_reduction_factor + mov dword [esp], 0x42C80000 # 100.0f + fdiv st0, dword [esp] + add esp, 4 fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100 on_add_or_subtract_hp_not_proportional: