0007e9a8 - 0007eb88
Jump to navigation
Jump to search
0007e9a8: 27bdffc0 addiu r29,r29,0xffc0 0007e9ac: afb00038 sw r16,0x0038(r29) 0007e9b0: 00808021 addu r16,r4,r0 #unit misc data pointer 0007e9b4: afbf003c sw r31,0x003c(r29) 0007e9b8: 3c058006 lui r5,0x8006 0007e9bc: 24a577f8 addiu r5,r5,0x77f8 #you really didn't need this whole table in the stack, you know that right? 0007e9c0: 88a20003 lwl r2,0x0003(r5) 0007e9c4: 98a20000 lwr r2,0x0000(r5) 0007e9c8: 88a30007 lwl r3,0x0007(r5) 0007e9cc: 98a30004 lwr r3,0x0004(r5) 0007e9d0: 88a4000b lwl r4,0x000b(r5) 0007e9d4: 98a40008 lwr r4,0x0008(r5) 0007e9d8: aba20013 swl r2,0x0013(r29) 0007e9dc: bba20010 swr r2,0x0010(r29) 0007e9e0: aba30017 swl r3,0x0017(r29) 0007e9e4: bba30014 swr r3,0x0014(r29) 0007e9e8: aba4001b swl r4,0x001b(r29) 0007e9ec: bba40018 swr r4,0x0018(r29) 0007e9f0: 88a2000f lwl r2,0x000f(r5) 0007e9f4: 98a2000c lwr r2,0x000c(r5) 0007e9f8: 88a30013 lwl r3,0x0013(r5) 0007e9fc: 98a30010 lwr r3,0x0010(r5) 0007ea00: 88a40017 lwl r4,0x0017(r5) 0007ea04: 98a40014 lwr r4,0x0014(r5) 0007ea08: aba2001f swl r2,0x001f(r29) 0007ea0c: bba2001c swr r2,0x001c(r29) 0007ea10: aba30023 swl r3,0x0023(r29) 0007ea14: bba30020 swr r3,0x0020(r29) 0007ea18: aba40027 swl r4,0x0027(r29) 0007ea1c: bba40024 swr r4,0x0024(r29) 0007ea20: 8e020144 lw r2,0x0144(r16) #status flags 5, 6, blank + blank 2 0007ea24: 00000000 nop 0007ea28: 30420240 andi r2,r2,0x0240 #check for jump or...? (mounted? mount? maybe?) 0007ea2c: 14400052 bne r2,r0,0x0007eb78 #branch if either 0007ea30: 27a60010 addiu r6,r29,0x0010 0007ea34: 8e020080 lw r2,0x0080(r16) #load coords + movement flags 0007ea38: 3c031000 lui r3,0x1000 0007ea3c: 00431024 and r2,r2,r3 0007ea40: 10400027 beq r2,r0,0x0007eae0 #branch if doesn't have float movement flag 0007ea44: 34020015 ori r2,r0,0x0015 0007ea48: 86020074 lh r2,0x0074(r16) #target height difference? (difference to attacker?) 0007ea4c: 00000000 nop 0007ea50: 00401821 addu r3,r2,r0 #sprite height 0007ea54: 2842000c slti r2,r2,0x000c #check if height difference < 0xc 0007ea58: 10400007 beq r2,r0,0x0007ea78 #branch if not 0007ea5c: 34020001 ori r2,r0,0x0001 0007ea60: 3c028004 lui r2,0x8004 0007ea64: 94425980 lhu r2,0x5980(r2) #load animation speed? 0007ea68: 00000000 nop 0007ea6c: 00621021 addu r2,r3,r2 #sprite height + animation speed 0007ea70: 0801fad3 j 0x0007eb4c 0007ea74: a6020074 sh r2,0x0074(r16) #store new?
Jumping or...?
0007ea78: 92030130 lbu r3,0x0130(r16) #load rider/mount 0007ea7c: 00000000 nop 0007ea80: 10620031 beq r3,r2,0x0007eb48 #branch if neither (unit is jumping, but not mounted?) 0007ea84: 3c05aaaa lui r5,0xaaaa #if attacker unit is mounted: 0007ea88: 96020078 lhu r2,0x0078(r16) #? 0007ea8c: 3c038004 lui r3,0x8004 0007ea90: 94635980 lhu r3,0x5980(r3) #animation speed 0007ea94: 34a5aaab ori r5,r5,0xaaab #r5 = 2/3 0007ea98: 00431021 addu r2,r2,r3 #add together 0007ea9c: 3044ffff andi r4,r2,0xffff 0007eaa0: 00850019 multu r4,r5 #animation speed + ? * 2/3 0007eaa4: a6020078 sh r2,0x0078(r16) #save new ? 0007eaa8: 00001810 mfhi r3 0007eaac: 00031942 srl r3,r3,0x05 #animation speed + ? * 0x2/0x60 (rounds to 5 binary digits, or a nibble and a bit.) 0007eab0: 00031040 sll r2,r3,0x01 #animation speed + ? * 0x2/0x30 0007eab4: 00431021 addu r2,r2,r3 #animation speed + ? * 0x1/0x10 0007eab8: 00021100 sll r2,r2,0x04 #animation speed + ? * 0x1 (rounded to 5th binary place) 0007eabc: 00822023 subu r4,r4,r2 #obtains only the first 5 bits of animation speed + ? (which, already mostly falls into 5 bits anyway. I call obfuscation bullshit.) 0007eac0: 00042042 srl r4,r4,0x01 #animation speed + ? / 2 0007eac4: 00c42021 addu r4,r6,r4 #stack + anim speed + ? / 2 + stack 0007eac8: 90820000 lbu r2,0x0000(r4) #mount height? 0007eacc: 00000000 nop 0007ead0: 00021600 sll r2,r2,0x18 0007ead4: 00021603 sra r2,r2,0x18 #when you don't know how lb works. 0007ead8: 0801fad3 j 0x0007eb4c 0007eadc: a6020076 sh r2,0x0076(r16) #store to "added to final height value" (mount height?)
Unit is not floating, not mounted:
0007eae0: 3c038009 lui r3,0x8009 0007eae4: 8c6360e4 lw r3,0x60e4(r3) #load type of display? 0007eae8: 00000000 nop 0007eaec: 10620017 beq r3,r2,0x0007eb4c #end if free cursor 0007eaf0: 00000000 nop 0007eaf4: 86020074 lh r2,0x0074(r16) #height difference? 0007eaf8: 00000000 nop 0007eafc: 10400012 beq r2,r0,0x0007eb48 #branch if none 0007eb00: 00401821 addu r3,r2,r0 0007eb04: 3c028004 lui r2,0x8004 0007eb08: 94425980 lhu r2,0x5980(r2) #animation speed? 0007eb0c: 00000000 nop 0007eb10: 00621023 subu r2,r3,r2 0007eb14: a6020074 sh r2,0x0074(r16) #store height diff - animation speed 0007eb18: 00021400 sll r2,r2,0x10 0007eb1c: 04410002 bgez r2,0x0007eb28 0007eb20: 00000000 nop 0007eb24: a6000074 sh r0,0x0074(r16) #if new height difference is negative, store 0. 0007eb28: 0c01f4fd jal 0x0007d3f4 #0007d3f4 - 0007d474 - return height of unit being ridden (or just unit height if not mounted) 0007eb2c: 02002021 addu r4,r16,r0 0007eb30: 00402021 addu r4,r2,r0 0007eb34: 00041400 sll r2,r4,0x10 0007eb38: 00021103 sra r2,r2,0x04 #height: vector Modded 0007eb3c: a6040042 sh r4,0x0042(r16) 0007eb40: 0801fad3 j 0x0007eb4c 0007eb44: ae02001c sw r2,0x001c(r16) #store new height mod in both places
no height difference between tar/cas from float/mount/jump?
0007eb48: a6000076 sh r0,0x0076(r16) #No extra height on unit?
Return
0007eb4c: 0c01f4fd jal 0x0007d3f4 #0007d3f4 - 0007d474 - return height of unit being ridden (or just unit height if not mounted) 0007eb50: 02002021 addu r4,r16,r0 0007eb54: 00402021 addu r4,r2,r0 #unit/mount height mod in r4 0007eb58: 86020042 lh r2,0x0042(r16) #load height mod of unit 0007eb5c: 00041c00 sll r3,r4,0x10 0007eb60: 00031c03 sra r3,r3,0x10 0007eb64: 0062102a slt r2,r3,r2 # 0007eb68: 10400003 beq r2,r0,0x0007eb78 #branch if height of mount =< current height of unit (height mods are always negative) 0007eb6c: 00031300 sll r2,r3,0x0c 0007eb70: a6040042 sh r4,0x0042(r16) #store height of mount in 0x42 height mod 0007eb74: ae02001c sw r2,0x001c(r16) #store height of mount in 0x1c height mod 0007eb78: 8fbf003c lw r31,0x003c(r29) 0007eb7c: 8fb00038 lw r16,0x0038(r29) 0007eb80: 27bd0040 addiu r29,r29,0x0040 0007eb84: 03e00008 jr r31 0007eb88: 00000000 nop