-==-
!
ASM - Reverse Knockback
Modify <reverse_knockback_params> to permanently or temporarily flip the X and/or Y axis of all knockback angles.
[Punkline]
<reverse_knockback_params> All
00000003
# masks:
# 00000007 = 3-bit X modifiers
# 00000070 = 3-bit Y modifiers
# each has 3 bools:
# +1 = if true, next knockback calculation will be reversed on this axis
# if false, next knockback calculation will be normal
# +2 = while true, +1 flag does not get cleared
# while flase, +1 flag is cleared on each knockback
# +4 = while true, disable checks for +1 and +2 flags
# while false, code is enabled
1.02 ----- 8008dc18 --- 7c050000 -> Branch
# bool names:
bXTrigger = 31; bXHold = 30; bXDisable = 29;
bYTrigger = 27; bYHold = 26; bYDisable = 25;
cmpw r5, r0
# cr0 holds imporatant comparison for return branch to use
lis r0, <<reverse_knockback_params>>@h
ori r6, r0, <<reverse_knockback_params>>@l
lbz r0, 0x3(r6)
mtcrf 0x03, r0
# cr6 and cr7 hold param bools
_checkX:
bt+ bXDisable, _checkY
bf+ bXTrigger, _checkY
crmove bXTrigger, bXHold
fneg f1, f1
# reverse argument for X velocity if triggered
_checkY:
bt+ bYDisable, _return
bf+ bYTrigger, _return
crmove bYTrigger, bYHold
fneg f2, f2
# reverse argument for Y velocity of triggered
_return:
mfcr r0
stb r0, 0x3(r6)
# update trigger flags
.long 0 # cr0 is still intact