Difference between revisions of "Height/coordinate validation"
Jump to navigation
Jump to search
m (links) |
m |
||
Line 1: | Line 1: | ||
− | + | Parameters : r4 = Attacker ID | |
+ | Load target ID exceeding stack offset (reaching previous routine r29 0x10) | ||
− | 0017b3f4: 27bdffd8 addiu r29,r29, | + | Returns : r2 = Target ID (-0x01 if not in melee range) |
− | 0017b3f8: afb00018 sw r16,0x0018(r29) | + | ------------------------------------------------------------------- |
− | 0017b3fc: 00808021 addu r16,r4,r0 | + | 0017b3f4: 27bdffd8 addiu r29,r29,-0x0028 |
− | 0017b400: afb20020 sw r18,0x0020(r29) | + | 0017b3f8: afb00018 sw r16,0x0018(r29) |
− | 0017b404: 8fb20038 lw r18,0x0038(r29) | + | 0017b3fc: 00808021 addu r16,r4,r0 |{{f/std|<nowiki>r16 = Attacker ID</nowiki>}} |
− | 0017b408: 27a40010 addiu r4,r29,0x0010 | + | 0017b400: afb20020 sw r18,0x0020(r29) | |
− | 0017b40c: afbf0024 sw r31,0x0024(r29) | + | 0017b404: 8fb20038 lw r18,0x0038(r29) |{{f/adr|<nowiki>r18 = Target ID</nowiki>}} {{f/std|<nowiki>Strange way to get previous routine stack 0x10</nowiki>}} |
− | 0017b410: afb1001c sw r17,0x001c(r29) | + | 0017b408: 27a40010 addiu r4,r29,0x0010 |{{f/adr|<nowiki>r4 = Stack 0x10</nowiki>}} |
− | 0017b414: 0c05f056 jal 0x0017c158 | + | 0017b40c: afbf0024 sw r31,0x0024(r29) | |
− | 0017b418: 02402821 addu r5,r18,r0 | + | 0017b410: afb1001c sw r17,0x001c(r29) | |
− | 0017b41c: 93a20013 lbu r2,0x0013(r29) | + | 0017b414: 0c05f056 jal 0x0017c158 |{{f/jal|Calculate_Height_Data|<nowiki>Calculate_Height_Data</nowiki>}} Return some Target map/height data on r4 pointer |
− | 0017b420: 00000000 nop | + | 0017b418: 02402821 addu r5,r18,r0 |{{f/std|<nowiki>r5 = Target ID</nowiki>}} |
− | 0017b424: 30420080 andi r2,r2,0x0080 | + | 0017b41c: 93a20013 lbu r2,0x0013(r29) |{{f/load|<nowiki>r2 = Target ID (with crystal/treasure/chocobo data)</nowiki>}} |
− | 0017b428: 14400016 bne r2,r0,0x0017b484 | + | 0017b420: 00000000 nop | |
− | 0017b42c: 2402ffff addiu r2,r0, | + | 0017b424: 30420080 andi r2,r2,0x0080 |{{f/std|<nowiki>r2 = 0x80 if Target unit is a crystal</nowiki>}} |
− | 0017b430: 02002821 addu r5,r16,r0 | + | 0017b428: 14400016 bne r2,r0,0x0017b484 {{f/Cond|<nowiki>If Target is not a crystal</nowiki>}} /If Crystalized branch to end (return target ID = -0x01) |
− | 0017b434: 93b00015 lbu r16,0x0015(r29) | + | 0017b42c: 2402ffff addiu r2,r0,-0x0001 |{{f/std|<nowiki>r2 = -0x01</nowiki>}} |
− | 0017b438: 93b10016 lbu r17,0x0016(r29) | + | 0017b430: 02002821 addu r5,r16,r0 |{{f/std|<nowiki>r5 = Attacker ID</nowiki>}} |
− | 0017b43c: 0c05f056 jal 0x0017c158 | + | 0017b434: 93b00015 lbu r16,0x0015(r29) |{{f/load|<nowiki>r16 = Target walking Height (depht/float check)</nowiki>}} |
− | 0017b440: 27a40010 addiu r4,r29,0x0010 | + | 0017b438: 93b10016 lbu r17,0x0016(r29) |{{f/load|<nowiki>r17 = Target total height (map + unit)</nowiki>}} |
− | 0017b444: 93a20013 lbu r2,0x0013(r29) | + | 0017b43c: 0c05f056 jal 0x0017c158 |{{f/jal|Calculate_Height_Data|<nowiki>Calculate_Height_Data</nowiki>}} Return some Target map/height data on r4 pointer |
− | 0017b448: 00000000 nop | + | 0017b440: 27a40010 addiu r4,r29,0x0010 |{{f/adr|<nowiki>r4 = Stack 0x10</nowiki>}} |
− | 0017b44c: 30420080 andi r2,r2,0x0080 | + | 0017b444: 93a20013 lbu r2,0x0013(r29) |{{f/load|<nowiki>r2 = Attacker ID (with crystal/treasure/chocobo data)</nowiki>}} |
− | 0017b450: 10400003 beq r2,r0,0x0017b460 | + | 0017b448: 00000000 nop | |
− | 0017b454: 00000000 nop | + | 0017b44c: 30420080 andi r2,r2,0x0080 |{{f/std|<nowiki>r2 = 0x80</nowiki>}} |
− | 0017b458: 0805ed21 j 0x0017b484 | + | 0017b450: 10400003 beq r2,r0,0x0017b460 {{f/Cond|<nowiki>If Attacker is a crystal (…)</nowiki>}} |
− | 0017b45c: 2402ffff addiu r2,r0, | + | 0017b454: 00000000 nop | |
− | 0017b460: 93a30016 lbu r3,0x0016(r29) | + | 0017b458: 0805ed21 j 0x0017b484 {{f/jump|<nowiki>jump to end with ID = -0x01</nowiki>}} |
− | 0017b464: 93a40015 lbu r4,0x0015(r29) | + | 0017b45c: 2402ffff addiu r2,r0,-0x0001 |{{f/std|<nowiki>r2 = -0x0001</nowiki>}} |
− | 0017b468: 0203182b sltu r3,r16,r3 | + | 0017b460: 93a30016 lbu r3,0x0016(r29) {{f/Cond|<nowiki>Else (Attacker is not a crystal)</nowiki>}} {{f/load|<nowiki>r3= Attacker total height (map + unit)</nowiki>}} |
− | 0017b46c: 10600005 beq r3,r0,0x0017b484 | + | 0017b464: 93a40015 lbu r4,0x0015(r29) |{{f/load|<nowiki>r4 = Attacker walking height</nowiki>}} |
− | 0017b470: 2402ffff addiu r2,r0,0xffff | + | 0017b468: 0203182b sltu r3,r16,r3 |{{f/std|<nowiki>r3 = 0x01 if Target is too low</nowiki>}} |
− | 0017b474: 0224182b sltu r3,r17,r4 | + | 0017b46c: 10600005 beq r3,r0,0x0017b484 {{f/Cond|<nowiki>if Target walking Height < Attacker total height</nowiki>}} /Else Target walks far above attacker - exit with Target = -0x01 |
− | 0017b478: 14600002 bne r3,r0,0x0017b484 | + | 0017b470: 2402ffff addiu r2,r0,0xffff |{{f/std|<nowiki>r2 = -0x0001</nowiki>}} |
− | 0017b47c: 00000000 nop | + | 0017b474: 0224182b sltu r3,r17,r4 |{{f/std|<nowiki>r3 = 0x00 if Target is too high</nowiki>}} |
− | 0017b480: 02401021 addu r2,r18,r0 | + | 0017b478: 14600002 bne r3,r0,0x0017b484 {{f/Cond|<nowiki>If Attacker walking height < Attacker total height</nowiki>}} /Else Attacker walk above target (not reachable) |
− | 0017b484: 8fbf0024 lw r31,0x0024(r29) | + | 0017b47c: 00000000 nop | |
− | 0017b488: 8fb20020 lw r18,0x0020(r29) | + | 0017b480: 02401021 addu r2,r18,r0 |{{f/std|<nowiki>r2 = Target ID</nowiki>}} |
− | 0017b48c: 8fb1001c lw r17,0x001c(r29) | + | 0017b484: 8fbf0024 lw r31,0x0024(r29) END |
− | 0017b490: 8fb00018 lw r16,0x0018(r29) | + | 0017b488: 8fb20020 lw r18,0x0020(r29) |
− | 0017b494: 27bd0028 addiu r29,r29,0x0028 | + | 0017b48c: 8fb1001c lw r17,0x001c(r29) |
− | 0017b498: 03e00008 jr r31 | + | 0017b490: 8fb00018 lw r16,0x0018(r29) |
+ | 0017b494: 27bd0028 addiu r29,r29,0x0028 | ||
+ | 0017b498: 03e00008 jr r31 | ||
0017b49c: 00000000 nop | 0017b49c: 00000000 nop | ||
− | + | === Return locations === | |
+ | '''Battle.bin''' | ||
+ | 0017af3c: [[Targeting_validation_(weapon_flags)]] |
Latest revision as of 22:09, 31 January 2022
Parameters : r4 = Attacker ID Load target ID exceeding stack offset (reaching previous routine r29 0x10) Returns : r2 = Target ID (-0x01 if not in melee range) ------------------------------------------------------------------- 0017b3f4: 27bdffd8 addiu r29,r29,-0x0028 0017b3f8: afb00018 sw r16,0x0018(r29) 0017b3fc: 00808021 addu r16,r4,r0 |r16 = Attacker ID 0017b400: afb20020 sw r18,0x0020(r29) | 0017b404: 8fb20038 lw r18,0x0038(r29) |r18 = Target ID Strange way to get previous routine stack 0x10 0017b408: 27a40010 addiu r4,r29,0x0010 |r4 = Stack 0x10 0017b40c: afbf0024 sw r31,0x0024(r29) | 0017b410: afb1001c sw r17,0x001c(r29) | 0017b414: 0c05f056 jal 0x0017c158 |-->Calculate_Height_Data Return some Target map/height data on r4 pointer 0017b418: 02402821 addu r5,r18,r0 |r5 = Target ID 0017b41c: 93a20013 lbu r2,0x0013(r29) |r2 = Target ID (with crystal/treasure/chocobo data) 0017b420: 00000000 nop | 0017b424: 30420080 andi r2,r2,0x0080 |r2 = 0x80 if Target unit is a crystal 0017b428: 14400016 bne r2,r0,0x0017b484 #If Target is not a crystal /If Crystalized branch to end (return target ID = -0x01) 0017b42c: 2402ffff addiu r2,r0,-0x0001 |r2 = -0x01 0017b430: 02002821 addu r5,r16,r0 |r5 = Attacker ID 0017b434: 93b00015 lbu r16,0x0015(r29) |r16 = Target walking Height (depht/float check) 0017b438: 93b10016 lbu r17,0x0016(r29) |r17 = Target total height (map + unit) 0017b43c: 0c05f056 jal 0x0017c158 |-->Calculate_Height_Data Return some Target map/height data on r4 pointer 0017b440: 27a40010 addiu r4,r29,0x0010 |r4 = Stack 0x10 0017b444: 93a20013 lbu r2,0x0013(r29) |r2 = Attacker ID (with crystal/treasure/chocobo data) 0017b448: 00000000 nop | 0017b44c: 30420080 andi r2,r2,0x0080 |r2 = 0x80 0017b450: 10400003 beq r2,r0,0x0017b460 #If Attacker is a crystal (…) 0017b454: 00000000 nop | 0017b458: 0805ed21 j 0x0017b484 >>jump to end with ID = -0x01 0017b45c: 2402ffff addiu r2,r0,-0x0001 |r2 = -0x0001 0017b460: 93a30016 lbu r3,0x0016(r29) #Else (Attacker is not a crystal) r3= Attacker total height (map + unit) 0017b464: 93a40015 lbu r4,0x0015(r29) |r4 = Attacker walking height 0017b468: 0203182b sltu r3,r16,r3 |r3 = 0x01 if Target is too low 0017b46c: 10600005 beq r3,r0,0x0017b484 #if Target walking Height < Attacker total height /Else Target walks far above attacker - exit with Target = -0x01 0017b470: 2402ffff addiu r2,r0,0xffff |r2 = -0x0001 0017b474: 0224182b sltu r3,r17,r4 |r3 = 0x00 if Target is too high 0017b478: 14600002 bne r3,r0,0x0017b484 #If Attacker walking height < Attacker total height /Else Attacker walk above target (not reachable) 0017b47c: 00000000 nop | 0017b480: 02401021 addu r2,r18,r0 |r2 = Target ID 0017b484: 8fbf0024 lw r31,0x0024(r29) END 0017b488: 8fb20020 lw r18,0x0020(r29) 0017b48c: 8fb1001c lw r17,0x001c(r29) 0017b490: 8fb00018 lw r16,0x0018(r29) 0017b494: 27bd0028 addiu r29,r29,0x0028 0017b498: 03e00008 jr r31 0017b49c: 00000000 nop
Return locations
Battle.bin 0017af3c: Targeting_validation_(weapon_flags)