Difference between revisions of "Process Secondary Effect Data"
Jump to navigation
Jump to search
Line 6: | Line 6: | ||
801b47f4: afb00010 sw r16,0x0010(r29) | 801b47f4: afb00010 sw r16,0x0010(r29) | ||
801b47f8: 3c01801c lui r1,0x801c | 801b47f8: 3c01801c lui r1,0x801c | ||
− | 801b47fc: ac22c0cc sw r2,-0x3f34(r1) # *0x801bc0cc = result_0x44a60 | + | 801b47fc: ac22c0cc sw r2,-0x3f34(r1) # *0x801bc0cc = result_0x44a60 //(map related, for effects? stores immediately adjacent to effect data address) |
801b4800: 34020001 ori r2,r0,0x0001 # 1 | 801b4800: 34020001 ori r2,r0,0x0001 # 1 | ||
801b4804: 3c03801c lui r3,0x801c | 801b4804: 3c03801c lui r3,0x801c | ||
− | 801b4808: 8c63c090 lw r3,-0x3f70(r3) # *0x801bc090 | + | 801b4808: 8c63c090 lw r3,-0x3f70(r3) # *0x801bc090 //Effect related? |
801b480c: 3c04801c lui r4,0x801c | 801b480c: 3c04801c lui r4,0x801c | ||
− | 801b4810: 94849130 lhu r4,-0x6ed0(r4) # *0x801b9130 | + | 801b4810: 94849130 lhu r4,-0x6ed0(r4) # *0x801b9130 //load first effect target ID |
− | 801b4814: 00431023 subu r2,r2,r3 # 1 - *0x801bc090 | + | 801b4814: 00431023 subu r2,r2,r3 # 1 - *0x801bc090 // |
801b4818: 3c01801c lui r1,0x801c | 801b4818: 3c01801c lui r1,0x801c | ||
− | 801b481c: ac22c090 sw r2,-0x3f70(r1) # *0x801bc090 = 1 - *0x801bc090 | + | 801b481c: ac22c090 sw r2,-0x3f70(r1) # *0x801bc090 = 1 - *0x801bc090 //decrement counter? |
801b4820: 3c01801c lui r1,0x801c | 801b4820: 3c01801c lui r1,0x801c | ||
− | 801b4824: ac249138 sw r4,-0x6ec8(r1) # *0x801b9138 = *0x801b9130 | + | 801b4824: ac249138 sw r4,-0x6ec8(r1) # *0x801b9138 = *0x801b9130 //copy paste |
− | 801b4828: 10800022 beq r4,r0,0x801b48b4 # if (*0x801b9130 == 0) | + | 801b4828: 10800022 beq r4,r0,0x801b48b4 # if (*0x801b9130 == 0) //End? return failed? finished? |
801b482c: 00001021 addu r2,r0,r0 # return 0; | 801b482c: 00001021 addu r2,r0,r0 # return 0; | ||
801b4830: 3c12801c lui r18,0x801c | 801b4830: 3c12801c lui r18,0x801c | ||
− | 801b4834: 26528b9c addiu r18,r18,-0x7464 # 0x801b8b9c | + | 801b4834: 26528b9c addiu r18,r18,-0x7464 # 0x801b8b9c //start of effect data per unit (0x54 per effect target ID) |
801b4838: 3c11801c lui r17,0x801c | 801b4838: 3c11801c lui r17,0x801c | ||
− | 801b483c: 26318900 addiu r17,r17,-0x7700 # 0x801b8900 | + | 801b483c: 26318900 addiu r17,r17,-0x7700 # 0x801b8900 //secondary effect data pointer? |
# do { | # do { | ||
801b4840: 3c02801c lui r2,0x801c | 801b4840: 3c02801c lui r2,0x801c | ||
− | 801b4844: 8c429138 lw r2,-0x6ec8(r2) # *0x801b9138 | + | 801b4844: 8c429138 lw r2,-0x6ec8(r2) # *0x801b9138 //load current effect target ID |
801b4848: 00000000 nop | 801b4848: 00000000 nop | ||
801b484c: 00021880 sll r3,r2,0x02 # *0x801b9138 * 4 | 801b484c: 00021880 sll r3,r2,0x02 # *0x801b9138 * 4 | ||
Line 32: | Line 32: | ||
801b4858: 00621821 addu r3,r3,r2 # *0x801b9138 * 21 | 801b4858: 00621821 addu r3,r3,r2 # *0x801b9138 * 21 | ||
801b485c: 00031880 sll r3,r3,0x02 # *0x801b9138 * 84 | 801b485c: 00031880 sll r3,r3,0x02 # *0x801b9138 * 84 | ||
− | 801b4860: 00721821 addu r3,r3,r18 # (*0x801b9138 * 84) + 0x801b8b9c | + | 801b4860: 00721821 addu r3,r3,r18 # (*0x801b9138 * 84) + 0x801b8b9c //0x54 |
801b4864: 3c01801c lui r1,0x801c | 801b4864: 3c01801c lui r1,0x801c | ||
− | 801b4868: ac23c098 sw r3,-0x3f68(r1) # *0x801bc098 = (*0x801b9138 * 84) + 0x801b8b9c | + | 801b4868: ac23c098 sw r3,-0x3f68(r1) # *0x801bc098 = (*0x801b9138 * 84) + 0x801b8b9c //store pointer for later convenience |
− | 801b486c: 90620003 lbu r2,0x0003(r3) # *(*0x801bc098 + 3) | + | 801b486c: 90620003 lbu r2,0x0003(r3) # *(*0x801bc098 + 3) //secondary effect's function byte |
801b4870: 00000000 nop | 801b4870: 00000000 nop | ||
801b4874: 00021080 sll r2,r2,0x02 # *(*0x801bc098 + 3) * 4 | 801b4874: 00021080 sll r2,r2,0x02 # *(*0x801bc098 + 3) * 4 | ||
801b4878: 00511021 addu r2,r2,r17 # (*(*0x801bc098 + 3) * 4) + 0x801b8900 | 801b4878: 00511021 addu r2,r2,r17 # (*(*0x801bc098 + 3) * 4) + 0x801b8900 | ||
− | 801b487c: 8c420000 lw r2,0x0000(r2) # funcPtr = *((*(*0x801bc098 + 3) * 4) + 0x801b8900) | + | 801b487c: 8c420000 lw r2,0x0000(r2) # funcPtr = *((*(*0x801bc098 + 3) * 4) + 0x801b8900) //load secondary effect's call address |
− | 801b4880: 90700000 lbu r16,0x0000(r3) # *0x801bc098 | + | 801b4880: 90700000 lbu r16,0x0000(r3) # *0x801bc098 //load current effect data's previous effect target ID |
801b4884: 0040f809 jalr r2,r31 # result = callFunction(funcPtr); | 801b4884: 0040f809 jalr r2,r31 # result = callFunction(funcPtr); | ||
+ | 0x00 Nothing : 801b0fec - only contains a jr r31; addu r2, r0, r0 | ||
+ | 0x01 Nothing : 801b0ffc - that's not nothing? [[001b0ffc - 001b1538]] (bow hit effect?) | ||
+ | 0x02 Glowing Tar: 801b153c - [[001b153c - 001b1ae8]] | ||
+ | 0x03 Golem : 801b1aec - [[001b1aec - 001b1c00]] | ||
+ | 0x04 Spell chrg : 801b1c04 - [[001b1c04 - 001b27d8]] - can have elements | ||
+ | 0x05 Unsure : 801b27dc - [[001b27dc - 001b2848]] | ||
+ | 0x06 Red Orbs : 801b284c - [[001b284c - 001b2964]] | ||
+ | 0x07 Not Called : 801b2968 - that however, is nothing. does not clear r2. | ||
+ | 0x08 Falling Tar: 801b2970 - [[001b2970 - 001b2a84]] | ||
+ | 0x09 Splash : 801b2a88 - [[001b2a88 - 001b2bf8]] | ||
+ | 0x0a Not Called : 801b2bfc - No routine on wiki, only contains a jr r31. does not clear r2. | ||
+ | 0x0b Not Called : 801b2c04 - Similarly, no routine. jr r31, does not clear r2. | ||
+ | 0x0c Venom Trap : 801b2c0c - [[001b2c0c - 001b2d24]] | ||
+ | 0x0d Level Up : 801b2d28 - [[001b2d28 - 001b2e5c]] | ||
+ | 0x0e Not Called : 801b2e60 - No routine. jr r31. does not clear r2. | ||
+ | 0x0f Death Poof : 801b2e68 - [[001b2e68 - 001b3114]] | ||
+ | 0x10 Not Called : 801b3118 - No routine. jr r31; nop | ||
+ | 0x11 Zodiac Poof: 801b3120 - [[001b3120 - 001b33d0]] | ||
+ | 0x12 Reflect : 801b33d4 - [[001b33d4 - 001b381c]] - loads some external file? | ||
+ | 0x13 teleport : 801b3820 - [[001b3820 - 001b3934]] | ||
+ | 0x14 Nothing : 801b3938 - Not nothing? [[001b3938 - 001b40f4]] (crossbow hit effect?) | ||
+ | 0x15 Equip Break: 801b40f8 - [[001b40f8 - 001b4230]] | ||
+ | 0x16 Smn chrg : 801b4234 - [[001b4234 - 001b47dc]] | ||
801b4888: 00000000 nop | 801b4888: 00000000 nop | ||
− | 801b488c: 14400005 bne r2,r0,0x801b48a4 # if (result == 0) { | + | 801b488c: 14400005 bne r2,r0,0x801b48a4 # if (result == 0) { // only(?) if effect type is 0 |
801b4890: 00000000 nop | 801b4890: 00000000 nop | ||
801b4894: 3c04801c lui r4,0x801c | 801b4894: 3c04801c lui r4,0x801c | ||
− | 801b4898: 90849138 lbu r4,-0x6ec8(r4) # *0x801b9138 | + | 801b4898: 90849138 lbu r4,-0x6ec8(r4) # *0x801b9138 // load current/previous(?) effect target's ID |
801b489c: 0c06b651 jal 0x801ad944 # [[0x1ad944]] (*0x801b9138); | 801b489c: 0c06b651 jal 0x801ad944 # [[0x1ad944]] (*0x801b9138); | ||
801b48a0: 00000000 nop # } | 801b48a0: 00000000 nop # } | ||
801b48a4: 3c01801c lui r1,0x801c | 801b48a4: 3c01801c lui r1,0x801c | ||
− | 801b48a8: ac309138 sw r16,-0x6ec8(r1) # *0x801b9138 = *0x801bc098 | + | 801b48a8: ac309138 sw r16,-0x6ec8(r1) # *0x801b9138 = *0x801bc098 // store current effect target's ID |
− | 801b48ac: 1600ffe4 bne r16,r0,0x801b4840 # } while (*0x801b9138 != 0); | + | 801b48ac: 1600ffe4 bne r16,r0,0x801b4840 # } while (*0x801b9138 != 0); // Loop until all targets of effect are animated for |
801b48b0: 34020001 ori r2,r0,0x0001 # return 1; | 801b48b0: 34020001 ori r2,r0,0x0001 # return 1; |
Revision as of 03:06, 16 October 2022
801b47e0: 27bdffe0 addiu r29,r29,-0x0020 801b47e4: afbf001c sw r31,0x001c(r29) 801b47e8: afb20018 sw r18,0x0018(r29) 801b47ec: afb10014 sw r17,0x0014(r29) 801b47f0: 0c011298 jal 0x80044a60 # result_0x44a60 = ? 0x44a60 (); 801b47f4: afb00010 sw r16,0x0010(r29) 801b47f8: 3c01801c lui r1,0x801c 801b47fc: ac22c0cc sw r2,-0x3f34(r1) # *0x801bc0cc = result_0x44a60 //(map related, for effects? stores immediately adjacent to effect data address) 801b4800: 34020001 ori r2,r0,0x0001 # 1 801b4804: 3c03801c lui r3,0x801c 801b4808: 8c63c090 lw r3,-0x3f70(r3) # *0x801bc090 //Effect related? 801b480c: 3c04801c lui r4,0x801c 801b4810: 94849130 lhu r4,-0x6ed0(r4) # *0x801b9130 //load first effect target ID 801b4814: 00431023 subu r2,r2,r3 # 1 - *0x801bc090 // 801b4818: 3c01801c lui r1,0x801c 801b481c: ac22c090 sw r2,-0x3f70(r1) # *0x801bc090 = 1 - *0x801bc090 //decrement counter? 801b4820: 3c01801c lui r1,0x801c 801b4824: ac249138 sw r4,-0x6ec8(r1) # *0x801b9138 = *0x801b9130 //copy paste 801b4828: 10800022 beq r4,r0,0x801b48b4 # if (*0x801b9130 == 0) //End? return failed? finished? 801b482c: 00001021 addu r2,r0,r0 # return 0; 801b4830: 3c12801c lui r18,0x801c 801b4834: 26528b9c addiu r18,r18,-0x7464 # 0x801b8b9c //start of effect data per unit (0x54 per effect target ID) 801b4838: 3c11801c lui r17,0x801c 801b483c: 26318900 addiu r17,r17,-0x7700 # 0x801b8900 //secondary effect data pointer? # do { 801b4840: 3c02801c lui r2,0x801c 801b4844: 8c429138 lw r2,-0x6ec8(r2) # *0x801b9138 //load current effect target ID 801b4848: 00000000 nop 801b484c: 00021880 sll r3,r2,0x02 # *0x801b9138 * 4 801b4850: 00621821 addu r3,r3,r2 # *0x801b9138 * 5 801b4854: 00031880 sll r3,r3,0x02 # *0x801b9138 * 20 801b4858: 00621821 addu r3,r3,r2 # *0x801b9138 * 21 801b485c: 00031880 sll r3,r3,0x02 # *0x801b9138 * 84 801b4860: 00721821 addu r3,r3,r18 # (*0x801b9138 * 84) + 0x801b8b9c //0x54 801b4864: 3c01801c lui r1,0x801c 801b4868: ac23c098 sw r3,-0x3f68(r1) # *0x801bc098 = (*0x801b9138 * 84) + 0x801b8b9c //store pointer for later convenience 801b486c: 90620003 lbu r2,0x0003(r3) # *(*0x801bc098 + 3) //secondary effect's function byte 801b4870: 00000000 nop 801b4874: 00021080 sll r2,r2,0x02 # *(*0x801bc098 + 3) * 4 801b4878: 00511021 addu r2,r2,r17 # (*(*0x801bc098 + 3) * 4) + 0x801b8900 801b487c: 8c420000 lw r2,0x0000(r2) # funcPtr = *((*(*0x801bc098 + 3) * 4) + 0x801b8900) //load secondary effect's call address 801b4880: 90700000 lbu r16,0x0000(r3) # *0x801bc098 //load current effect data's previous effect target ID 801b4884: 0040f809 jalr r2,r31 # result = callFunction(funcPtr); 0x00 Nothing : 801b0fec - only contains a jr r31; addu r2, r0, r0 0x01 Nothing : 801b0ffc - that's not nothing? 001b0ffc - 001b1538 (bow hit effect?) 0x02 Glowing Tar: 801b153c - 001b153c - 001b1ae8 0x03 Golem : 801b1aec - 001b1aec - 001b1c00 0x04 Spell chrg : 801b1c04 - 001b1c04 - 001b27d8 - can have elements 0x05 Unsure : 801b27dc - 001b27dc - 001b2848 0x06 Red Orbs : 801b284c - 001b284c - 001b2964 0x07 Not Called : 801b2968 - that however, is nothing. does not clear r2. 0x08 Falling Tar: 801b2970 - 001b2970 - 001b2a84 0x09 Splash : 801b2a88 - 001b2a88 - 001b2bf8 0x0a Not Called : 801b2bfc - No routine on wiki, only contains a jr r31. does not clear r2. 0x0b Not Called : 801b2c04 - Similarly, no routine. jr r31, does not clear r2. 0x0c Venom Trap : 801b2c0c - 001b2c0c - 001b2d24 0x0d Level Up : 801b2d28 - 001b2d28 - 001b2e5c 0x0e Not Called : 801b2e60 - No routine. jr r31. does not clear r2. 0x0f Death Poof : 801b2e68 - 001b2e68 - 001b3114 0x10 Not Called : 801b3118 - No routine. jr r31; nop 0x11 Zodiac Poof: 801b3120 - 001b3120 - 001b33d0 0x12 Reflect : 801b33d4 - 001b33d4 - 001b381c - loads some external file? 0x13 teleport : 801b3820 - 001b3820 - 001b3934 0x14 Nothing : 801b3938 - Not nothing? 001b3938 - 001b40f4 (crossbow hit effect?) 0x15 Equip Break: 801b40f8 - 001b40f8 - 001b4230 0x16 Smn chrg : 801b4234 - 001b4234 - 001b47dc 801b4888: 00000000 nop 801b488c: 14400005 bne r2,r0,0x801b48a4 # if (result == 0) { // only(?) if effect type is 0 801b4890: 00000000 nop 801b4894: 3c04801c lui r4,0x801c 801b4898: 90849138 lbu r4,-0x6ec8(r4) # *0x801b9138 // load current/previous(?) effect target's ID 801b489c: 0c06b651 jal 0x801ad944 # 0x1ad944 (*0x801b9138); 801b48a0: 00000000 nop # } 801b48a4: 3c01801c lui r1,0x801c 801b48a8: ac309138 sw r16,-0x6ec8(r1) # *0x801b9138 = *0x801bc098 // store current effect target's ID 801b48ac: 1600ffe4 bne r16,r0,0x801b4840 # } while (*0x801b9138 != 0); // Loop until all targets of effect are animated for 801b48b0: 34020001 ori r2,r0,0x0001 # return 1; 801b48b4: 8fbf001c lw r31,0x001c(r29) 801b48b8: 8fb20018 lw r18,0x0018(r29) 801b48bc: 8fb10014 lw r17,0x0014(r29) 801b48c0: 8fb00010 lw r16,0x0010(r29) 801b48c4: 27bd0020 addiu r29,r29,0x0020 801b48c8: 03e00008 jr r31 801b48cc: 00000000 nop