Evaluate Cancel Status Ability (0019881c)
Jump to navigation
Jump to search
Evaluate Cancel Status Ability
Returns: -1 = Chose an Cure Ability 0 = No ability usable 1 = Requires more evaluation 2 = 0x0071 = True
0019881c: 27bdffe0 addiu r29,r29,0xffe0 00198820: 00803021 addu r6,r4,r0 r6 = Unit ID 00198824: afb10014 sw r17,0x0014(r29) 00198828: 00a08821 addu r17,r5,r0 r17 = Status ID 0019882c: afb00010 sw r16,0x0010(r29) 00198830: 3c10801a lui r16,0x801a 00198834: 2610f3c4 addiu r16,r16,0xf3c4 r16 = Unit AI Data 00198838: 000610c0 sll r2,r6,0x03 0019883c: 00461023 subu r2,r2,r6 00198840: 00021180 sll r2,r2,0x06 00198844: 3c04801a lui r4,0x801a 00198848: 90840d7b lbu r4,0x0d7b(r4) Load Target Flags Set 0019884c: 3c038019 lui r3,0x8019 00198850: 246308cc addiu r3,r3,0x08cc r3 = Unit Data Pointer 00198854: afb20018 sw r18,0x0018(r29) 00198858: 00439021 addu r18,r2,r3 Load Unit Data Pointer 0019885c: 14800077 bne r4,r0,0x00198a3c <Choose Ability> if Target Flags Set 00198860: afbf001c sw r31,0x001c(r29)
00198864: 00061100 sll r2,r6,0x04 00198868: 2442182c addiu r2,r2,0x182c 0019886c: 00501821 addu r3,r2,r16 r3 = AI Targeting 00198870: 34020008 ori r2,r0,0x0008 00198874: 3c01801a lui r1,0x801a 00198878: ac20f384 sw r0,-0x0c7c(r1) 0019887c: 3c01801a lui r1,0x801a 00198880: ac20f388 sw r0,-0x0c78(r1) 00198884: 3c01801a lui r1,0x801a 00198888: ac20f38c sw r0,-0x0c74(r1) 0019888c: 12220010 beq r17,r2,0x001988d0 <Petrify> if Petrified 00198890: 00000000 nop
<Petrify and lower> 00198894: 2a220009 slti r2,r17,0x0009 00198898: 10400005 beq r2,r0,0x001988b0 <Invite+> if Status = Invite or greater 0019889c: 34020002 ori r2,r0,0x0002 001988a0: 12220008 beq r17,r2,0x001988c4 Branch if Dead 001988a4: 34040003 ori r4,r0,0x0003 Find Specific Target 001988a8: 0806623e j 0x001988f8 <Find Target Unit> 001988ac: 00000000 nop
<Invite and higher> 001988b0: 3402000d ori r2,r0,0x000d 001988b4: 12220009 beq r17,r2,0x001988dc Branch if Blood Suck
001988b8: 34040003 ori r4,r0,0x0003 Find Specific Target 001988bc: 0806623e j 0x001988f8 <Find Target Unit> 001988c0: 00000000 nop
<Dead> 001988c4: 90620004 lbu r2,0x0004(r3) Load AI Targeting Flags 001988c8: 0806623a j 0x001988e8 Branch if Unit needs to be revived 001988cc: 30420001 andi r2,r2,0x0001
<Petrify> 001988d0: 90620004 lbu r2,0x0004(r3) Load AI Targeting Flags 001988d4: 0806623a j 0x001988e8 Branch if Unit needs to be Unpetrified 001988d8: 30420002 andi r2,r2,0x0002
<Blood Suck> 001988dc: 90620004 lbu r2,0x0004(r3) Load AI Targeting Flags 001988e0: 00000000 nop 001988e4: 30420004 andi r2,r2,0x0004 001988e8: 14400003 bne r2,r0,0x001988f8 <Find Target Unit> if Unit is Jumping??? 001988ec: 34040003 ori r4,r0,0x0003 Find Specific Target 001988f0: 080662ba j 0x00198ae8 Exit and return 1 001988f4: 34020001 ori r2,r0,0x0001
<Find Target Unit> 001988f8: 0c065f43 jal 0x00197d0c Find Active Unit 001988fc: 00c02821 addu r5,r6,r0 Look for Unit ID 00198900: 1040005c beq r2,r0,0x00198a74 Branch if Unit not Active 00198904: 00000000 nop 00198908: a2000cbd sb r0,0x0cbd(r16) Initialize Ability Counter
<Choose Ability> 0019890c: 92030e2f lbu r3,0x0e2f(r16) Load Acting Unit ID? 00198910: 00000000 nop 00198914: 00031100 sll r2,r3,0x04 ID * 10 00198918: 00431021 addu r2,r2,r3 ID * 11 0019891c: 000210c0 sll r2,r2,0x03 ID * 88 00198920: 24420ef0 addiu r2,r2,0x0ef0 00198924: 92030cbd lbu r3,0x0cbd(r16) Load Ability Counter 00198928: 02021021 addu r2,r16,r2 Point to Unit Abiilty List 0019892c: 00031880 sll r3,r3,0x02 ? * 4 00198930: 00432021 addu r4,r2,r3 00198934: 90830002 lbu r3,0x0002(r4) Load Ability List ID 00198938: 340200ff ori r2,r0,0x00ff 0019893c: 1062004d beq r3,r2,0x00198a74 Break out of loop if End of List 00198940: 00000000 nop 00198944: 0c06561e jal 0x00195878 AI Ability Data Setting 00198948: 00000000 nop 0019894c: 8e05000c lw r5,0x000c(r16) Load AI Behavior Flags 00198950: 00000000 nop 00198954: 30a20020 andi r2,r5,0x0020 00198958: 1040003d beq r2,r0,0x00198a50 <Ability++> if Ability doesn't cancel status 0019895c: 00000000 nop 00198960: 06210002 bgez r17,0x0019896c Branch if Status ID is not 0 00198964: 02201821 addu r3,r17,r0 00198968: 26230007 addiu r3,r17,0x0007 Default Status 00 to Performing??? 0019896c: 000318c3 sra r3,r3,0x03 00198970: 02031021 addu r2,r16,r3 00198974: 90440007 lbu r4,0x0007(r2) 00198978: 000318c0 sll r3,r3,0x03 0019897c: 02231823 subu r3,r17,r3 00198980: 34020080 ori r2,r0,0x0080 00198984: 00621007 srav r2,r2,r3 00198988: 00822024 and r4,r4,r2 0019898c: 10800030 beq r4,r0,0x00198a50 <Ability++> if Status is not present
<Faith> 00198990: 30a20400 andi r2,r5,0x0400 00198994: 10400006 beq r2,r0,0x001989b0 Branch if Ability uses Faith 00198998: 30a24000 andi r2,r5,0x4000 0019899c: 92420052 lbu r2,0x0052(r18) Load Innate Status 5 001989a0: 00000000 nop 001989a4: 30420040 andi r2,r2,0x0040 001989a8: 14400029 bne r2,r0,0x00198a50 <Ability++> if Unit is Innate Innocent
<Reflect> 001989ac: 30a24000 andi r2,r5,0x4000 001989b0: 10400006 beq r2,r0,0x001989cc Branch if Ability is Reflectable 001989b4: 30a20100 andi r2,r5,0x0100 001989b8: 92420052 lbu r2,0x0052(r18) Load Innate Status 5 001989bc: 00000000 nop 001989c0: 30420002 andi r2,r2,0x0002 001989c4: 14400022 bne r2,r0,0x00198a50 <Ability++> if Unit is Innate Reflect
<Silence> 001989c8: 30a20100 andi r2,r5,0x0100 001989cc: 10400008 beq r2,r0,0x001989f0 Branch if Ability is Not Silenceable 001989d0: 00000000 nop 001989d4: 8e0217f8 lw r2,0x17f8(r16) Acting Unit's Data Pointer 001989d8: 00000000 nop 001989dc: 90420059 lbu r2,0x0059(r2) Load Current Status 2 001989e0: 00000000 nop 001989e4: 30420008 andi r2,r2,0x0008 001989e8: 14400019 bne r2,r0,0x00198a50 <Ability++> if Unit is Silenced 001989ec: 00000000 nop
<MP Cost> 001989f0: 8e0217f8 lw r2,0x17f8(r16) Acting Unit's Data Pointer 001989f4: 92030011 lbu r3,0x0011(r16) r3 = MP Cost 001989f8: 9442002c lhu r2,0x002c(r2) Load CurMP 001989fc: 00000000 nop 00198a00: 0043102b sltu r2,r2,r3 00198a04: 10400005 beq r2,r0,0x00198a1c <Choose Ability> if Unit has enough MP to cast Ability 00198a08: 34020001 ori r2,r0,0x0001 00198a0c: 3c01801a lui r1,0x801a 00198a10: ac22f388 sw r2,-0x0c78(r1) Not enough MP = True? 00198a14: 08066289 j 0x00198a24 00198a18: 00000000 nop
<Choose Ability> 00198a1c: 3c01801a lui r1,0x801a 00198a20: ac22f38c sw r2,-0x0c74(r1) Ability can be cast? 00198a24: 3c02801a lui r2,0x801a 00198a28: 8c42f384 lw r2,-0x0c7c(r2) Usable Ability Counter 00198a2c: 00000000 nop 00198a30: 24420001 addiu r2,r2,0x0001 00198a34: 3c01801a lui r1,0x801a 00198a38: ac22f384 sw r2,-0x0c7c(r1) Usable Ability Counter++ 00198a3c: 0c066bc6 jal 0x0019af18 Decide to Use Ability 00198a40: 00000000 nop 00198a44: 2403ffff addiu r3,r0,0xffff 00198a48: 10430027 beq r2,r3,0x00198ae8 Exit and Return -1 if Ability was chosen 00198a4c: 2402ffff addiu r2,r0,0xffff
<Ability++> 00198a50: 92020cbd lbu r2,0x0cbd(r16) Load Ability Counter 00198a54: 00000000 nop 00198a58: 24420001 addiu r2,r2,0x0001 00198a5c: a2020cbd sb r2,0x0cbd(r16) Ability Counter++ 00198a60: 92020cbd lbu r2,0x0cbd(r16) 00198a64: 00000000 nop 00198a68: 2c420022 sltiu r2,r2,0x0022 00198a6c: 1440ffa7 bne r2,r0,0x0019890c Do for all abilities 00198a70: 00000000 nop
<No Ability was choosen> 00198a74: 92020071 lbu r2,0x0071(r16) Load ? 00198a78: 00000000 nop 00198a7c: 10400006 beq r2,r0,0x00198a98 Branch if ? = False 00198a80: 260417fc addiu r4,r16,0x17fc 00198a84: 26050054 addiu r5,r16,0x0054 00198a88: 0c066ac2 jal 0x0019ab08 Transfer Half Word Values 00198a8c: 34060020 ori r6,r0,0x0020 00198a90: 080662ba j 0x00198ae8 Exit and return 2 00198a94: 34020002 ori r2,r0,0x0002
<Any Ability Usable?> 00198a98: 3c02801a lui r2,0x801a 00198a9c: 8c42f384 lw r2,-0x0c7c(r2) Load Usable Ability Counter 00198aa0: 00000000 nop 00198aa4: 14400003 bne r2,r0,0x00198ab4 Branch if any ability was usable 00198aa8: 00000000 nop 00198aac: 080662ba j 0x00198ae8 Exit and return 0 00198ab0: 00001021 addu r2,r0,r0
00198ab4: 3c03801a lui r3,0x801a 00198ab8: 8c63f388 lw r3,-0x0c78(r3) 00198abc: 00000000 nop 00198ac0: 10600009 beq r3,r0,0x00198ae8 Exit and return 1 if Unit has enough MP to cast spell? 00198ac4: 34020001 ori r2,r0,0x0001 00198ac8: 92030cbe lbu r3,0x0cbe(r16) Load ? 00198acc: 00000000 nop 00198ad0: 14600005 bne r3,r0,0x00198ae8 Exit and Return 1 if true 00198ad4: 00000000 nop 00198ad8: 3c02801a lui r2,0x801a 00198adc: 8c42f38c lw r2,-0x0c74(r2) Ability can be cast? 00198ae0: 00000000 nop 00198ae4: 0002102b sltu r2,r0,r2 Return 0 if any Ability can be cast
00198ae8: 8fbf001c lw r31,0x001c(r29) 00198aec: 8fb20018 lw r18,0x0018(r29) 00198af0: 8fb10014 lw r17,0x0014(r29) 00198af4: 8fb00010 lw r16,0x0010(r29) 00198af8: 27bd0020 addiu r29,r29,0x0020 00198afc: 03e00008 jr r31 00198b00: 00000000 nop