Linear Projectile secondary effect
(Redirected from 001b3938 - 001b40f4)
Jump to navigation
Jump to search
001b3938: 3c02801c lui r2,0x801c 001b393c: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b3940: 27bdff60 addiu r29,r29,0xff60 001b3944: afbf009c sw r31,0x009c(r29) 001b3948: afb60098 sw r22,0x0098(r29) 001b394c: afb50094 sw r21,0x0094(r29) 001b3950: afb40090 sw r20,0x0090(r29) 001b3954: afb3008c sw r19,0x008c(r29) 001b3958: afb20088 sw r18,0x0088(r29) 001b395c: afb10084 sw r17,0x0084(r29) 001b3960: afb00080 sw r16,0x0080(r29) 001b3964: 8c430008 lw r3,0x0008(r2) #load effect phase 001b3968: 34100002 ori r16,r0,0x0002 001b396c: 107000f2 beq r3,r16,0x001b3d38 #branch if current phase is executing 001b3970: 2c620003 sltiu r2,r3,0x0003 001b3974: 10400005 beq r2,r0,0x001b398c #branch if current phase is finishing or erroneous 001b3978: 34020001 ori r2,r0,0x0001 001b397c: 10620008 beq r3,r2,0x001b39a0 #branch if current phase is initializing 001b3980: 00801021 addu r2,r4,r0 001b3984: 0806d033 j 0x001b40cc #error otherwise 001b3988: 00000000 nop 001b398c: 34020003 ori r2,r0,0x0003 001b3990: 106201cc beq r3,r2,0x001b40c4 #branch if finishing 001b3994: 00801021 addu r2,r4,r0 001b3998: 0806d033 j 0x001b40cc #error otherwise 001b399c: 00000000 nop
If initializing projectile: 001b39a0: 3c06801c lui r6,0x801c 001b39a4: 84c69264 lh r6,-0x6d9c(r6) #load target's X mod 001b39a8: 3c02801c lui r2,0x801c 001b39ac: 8442925c lh r2,-0x6da4(r2) #acting unit's X mod 001b39b0: 00000000 nop 001b39b4: 00c23023 subu r6,r6,r2 001b39b8: 00c60018 mult r6,r6 #find difference and square 001b39bc: 3c03801c lui r3,0x801c 001b39c0: 84639266 lh r3,-0x6d9a(r3) 001b39c4: 3c02801c lui r2,0x801c 001b39c8: 8442925e lh r2,-0x6da2(r2) #target/caster height 001b39cc: 00002012 mflo r4 001b39d0: 00621823 subu r3,r3,r2 001b39d4: 00000000 nop 001b39d8: 00630018 mult r3,r3 #find height difference and square 001b39dc: 3c05801c lui r5,0x801c 001b39e0: 84a59260 lh r5,-0x6da0(r5) 001b39e4: 3c02801c lui r2,0x801c 001b39e8: 84429268 lh r2,-0x6d98(r2) #target/caster Y 001b39ec: 00003812 mflo r7 001b39f0: 00451023 subu r2,r2,r5 001b39f4: 00000000 nop 001b39f8: 00420018 mult r2,r2 #find difference and square 001b39fc: afa60020 sw r6,0x0020(r29) #store x difference into vector 001b3a00: afa30024 sw r3,0x0024(r29) #store height difference into vector 001b3a04: afa20028 sw r2,0x0028(r29) #store y difference into vector 001b3a08: 00872021 addu r4,r4,r7 001b3a0c: 00001012 mflo r2 001b3a10: 00822021 addu r4,r4,r2 001b3a14: 0c00709a jal 0x0001c268 #Get Square root of r4 dealing with 4096 - sqrt(x^2 + y^2 + z^2) = distance between caster and target 001b3a18: 00042300 sll r4,r4,0x0c 001b3a1c: 3c06801c lui r6,0x801c 001b3a20: 24c68b50 addiu r6,r6,0x8b50 #don't believe I've seen this before. 001b3a24: 8fa30020 lw r3,0x0020(r29) 001b3a28: 8fa40024 lw r4,0x0024(r29) 001b3a2c: 8fa50028 lw r5,0x0028(r29) #load our vectors again 001b3a30: acc30000 sw r3,0x0000(r6) 001b3a34: acc40004 sw r4,0x0004(r6) 001b3a38: acc50008 sw r5,0x0008(r6) #store vectors to 0x801b8b50 001b3a3c: 8fa3002c lw r3,0x002c(r29) #0 vector 001b3a40: 00000000 nop 001b3a44: acc3000c sw r3,0x000c(r6) #0 vector 001b3a48: 3c03801c lui r3,0x801c 001b3a4c: 8c63c098 lw r3,-0x3f68(r3) #load effect target data 001b3a50: 3c04801c lui r4,0x801c 001b3a54: 9484bf3c lhu r4,-0x40c4(r4) #load 3d step counter 001b3a58: 3c01801c lui r1,0x801c 001b3a5c: ac228b40 sw r2,-0x74c0(r1) #store total distance between target and caster 001b3a60: 8c650050 lw r5,0x0050(r3) #load effect data pointer 001b3a64: 34028000 ori r2,r0,0x8000 #0x8000 001b3a68: 3c01801c lui r1,0x801c 001b3a6c: ac208b44 sw r0,-0x74bc(r1) #start pos = 0 001b3a70: 3c01801c lui r1,0x801c 001b3a74: ac228b48 sw r2,-0x74b8(r1) #store 0x8000 coordinates per frame 001b3a78: 3c01801c lui r1,0x801c 001b3a7c: a4248b4c sh r4,-0x74b4(r1) #store 3d step counter 001b3a80: 10a00003 beq r5,r0,0x001b3a90 #branch if no effect data 001b3a84: ac700008 sw r16,0x0008(r3) 001b3a88: 0c011180 jal 0x00044600 #LBA 001b3a8c: 00a02021 addu r4,r5,r0 #r4 = effect data pointer 001b3a90: 3c02801c lui r2,0x801c 001b3a94: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b3a98: 00000000 nop 001b3a9c: 94420004 lhu r2,0x0004(r2) #load animation's effect 001b3aa0: 00000000 nop 001b3aa4: 00021080 sll r2,r2,0x02 001b3aa8: 3c01801c lui r1,0x801c 001b3aac: 00220821 addu r1,r1,r2 001b3ab0: 843684de lh r22,-0x7b22(r1) #load effect's model ID 001b3ab4: 00000000 nop 001b3ab8: 32c200ff andi r2,r22,0x00ff 001b3abc: 14400020 bne r2,r0,0x001b3b40 #branch if model ID is not arrow 001b3ac0: 32c300ff andi r3,r22,0x00ff
Arrow Model: 001b3ac4: 0c011105 jal 0x00044414 #if model ID is arrow, 00044414 - 000444d8 001b3ac8: 34040c88 ori r4,r0,0x0c88 #arrow? 001b3acc: 00009821 addu r19,r0,r0 001b3ad0: 341400e0 ori r20,r0,0x00e0 001b3ad4: 0040a821 addu r21,r2,r0 #first empty space available for more model data? 001b3ad8: 3c02801c lui r2,0x801c 001b3adc: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b3ae0: 02a09021 addu r18,r21,r0 #effect data pointer 001b3ae4: ac550050 sw r21,0x0050(r2) #store effect data pointer 001b3ae8: 00008021 addu r16,r0,r0 001b3aec: 02408821 addu r17,r18,r0 #effect data pointer 001b3af0: 0c008f38 jal 0x00023ce0 #P14 SetPolyG3 001b3af4: 02202021 addu r4,r17,r0 #effect data pointer 001b3af8: 26100001 addiu r16,r16,0x0001 001b3afc: 2a020004 slti r2,r16,0x0004 001b3b00: 1440fffb bne r2,r0,0x001b3af0 #loop 4 times here 001b3b04: 2631001c addiu r17,r17,0x001c #shift pointer up 001b3b08: 00008021 addu r16,r0,r0 001b3b0c: 02b48821 addu r17,r21,r20 #effect data pointer + r20 pointer 001b3b10: 0c008f4c jal 0x00023d30 #P18 SetPolyG4 001b3b14: 02202021 addu r4,r17,r0 001b3b18: 26100001 addiu r16,r16,0x0001 001b3b1c: 2a02000d slti r2,r16,0x000d 001b3b20: 1440fffb bne r2,r0,0x001b3b10 #loop 0cd times here 001b3b24: 26310024 addiu r17,r17,0x0024 #shift pointer up 001b3b28: 269401d4 addiu r20,r20,0x01d4 #shift r20 pointer up 0x01d4 001b3b2c: 26730001 addiu r19,r19,0x0001 001b3b30: 2a620002 slti r2,r19,0x0002 001b3b34: 1440ffec bne r2,r0,0x001b3ae8 #loop both initialisation loops twice 001b3b38: 26520070 addiu r18,r18,0x0070 #shift r18 pointer up - above prepares model data for arrow model? 001b3b3c: 32c300ff andi r3,r22,0x00ff 001b3b40: 34020001 ori r2,r0,0x0001 001b3b44: 14620015 bne r3,r2,0x001b3b9c #branch if model is not stone 001b3b48: 2402ffff addiu r2,r0,0xffff
Stone Model: 001b3b4c: 0c011105 jal 0x00044414 #finds first free space for model data 001b3b50: 340402a0 ori r4,r0,0x02a0 #stone? 001b3b54: 00009821 addu r19,r0,r0 001b3b58: 3c03801c lui r3,0x801c 001b3b5c: 8c63c098 lw r3,-0x3f68(r3) #load effect data pointer 001b3b60: 00409021 addu r18,r2,r0 #model data pointer 001b3b64: ac720050 sw r18,0x0050(r3) #store 001b3b68: 00008021 addu r16,r0,r0 001b3b6c: 02408821 addu r17,r18,r0 #model data pointer 001b3b70: 0c008f38 jal 0x00023ce0 #P14 SetPolyG3 001b3b74: 02202021 addu r4,r17,r0 #model data pointer 001b3b78: 26100001 addiu r16,r16,0x0001 001b3b7c: 2a02000c slti r2,r16,0x000c 001b3b80: 1440fffb bne r2,r0,0x001b3b70 #loop 0xc times 001b3b84: 2631001c addiu r17,r17,0x001c #increment pointer by 0xc 001b3b88: 26730001 addiu r19,r19,0x0001 001b3b8c: 2a620002 slti r2,r19,0x0002 001b3b90: 1440fff5 bne r2,r0,0x001b3b68 #prepare another slot for polygon data? 0x150 - fills all 0x02a0 bytes prepared. that's, interesting. 001b3b94: 26520150 addiu r18,r18,0x0150 001b3b98: 2402ffff addiu r2,r0,0xffff 001b3b9c: 16c20062 bne r22,r2,0x001b3d28 #branch if model isn't -1 001b3ba0: 00000000 nop 001b3ba4: 3c02801c lui r2,0x801c 001b3ba8: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b3bac: 00000000 nop 001b3bb0: 8c450024 lw r5,0x0024(r2) #load used weapon ID 001b3bb4: 00000000 nop 001b3bb8: 24a2ff86 addiu r2,r5,0xff86 #-0x7A 001b3bbc: 2c420003 sltiu r2,r2,0x0003 001b3bc0: 10400016 beq r2,r0,0x001b3c1c #branch if used weapon is not a shuriken 001b3bc4: 00000000 nop
Shuriken Model 001b3bc8: 0c011105 jal 0x00044414 #find first available space for model data 001b3bcc: 34040380 ori r4,r0,0x0380 #shuriken? how much space to request/prepare for? 001b3bd0: 00009821 addu r19,r0,r0 001b3bd4: 3c03801c lui r3,0x801c 001b3bd8: 8c63c098 lw r3,-0x3f68(r3) #load effect target data 001b3bdc: 00409021 addu r18,r2,r0 001b3be0: ac720050 sw r18,0x0050(r3) #store model data pointer 001b3be4: 00008021 addu r16,r0,r0 001b3be8: 02408821 addu r17,r18,r0 001b3bec: 0c008f38 jal 0x00023ce0 #P14 SetPolyG3 001b3bf0: 02202021 addu r4,r17,r0 001b3bf4: 26100001 addiu r16,r16,0x0001 001b3bf8: 2a020010 slti r2,r16,0x0010 001b3bfc: 1440fffb bne r2,r0,0x001b3bec #loop 0x10 times 001b3c00: 2631001c addiu r17,r17,0x001c 001b3c04: 26730001 addiu r19,r19,0x0001 001b3c08: 2a620002 slti r2,r19,0x0002 001b3c0c: 1440fff5 bne r2,r0,0x001b3be4 #prepare another set of model data 001b3c10: 265201c0 addiu r18,r18,0x01c0 #increment 0x01c0 001b3c14: 0806cf4a j 0x001b3d28 #jump ahead 001b3c18: 00000000 nop
Item.bin graphic: 001b3c1c: 0c04dac4 jal 0x00136b10 #Get Item Graphic Data 001b3c20: 27a40060 addiu r4,r29,0x0060 #store graphic data in stack 001b3c24: 0c06b6cf jal 0x001adb3c # 001b3c28: 00000000 nop 001b3c2c: 3c03801c lui r3,0x801c 001b3c30: 8c63c098 lw r3,-0x3f68(r3) 001b3c34: 00000000 nop 001b3c38: a0620030 sb r2,0x0030(r3) #store result in 0x30 effect target data (item graphic ID?) 001b3c3c: 3c02801c lui r2,0x801c 001b3c40: 8c42c098 lw r2,-0x3f68(r2) 001b3c44: 00000000 nop 001b3c48: 90420030 lbu r2,0x0030(r2) #load again 001b3c4c: 00000000 nop 001b3c50: 00028040 sll r16,r2,0x01 001b3c54: 02028021 addu r16,r16,r2 #? * 3 001b3c58: 00101100 sll r2,r16,0x04 001b3c5c: 02028021 addu r16,r16,r2 #? * 33 001b3c60: 00108080 sll r16,r16,0x02 #? * 0xCC 001b3c64: 3c02801c lui r2,0x801c 001b3c68: 24429278 addiu r2,r2,0x9278 001b3c6c: 02028021 addu r16,r16,r2 #pointer to ? data (item.bin graphic data?) 001b3c70: 26110034 addiu r17,r16,0x0034 #graphic data + 0x34 001b3c74: 0c008f47 jal 0x00023d1c #P17 SetPolyFT4 001b3c78: 02202021 addu r4,r17,r0 001b3c7c: 3402001e ori r2,r0,0x001e 001b3c80: a602004a sh r2,0x004a(r16) #store 0x1e in 0x4a*(graphic data) 001b3c84: 34020080 ori r2,r0,0x0080 001b3c88: a202003a sb r2,0x003a(r16) 001b3c8c: a2020039 sb r2,0x0039(r16) 001b3c90: a2020038 sb r2,0x0038(r16) #store RGB as 0x80? 001b3c94: 93a2006c lbu r2,0x006c(r29) 001b3c98: 00000000 nop 001b3c9c: a2020050 sb r2,0x0050(r16) #store item graphic top left corner X load location 001b3ca0: a2020040 sb r2,0x0040(r16) #once more (bottom left?) 001b3ca4: 93a30070 lbu r3,0x0070(r29) #load graphic width 001b3ca8: 00000000 nop 001b3cac: 00431021 addu r2,r2,r3 #X + width 001b3cb0: 2603005c addiu r3,r16,0x005c #graphic data + 0x5c 001b3cb4: a2020058 sb r2,0x0058(r16) #store X item graphic top right corner X location 001b3cb8: a2020048 sb r2,0x0048(r16) #once more (bottom right?) 001b3cbc: 93a2006d lbu r2,0x006d(r29) #load Y load location 001b3cc0: 00603021 addu r6,r3,r0 #r6 = graphic data + 0x5c 001b3cc4: a2020049 sb r2,0x0049(r16) #store Y item graphic top left corner Y location 001b3cc8: a2020041 sb r2,0x0041(r16) #again? (top right?) 001b3ccc: 93a30072 lbu r3,0x0072(r29) #load graphic height 001b3cd0: 00000000 nop 001b3cd4: 00431021 addu r2,r2,r3 #Y + height 001b3cd8: a2020059 sb r2,0x0059(r16) #store Y item graphic bottom left corner Y location 001b3cdc: a2020051 sb r2,0x0051(r16) #again? (bottom right?) 001b3ce0: 97a2006e lhu r2,0x006e(r29) #load VRAM palette? 001b3ce4: 26070054 addiu r7,r16,0x0054 #r7 = graphic data + 0x54 001b3ce8: a6020042 sh r2,0x0042(r16) #store VRAM Palette? 001b3cec: 8e220000 lw r2,0x0000(r17) 001b3cf0: 8e230004 lw r3,0x0004(r17) 001b3cf4: 8e240008 lw r4,0x0008(r17) 001b3cf8: 8e25000c lw r5,0x000c(r17) 001b3cfc: acc20000 sw r2,0x0000(r6) 001b3d00: acc30004 sw r3,0x0004(r6) 001b3d04: acc40008 sw r4,0x0008(r6) 001b3d08: acc5000c sw r5,0x000c(r6) #copy graphic data from 0x34-0x43 to 0x5c-6b, and 0x44-0x5b to 0x6c-0x7b 001b3d0c: 26310010 addiu r17,r17,0x0010 001b3d10: 1627fff6 bne r17,r7,0x001b3cec # 001b3d14: 24c60010 addiu r6,r6,0x0010 # 001b3d18: 8e220000 lw r2,0x0000(r17) 001b3d1c: 8e230004 lw r3,0x0004(r17) 001b3d20: acc20000 sw r2,0x0000(r6) 001b3d24: acc30004 sw r3,0x0004(r6) #copy data from 0x54-0x5b to 0x7c-0x83 001b3d28: 0c0237ba jal 0x0008dee8 #Set Event Speed Inner 001b3d2c: 34040001 ori r4,r0,0x0001 #normal speed 001b3d30: 0806d032 j 0x001b40c8 #end 001b3d34: 34040001 ori r4,r0,0x0001 #r4 = 1?
Executing phase: 001b3d38: 3c04801c lui r4,0x801c 001b3d3c: 24848b50 addiu r4,r4,0x8b50 #address for previously stored motion(?) vectors 001b3d40: 27b00030 addiu r16,r29,0x0030 #stack + 0x30 001b3d44: 3c06801c lui r6,0x801c 001b3d48: 8cc68b44 lw r6,-0x74bc(r6) #load current position along vector? 001b3d4c: 3c02801c lui r2,0x801c 001b3d50: 8c428b48 lw r2,-0x74b8(r2) #load 0x8000? coordinates per step? 001b3d54: 3c05801c lui r5,0x801c 001b3d58: 8ca58b40 lw r5,-0x74c0(r5) #load 3d steps counter 001b3d5c: 00c23021 addu r6,r6,r2 #add steps 001b3d60: 3c01801c lui r1,0x801c 001b3d64: ac268b44 sw r6,-0x74bc(r1) #store new current position 001b3d68: 0c06bdb6 jal 0x001af6d8 #Find XYZ Position of Projectile Along Trajectory 001b3d6c: 02003821 addu r7,r16,r0 #return vectors go to stack + 0x30 001b3d70: 3c07801c lui r7,0x801c 001b3d74: 84e79260 lh r7,-0x6da0(r7) #load acting unit's y mod 001b3d78: 3c08801c lui r8,0x801c 001b3d7c: 85089268 lh r8,-0x6d98(r8) #load target unit's y mod 001b3d80: 3c03801c lui r3,0x801c 001b3d84: 8463925c lh r3,-0x6da4(r3) #load acting unit's x mod 001b3d88: 3c05801c lui r5,0x801c 001b3d8c: 84a59264 lh r5,-0x6d9c(r5) #load target unit's x mod 001b3d90: 8fa60030 lw r6,0x0030(r29) #load X position vector 001b3d94: 3c09801c lui r9,0x801c 001b3d98: 8529925e lh r9,-0x6da2(r9) #load acting unit's height mod 001b3d9c: 8fa20034 lw r2,0x0034(r29) load z position vector 001b3da0: 01074023 subu r8,r8,r7 #find y difference 001b3da4: 00a32823 subu r5,r5,r3 #find x difference 001b3da8: 00661821 addu r3,r3,r6 #acting unit's x mod + X position vector 001b3dac: afa30030 sw r3,0x0030(r29) #store new x position vector 001b3db0: 8fa30038 lw r3,0x0038(r29) #load y position vector 001b3db4: 01221021 addu r2,r9,r2 #acting unit's height + z vector 001b3db8: afa20034 sw r2,0x0034(r29) #store new z position vector 001b3dbc: 3c02801c lui r2,0x801c 001b3dc0: 84429266 lh r2,-0x6d9a(r2) #load target unit's height mod 001b3dc4: 00082023 subu r4,r0,r8 #obtain negative of y difference 001b3dc8: afa50020 sw r5,0x0020(r29) #store x difference 001b3dcc: afa80028 sw r8,0x0028(r29) #store y difference 001b3dd0: 00e33821 addu r7,r7,r3 #acting unit's Y mod + y position vector 001b3dd4: 00491023 subu r2,r2,r9 #difference of height mod 001b3dd8: afa70038 sw r7,0x0038(r29) #store new y position vector 001b3ddc: 0c00763a jal 0x0001d8e8 #Get Angle Value via ArcTan Table - find angle between x difference and -y difference 001b3de0: afa20024 sw r2,0x0024(r29) #store height difference 001b3de4: 8fa30020 lw r3,0x0020(r29) #load x difference 001b3de8: 00000000 nop 001b3dec: 00630018 mult r3,r3 #square 001b3df0: 00002812 mflo r5 001b3df4: 8fa30028 lw r3,0x0028(r29) #load y difference 001b3df8: 00000000 nop 001b3dfc: 00630018 mult r3,r3 #square 001b3e00: a7a20042 sh r2,0x0042(r29) #store xy angle 001b3e04: 00002012 mflo r4 001b3e08: 0c006fce jal 0x0001bf38 #Frame Timing Related? (0x1bf38) - sqrt(x^2 + y^2) 001b3e0c: 00a42021 addu r4,r5,r4 #xdiff^2 + ydiff^2 001b3e10: 8fa40024 lw r4,0x0024(r29) #load height difference 001b3e14: 0c00763a jal 0x0001d8e8 #Get Angle Value via ArcTan Table - gets angle between xy length and z length 001b3e18: 00402821 addu r5,r2,r0 #xy length 001b3e1c: 3c05801c lui r5,0x801c 001b3e20: 8ca5c098 lw r5,-0x3f68(r5) #load effect target data 001b3e24: 24420400 addiu r2,r2,0x0400 #angle + 0x400 001b3e28: a7a20044 sh r2,0x0044(r29) #store z angle 001b3e2c: a7a00040 sh r0,0x0040(r29) #store 0 001b3e30: 94a20004 lhu r2,0x0004(r5) #load secondary animation effect 001b3e34: 00000000 nop 001b3e38: 00021080 sll r2,r2,0x02 001b3e3c: 3c01801c lui r1,0x801c 001b3e40: 00220821 addu r1,r1,r2 001b3e44: 843684de lh r22,-0x7b22(r1) #load effect model ID 001b3e48: 2402ffff addiu r2,r0,0xffff 001b3e4c: 12c2001f beq r22,r2,0x001b3ecc #branch if model ID = item.bin graphic 001b3e50: 32d300ff andi r19,r22,0x00ff
Arrow Model 001b3e54: 16600009 bne r19,r0,0x001b3e7c #branch if model ID is not arrow 001b3e58: 34020001 ori r2,r0,0x0001 001b3e5c: 34020040 ori r2,r0,0x0040 001b3e60: afa20050 sw r2,0x0050(r29) 001b3e64: afa2004c sw r2,0x004c(r29) 001b3e68: afa20048 sw r2,0x0048(r29) #scale arrow model to 0x40 001b3e6c: a7a0005c sh r0,0x005c(r29) 001b3e70: a7a0005a sh r0,0x005a(r29) 001b3e74: 0806cfab j 0x001b3eac #jump ahead 001b3e78: a7a00058 sh r0,0x0058(r29) #no Innate Yaw, Pitch, or roll angles.
Stone Model 001b3e7c: 1662000b bne r19,r2,0x001b3eac #branch if model is not stone 001b3e80: 340300c0 ori r3,r0,0x00c0 001b3e84: 3c02801c lui r2,0x801c 001b3e88: 84428b4c lh r2,-0x74b4(r2) #load 3d step counter 001b3e8c: afa30050 sw r3,0x0050(r29) 001b3e90: afa3004c sw r3,0x004c(r29) 001b3e94: afa30048 sw r3,0x0048(r29) #scale stone model to 0xc0 001b3e98: a7a00058 sh r0,0x0058(r29) #store no x rotation 001b3e9c: 00021a00 sll r3,r2,0x08 #step counter * 0x0100 001b3ea0: 000211c0 sll r2,r2,0x07 #step counter * 0x0080 001b3ea4: a7a3005a sh r3,0x005a(r29) #store slight rotation in Pitch and Roll 001b3ea8: a7a2005c sh r2,0x005c(r29) #
Arrow & Stone Models 001b3eac: afb60010 sw r22,0x0010(r29) 001b3eb0: 27a40058 addiu r4,r29,0x0058 #ptr. to initial model rotation matrix (Yaw Pitch Roll angles) 001b3eb4: 27a50030 addiu r5,r29,0x0030 #ptr. to model translation matrix (XYZ) 001b3eb8: 27a60040 addiu r6,r29,0x0040 #ptr. to model rotation due to movement (xy, z, and 0 angles.) 001b3ebc: 0c06b8d0 jal 0x001ae340 #Arrow, Throw stone, Reflect Model Loading 001b3ec0: 27a70048 addiu r7,r29,0x0048 #ptr. to model movement scalar matrix (XYZ scale) 001b3ec4: 0806cfcf j 0x001b3f3c 001b3ec8: 00000000 nop
Shuriken model 001b3ecc: 8ca50024 lw r5,0x0024(r5) #load used weapon 001b3ed0: 00000000 nop 001b3ed4: 24a2ff86 addiu r2,r5,0xff86 001b3ed8: 2c420003 sltiu r2,r2,0x0003 001b3edc: 10400014 beq r2,r0,0x001b3f30 #branch if not shuriken 001b3ee0: 27a40058 addiu r4,r29,0x0058 #ptr. to yaw/pitch/roll for model 001b3ee4: 02002821 addu r5,r16,r0 #ptr. to model XYZ translation 001b3ee8: 27a60040 addiu r6,r29,0x0040 #ptr. to xy,z,0 rotation due to movement 001b3eec: 27a70048 addiu r7,r29,0x0048 #ptr. to model movement scalar matrix (XYZ scale) 001b3ef0: 3c02801c lui r2,0x801c 001b3ef4: 84428b4c lh r2,-0x74b4(r2) #load 3d step counter 001b3ef8: 340300c0 ori r3,r0,0x00c0 001b3efc: afa30050 sw r3,0x0050(r29) 001b3f00: afa3004c sw r3,0x004c(r29) 001b3f04: afa30048 sw r3,0x0048(r29) #scale model to 0xc0 001b3f08: a7a0005a sh r0,0x005a(r29) 001b3f0c: a7a00058 sh r0,0x0058(r29) #store no x or y rotation 001b3f10: 00021200 sll r2,r2,0x08 #step counter * 0x0100 001b3f14: 00021023 subu r2,r0,r2 #negative 001b3f18: a7a2005c sh r2,0x005c(r29) #store roll 001b3f1c: 34020003 ori r2,r0,0x0003 001b3f20: 0c06b8d0 jal 0x001ae340 #Arrow, Throw stone, Reflect Model Loading 001b3f24: afa20010 sw r2,0x0010(r29) #store model ID as shuriken 001b3f28: 0806cfcf j 0x001b3f3c 001b3f2c: 00000000 nop
Item.Bin graphic 001b3f30: 02002021 addu r4,r16,r0 #points to XYZ translation matrix 001b3f34: 0c06bc42 jal 0x001af108 #001af108 - 001af3a0 - graphic equivalent of "Arrow, Throw stone, Reflect Model Loading" ? 001b3f38: 00003021 addu r6,r0,r0 #r6 = 0 graphic rotation All return: 001b3f3c: 3c03801c lui r3,0x801c 001b3f40: 84638b4c lh r3,-0x74b4(r3) #load 3d step counter 001b3f44: 34020002 ori r2,r0,0x0002 001b3f48: 1462001a bne r3,r2,0x001b3fb4 #branch if not 2 steps remaining 001b3f4c: 2402ffff addiu r2,r0,0xffff 001b3f50: 3c03801c lui r3,0x801c 001b3f54: 8c638b64 lw r3,-0x749c(r3) #load target's ID 001b3f58: 00000000 nop 001b3f5c: 10620015 beq r3,r2,0x001b3fb4 #branch if invalid target ID 001b3f60: 00000000 nop 001b3f64: 3c03801c lui r3,0x801c 001b3f68: 8c63c098 lw r3,-0x3f68(r3) #load effect target data 001b3f6c: 00000000 nop 001b3f70: 8c640024 lw r4,0x0024(r3) #load used weapon ID 001b3f74: 00000000 nop 001b3f78: 2482ff83 addiu r2,r4,0xff83 001b3f7c: 2c420003 sltiu r2,r2,0x0003 001b3f80: 1440000c bne r2,r0,0x001b3fb4 #branch if a bomb 001b3f84: 2482ff10 addiu r2,r4,0xff10 001b3f88: 2c42000e sltiu r2,r2,0x000e 001b3f8c: 14400009 bne r2,r0,0x001b3fb4 #branch if a chemist item 001b3f90: 00000000 nop
Arrow, Shuriken, Throw stone: 001b3f94: 8c620028 lw r2,0x0028(r3) #load hit counter 001b3f98: 00000000 nop 001b3f9c: 10400005 beq r2,r0,0x001b3fb4 #branch if none 001b3fa0: 00000000 nop 001b3fa4: 90640012 lbu r4,0x0012(r3) #load target misc ID 001b3fa8: 9065001c lbu r5,0x001c(r3) #load attacker misc ID 001b3fac: 0c01a331 jal 0x00068cc4 #Call Bow Hardcoding routine Copy 001b3fb0: 00000000 nop
Effect Accompanied Items Return: 001b3fb4: 3c02801c lui r2,0x801c 001b3fb8: 84428b4c lh r2,-0x74b4(r2) #load 3d steps counter 001b3fbc: 00000000 nop 001b3fc0: 18400006 blez r2,0x001b3fdc #branch if 0 steps remaining 001b3fc4: 00401821 addu r3,r2,r0 001b3fc8: 2462ffff addiu r2,r3,0xffff #3d step counter - 1 001b3fcc: 3c01801c lui r1,0x801c 001b3fd0: a4228b4c sh r2,-0x74b4(r1) #store new 3d step counter 001b3fd4: 3c02801c lui r2,0x801c 001b3fd8: 84428b4c lh r2,-0x74b4(r2) #load 3d step counter 001b3fdc: 00000000 nop 001b3fe0: 14400039 bne r2,r0,0x001b40c8 #branch if not 0 001b3fe4: 34040001 ori r4,r0,0x0001 001b3fe8: 3c02801c lui r2,0x801c 001b3fec: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b3ff0: 00000000 nop 001b3ff4: 90440030 lbu r4,0x0030(r2) # 001b3ff8: 00000000 nop 001b3ffc: 10800007 beq r4,r0,0x001b401c #branch if 0x30? is 0 001b4000: 00000000 nop 001b4004: 0c06b709 jal 0x001adc24 #001adc24 - 001add50 001b4008: 00000000 nop 001b400c: 3c02801c lui r2,0x801c 001b4010: 8c42c098 lw r2,-0x3f68(r2) #load effect target data 001b4014: 00000000 nop 001b4018: a0400030 sb r0,0x0030(r2) #store 0 0x30? 001b401c: 3c03801c lui r3,0x801c 001b4020: 8c63c098 lw r3,-0x3f68(r3) 001b4024: 00000000 nop 001b4028: 9462001a lhu r2,0x001a(r3) #? // may instead be secondary effect ID? 001b402c: 00000000 nop 001b4030: 1440000d bne r2,r0,0x001b4068 #branch if valid? 001b4034: 00000000 nop 001b4038: 9062001d lbu r2,0x001d(r3) #load secondary effect type? // may instead be effect executing phase? 001b403c: 00000000 nop 001b4040: 2442fffd addiu r2,r2,0xfffd 001b4044: 2c420002 sltiu r2,r2,0x0002 # 001b4048: 14400007 bne r2,r0,0x001b4068 #branch if secondary effect is golem? //may instead branch if effect has loaded its palette and is currently executing 001b404c: 00000000 nop 001b4050: 0c068620 jal 0x001a1880 #Increment effect section address loading directive 001b4054: 00000000 nop 001b4058: 0c0237ba jal 0x0008dee8 #Set Event Speed Inner // this code may be in place so that throwing a bomb doesn't speed up effect animations. interesting 001b405c: 34040002 ori r4,r0,0x0002 #set event speed to slow 001b4060: 0806d02c j 0x001b40b0 001b4064: 00000000 nop
No additional effects to play? 001b4068: 0c068632 jal 0x001a18c8 #load current effect playing phase 001b406c: 00000000 nop 001b4070: 34030001 ori r3,r0,0x0001 001b4074: 1443000e bne r2,r3,0x001b40b0 #branch if not in starting phase 001b4078: 00000000 nop 001b407c: 3c03801c lui r3,0x801c 001b4080: 8c63c098 lw r3,-0x3f68(r3) #load effect target data 001b4084: 00000000 nop 001b4088: 8c620028 lw r2,0x0028(r3) #load hit counter 001b408c: 00000000 nop 001b4090: 10400005 beq r2,r0,0x001b40a8 #branch if 0 hits 001b4094: 00000000 nop 001b4098: 90640012 lbu r4,0x0012(r3) #load target misc ID 001b409c: 9065001c lbu r5,0x001c(r3) #load caster misc ID 001b40a0: 0c01a331 jal 0x00068cc4 #Call Bow Hardcoding routine Copy 001b40a4: 00000000 nop 001b40a8: 0c068629 jal 0x001a18a4 #Set Effect phase to No Effect 001b40ac: 00000000 nop 001b40b0: 3c03801c lui r3,0x801c 001b40b4: 8c63c098 lw r3,-0x3f68(r3) #load effect target data 001b40b8: 34020003 ori r2,r0,0x0003 001b40bc: 0806cf4c j 0x001b3d30 #return r2 = 1 and end. 001b40c0: ac620008 sw r2,0x0008(r3) #store secondary effect phase to finalising
Finalising 001b40c4: 00002021 addu r4,r0,r0 #return projectile finalised
All Return: 001b40c8: 00801021 addu r2,r4,r0 #r2 = 1 if effect is still playing. 0 if it has finished. 001b40cc: 8fbf009c lw r31,0x009c(r29) 001b40d0: 8fb60098 lw r22,0x0098(r29) 001b40d4: 8fb50094 lw r21,0x0094(r29) 001b40d8: 8fb40090 lw r20,0x0090(r29) 001b40dc: 8fb3008c lw r19,0x008c(r29) 001b40e0: 8fb20088 lw r18,0x0088(r29) 001b40e4: 8fb10084 lw r17,0x0084(r29) 001b40e8: 8fb00080 lw r16,0x0080(r29) 001b40ec: 27bd00a0 addiu r29,r29,0x00a0 001b40f0: 03e00008 jr r31 001b40f4: 00000000 nop