don't use under-stack space in EnemyDamageSync
This commit is contained in:
@@ -33,14 +33,6 @@ start:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Enemy state setup debug hook
|
|
||||||
.data <VERS 0x800F60BC 0x800F63C0 0x800F65EC 0x800F64E8 0x800F6360 0x800F6360 0x800F64F8 0x800F64C0>
|
|
||||||
.data 4
|
|
||||||
.address <VERS 0x800F60BC 0x800F63C0 0x800F65EC 0x800F64E8 0x800F6360 0x800F6360 0x800F64F8 0x800F64C0>
|
|
||||||
bl debug_hook1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Replace 6x09 with 6xE4 in subcommand handler table
|
# Replace 6x09 with 6xE4 in subcommand handler table
|
||||||
.data <VERS 0x804C00C4 0x804C37FC 0x804C5C9C 0x804C5A3C 0x804C0894 0x804C0D74 0x804C5314 0x804C57B4>
|
.data <VERS 0x804C00C4 0x804C37FC 0x804C5C9C 0x804C5A3C 0x804C0894 0x804C0D74 0x804C5314 0x804C57B4>
|
||||||
.data 8
|
.data 8
|
||||||
@@ -187,16 +179,16 @@ handle_6xE4: # [std] (G_IncrementEnemyDamage_Extension_6xE4* cmd @ r3) -> void
|
|||||||
|
|
||||||
lis r4, 0x4B00
|
lis r4, 0x4B00
|
||||||
or r5, r4, r8
|
or r5, r4, r8
|
||||||
stw [r1 - 4], r5
|
stw [r1 + 0x10], r5
|
||||||
lfs f1, [r1 - 4]
|
lfs f1, [r1 + 0x10]
|
||||||
stw [r1 - 4], r4
|
stw [r1 + 0x10], r4
|
||||||
lfs f2, [r1 - 4]
|
lfs f2, [r1 + 0x10]
|
||||||
fsubs f1, f1, f2 # f1 = static_cast<float>(current_hp)
|
fsubs f1, f1, f2 # f1 = static_cast<float>(current_hp)
|
||||||
lfs f2, [r31 + 0x0C]
|
lfs f2, [r31 + 0x0C]
|
||||||
fmuls f1, f1, f2
|
fmuls f1, f1, f2
|
||||||
fctiwz f1, f1
|
fctiwz f1, f1
|
||||||
stfd [r1 - 8], f1
|
stfd [r1 + 0x10], f1
|
||||||
lwz r8, [r1 - 4]
|
lwz r8, [r1 + 0x14]
|
||||||
li r4, 1
|
li r4, 1
|
||||||
cmp r8, r4
|
cmp r8, r4
|
||||||
bge handle_6xE4_proportional_positive
|
bge handle_6xE4_proportional_positive
|
||||||
@@ -217,8 +209,6 @@ handle_6xE4_not_proportional:
|
|||||||
blt handle_6xE4_damage_less_than_max_hp
|
blt handle_6xE4_damage_less_than_max_hp
|
||||||
|
|
||||||
sth [r3 + 6], r5 # st->total_damage = cmd->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]
|
lwz r4, [r3]
|
||||||
andi. r0, r4, 0x800
|
andi. r0, r4, 0x800
|
||||||
bne handle_6xE4_return
|
bne handle_6xE4_return
|
||||||
@@ -247,9 +237,7 @@ handle_6xE4_damage_less_than_max_hp:
|
|||||||
li r4, 0
|
li r4, 0
|
||||||
handle_6xE4_damage_nonnegative:
|
handle_6xE4_damage_nonnegative:
|
||||||
sth [r3 + 6], r4 # st->total_damage = std::max<int16_t>(st->total_damage + cmd->hit_amount, 0);
|
sth [r3 + 6], r4 # st->total_damage = std::max<int16_t>(st->total_damage + cmd->hit_amount, 0);
|
||||||
li r4, 0x0C
|
|
||||||
mr r30, r3
|
mr r30, r3
|
||||||
bl send_debug_info
|
|
||||||
|
|
||||||
lwz r3, [r1 + 0x18] # if (ene) ene->v50_on_state_updated(&st);
|
lwz r3, [r1 + 0x18] # if (ene) ene->v50_on_state_updated(&st);
|
||||||
cmplwi r3, 0
|
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:
|
code_end:
|
||||||
|
|
||||||
.data 0x00000000
|
.data 0x00000000
|
||||||
|
|||||||
@@ -125,11 +125,12 @@ on_add_or_subtract_hp_skip_negate_amount:
|
|||||||
mov cx, 100
|
mov cx, 100
|
||||||
sub cx, [esp + 0x34] # cx = (100 - special_amount)
|
sub cx, [esp + 0x34] # cx = (100 - special_amount)
|
||||||
movsx ecx, cx
|
movsx ecx, cx
|
||||||
mov [esp - 4], ecx
|
push ecx
|
||||||
fild st0, dword [esp - 4] # current_hp_factor = static_cast<float>(100 - special_amount)
|
fild st0, dword [esp] # current_hp_factor = static_cast<float>(100 - special_amount)
|
||||||
fmul st0, dword [esp + 0x38] # *= weapon_reduction_factor
|
fmul st0, dword [esp + 0x3C] # *= weapon_reduction_factor
|
||||||
mov dword [esp - 4], 0x42C80000 # 100.0f
|
mov dword [esp], 0x42C80000 # 100.0f
|
||||||
fdiv st0, dword [esp - 4]
|
fdiv st0, dword [esp]
|
||||||
|
add esp, 4
|
||||||
fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100
|
fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100
|
||||||
on_add_or_subtract_hp_not_proportional:
|
on_add_or_subtract_hp_not_proportional:
|
||||||
|
|
||||||
@@ -210,12 +211,13 @@ handle_6xE4: # [std] (G_6xE4* cmd @ [esp + 4]) -> void
|
|||||||
xor edx, edx
|
xor edx, edx
|
||||||
cmp ecx, edx
|
cmp ecx, edx
|
||||||
cmovl ecx, edx
|
cmovl ecx, edx
|
||||||
mov [esp - 4], ecx
|
push ecx
|
||||||
fild st0, dword [esp - 4] # current_hp = static_cast<float>(max<int32_t>(cmd->max_hp - st.total_damage, 0))
|
fild st0, dword [esp] # current_hp = static_cast<float>(max<int32_t>(cmd->max_hp - st.total_damage, 0))
|
||||||
fld st0, dword [ebx + 0x0C]
|
fld st0, dword [ebx + 0x0C]
|
||||||
fmulp st1, st0
|
fmulp st1, st0
|
||||||
fistp dword [esp - 4], st0
|
fistp dword [esp], st0
|
||||||
mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast<int16_t>(current_hp * cmd->factor)
|
mov ecx, dword [esp] # adjusted_hit_amount = static_cast<int16_t>(current_hp * cmd->factor)
|
||||||
|
add esp, 4
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
inc edx
|
inc edx
|
||||||
cmp ecx, edx
|
cmp ecx, edx
|
||||||
|
|||||||
@@ -53,12 +53,13 @@ handle_6xE4_start: # (G_6xE4* cmd @ [esp + 4]) -> void
|
|||||||
xor edx, edx
|
xor edx, edx
|
||||||
cmp ecx, edx
|
cmp ecx, edx
|
||||||
cmovl ecx, edx
|
cmovl ecx, edx
|
||||||
mov [esp - 4], ecx
|
push ecx
|
||||||
fild st0, dword [esp - 4] # current_hp = static_cast<float>(max<int32_t>(cmd->max_hp - st.total_damage, 0))
|
fild st0, dword [esp] # current_hp = static_cast<float>(max<int32_t>(cmd->max_hp - st.total_damage, 0))
|
||||||
fld st0, dword [ebx + 0x0C]
|
fld st0, dword [ebx + 0x0C]
|
||||||
fmulp st1, st0
|
fmulp st1, st0
|
||||||
fistp dword [esp - 4], st0
|
fistp dword [esp], st0
|
||||||
mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast<int16_t>(current_hp * cmd->factor)
|
mov ecx, dword [esp] # adjusted_hit_amount = static_cast<int16_t>(current_hp * cmd->factor)
|
||||||
|
add esp, 4
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
inc edx
|
inc edx
|
||||||
cmp ecx, 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
|
# esp is 0x18 down from where it is in caller's context
|
||||||
mov edx, 100
|
mov edx, 100
|
||||||
sub edx, [esp + 0x24] # edx = (100 - special_amount)
|
sub edx, [esp + 0x24] # edx = (100 - special_amount)
|
||||||
mov [esp - 4], edx
|
push edx
|
||||||
fild st0, dword [esp - 4] # current_hp_factor = static_cast<float>(100 - special_amount)
|
fild st0, dword [esp] # current_hp_factor = static_cast<float>(100 - special_amount)
|
||||||
fmul st0, dword [esp + 0x50] # *= weapon_reduction_factor
|
fmul st0, dword [esp + 0x54] # *= weapon_reduction_factor
|
||||||
mov dword [esp - 4], 0x42C80000 # 100.0f
|
mov dword [esp], 0x42C80000 # 100.0f
|
||||||
fdiv st0, dword [esp - 4]
|
fdiv st0, dword [esp]
|
||||||
|
add esp, 4
|
||||||
fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100
|
fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100
|
||||||
on_add_or_subtract_hp_not_proportional:
|
on_add_or_subtract_hp_not_proportional:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user