Determine attack animation from used Weapon Type
Jump to navigation
Jump to search
Calculates which attacking animation to use based on the height difference of attacker and target. if a chicken or frog is attacking, the animation used is set to 0x7A. 0008288c: 27bdffe0 addiu r29,r29,0xffe0 00082890: afb10014 sw r17,0x0014(r29) 00082894: 00808821 addu r17,r4,r0 r17 = misc data 00082898: afb20018 sw r18,0x0018(r29) 0008289c: 00a09021 addu r18,r5,r0 r18 = misc data 000828a0: afbf001c sw r31,0x001c(r29) 000828a4: 12200060 beq r17,r0,0x00082a28 000828a8: afb00010 sw r16,0x0010(r29) 000828ac: 12400055 beq r18,r0,0x00082a04 000828b0: 00000000 nop 000828b4: 92220006 lbu r2,0x0006(r17) load attacker spritesheet 000828b8: 00000000 nop 000828bc: 2c42009b sltiu r2,r2,0x009b 000828c0: 14400006 bne r2,r0,0x000828dc branch if not chicken/frog 000828c4: 3402000c ori r2,r0,0x000c 000828c8: 3c048009 lui r4,0x8009 000828cc: 90844365 lbu r4,0x4365(r4) Load chicken/frog attack animation 000828d0: 86250070 lh r5,0x0070(r17) load attack facing 000828d4: 08020a88 j 0x00082a20 000828d8: 00000000 nop Unit animations 000828dc: 9224013b lbu r4,0x013b(r17) load equipped weapon type 000828e0: 00000000 nop 000828e4: 14820009 bne r4,r2,0x0008290c branch if not bows (boo) 000828e8: 00000000 nop 000828ec: 0c06c118 jal 0x001b0460 --> 001b0460 - 001b04d8 returns r2 is shooting angle (up, straight, down) 000828f0: 00000000 nop 000828f4: 3c018009 lui r1,0x8009 000828f8: 00220821 addu r1,r1,r2 000828fc: 90244388 lbu r4,0x4388(r1) Loads 53, 54, or 55 depending on ^ that nonsense up there. (corresponding animations are shooting up, straight, and down.) 00082900: 86250070 lh r5,0x0070(r17) load attack facing 00082904: 08020a88 j 0x00082a20 Save animation and facing 00082908: 00000000 nop Weapon is not bow 0008290c: 8e420134 lw r2,0x0134(r18) target data 00082910: 00000000 nop 00082914: 9043018e lbu r3,0x018e(r2) load evade type 00082918: 00000000 nop 0008291c: 1060000e beq r3,r0,0x00082958 branch if hit 00082920: 28620009 slti r2,r3,0x0009 00082924: 1440000c bne r2,r0,0x00082958 branch if < 0x09 (hit, guarded, arrow guard, nullified, missed, caught, cancelled by status) 00082928: 2862000c slti r2,r3,0x000c 0008292c: 1040000a beq r2,r0,0x00082958 branch if > 0x0c (error return) 00082930: 2862000a slti r2,r3,0x000a 00082934: 14400008 bne r2,r0,0x00082958 branch if 0x09 (reflected) Attack missed 00082938: 00041040 sll r2,r4,0x01 r2 = weapon type * 2 0008293c: 00441021 addu r2,r2,r4 weapon type * 3 00082940: 3c018009 lui r1,0x8009 00082944: 00220821 addu r1,r1,r2 00082948: 90244364 lbu r4,0x4364(r1) load animation for low animation on miss 0008294c: 86250070 lh r5,0x0070(r17) load attack facing 00082950: 08020a88 j 0x00082a20 jump to end 00082954: 00000000 nop Attack connected to target 00082958: 92240004 lbu r4,0x0004(r17) load unit misc ID 0008295c: 0c02371d jal 0x0008dc74 -->0008dc74 - 0008dc98 - Finds attacker's misc unit data, and their height. 00082960: 00000000 nop 00082964: 000287c2 srl r16,r2,0x1f 00082968: 02028021 addu r16,r16,r2 0008296c: 00108043 sra r16,r16,0x01 r16 = attacker height / 2 00082970: 96220042 lhu r2,0x0042(r17) load map height (in units, and also negative?) 00082974: 92440004 lbu r4,0x0004(r18) load unit misc ID 00082978: 0c02371d jal 0x0008dc74 -->0008dc74 - 0008dc98 - Finds target's misc unit data, and their height 0008297c: 02028023 subu r16,r16,r2 r16 = height / 2 - map height 00082980: 00021fc2 srl r3,r2,0x1f 00082984: 00621821 addu r3,r3,r2 00082988: 00031843 sra r3,r3,0x01 0008298c: 00108400 sll r16,r16,0x10 00082990: 96420042 lhu r2,0x0042(r18) load target height (units, also, negative?) 00082994: 00108403 sra r16,r16,0x10 00082998: 00621823 subu r3,r3,r2 0008299c: 00031c00 sll r3,r3,0x10 000829a0: 00031c03 sra r3,r3,0x10 000829a4: 02038023 subu r16,r16,r3 find the difference in height between the two units. (CAS - TAR. bigger numbers mean higher attacker, lower numbers mean lower attacker.) 000829a8: 2a02fff5 slti r2,r16,-0x000b r2 = true if < -0xb 000829ac: 1040000a beq r2,r0,0x000829d8 branch if > -0xb 000829b0: 2a02000c slti r2,r16,0x000c r2 = true if < 0xc Height mod < -0xb 000829b4: 9223013b lbu r3,0x013b(r17) load weapon type 000829b8: 86250070 lh r5,0x0070(r17) load attack facing 000829bc: 00031040 sll r2,r3,0x01 000829c0: 00431021 addu r2,r2,r3 weapon type * 3 000829c4: 3c018009 lui r1,0x8009 000829c8: 00220821 addu r1,r1,r2 000829cc: 90244364 lbu r4,0x4364(r1) load low mod animation 000829d0: 08020a88 j 0x00082a20 000829d4: 00000000 nop height mod > 0xc 000829d8: 1440000a bne r2,r0,0x00082a04 Branch if difference in unit heights is between -0xb and 0xc 000829dc: 00000000 nop 000829e0: 9223013b lbu r3,0x013b(r17) load weapon type 000829e4: 86250070 lh r5,0x0070(r17) load facing 000829e8: 00031040 sll r2,r3,0x01 000829ec: 00431021 addu r2,r2,r3 000829f0: 3c018009 lui r1,0x8009 000829f4: 00220821 addu r1,r1,r2 000829f8: 90244366 lbu r4,0x4366(r1) load high mod animation 000829fc: 08020a88 j 0x00082a20 00082a00: 00000000 nop -0xb < Height difference < 0xc 00082a04: 9223013b lbu r3,0x013b(r17) Load weapon type 00082a08: 86250070 lh r5,0x0070(r17) Load facing 00082a0c: 00031040 sll r2,r3,0x01 00082a10: 00431021 addu r2,r2,r3 00082a14: 3c018009 lui r1,0x8009 00082a18: 00220821 addu r1,r1,r2 00082a1c: 90244365 lbu r4,0x4365(r1) load mid mod animation All: 00082a20: 0c020662 jal 0x00081988 store unit animation + facing 00082a24: 02203021 addu r6,r17,r0 00082a28: 8fbf001c lw r31,0x001c(r29) 00082a2c: 8fb20018 lw r18,0x0018(r29) 00082a30: 8fb10014 lw r17,0x0014(r29) 00082a34: 8fb00010 lw r16,0x0010(r29) 00082a38: 27bd0020 addiu r29,r29,0x0020 00082a3c: 03e00008 jr r31 00082a40: 00000000 nop