Set AI ability considerations for all units and self
Jump to navigation
Jump to search
00194e58: 27bdff70 addiu r29,r29,0xff70 00194e5c: 340800ff ori r8,r0,0x00ff 00194e60: 340700ff ori r7,r0,0x00ff 00194e64: afb60080 sw r22,0x0080(r29) 00194e68: 3c16801a lui r22,0x801a 00194e6c: 26d6f3c4 addiu r22,r22,0xf3c4 00194e70: afb70084 sw r23,0x0084(r29) 00194e74: 0000b821 addu r23,r0,r0 00194e78: afbf008c sw r31,0x008c(r29) 00194e7c: afbe0088 sw r30,0x0088(r29) 00194e80: afb5007c sw r21,0x007c(r29) 00194e84: afb40078 sw r20,0x0078(r29) 00194e88: afb30074 sw r19,0x0074(r29) 00194e8c: afb20070 sw r18,0x0070(r29) 00194e90: afb1006c sw r17,0x006c(r29) 00194e94: afb00068 sw r16,0x0068(r29) 00194e98: afa40010 sw r4,0x0010(r29) 00194e9c: afa00020 sw r0,0x0020(r29) 00194ea0: afa00028 sw r0,0x0028(r29) 00194ea4: afa00030 sw r0,0x0030(r29) 00194ea8: afa00038 sw r0,0x0038(r29) 00194eac: afa00040 sw r0,0x0040(r29) 00194eb0: afa80058 sw r8,0x0058(r29) 00194eb4: afa70060 sw r7,0x0060(r29)
<Target Loop>
00194eb8: 0c065b23 jal 0x 00196c8c check targetability (returns 1 if untargetable) 00194ebc: 02e02021 addu r4,r23,r0 00194ec0: 14400142 bne r2,r0,0x 001953cc branch to next target if not targetable 00194ec4: 00171100 sll r2,r23,0x04 targets ID*16 00194ec8: 2442182c addiu r2,r2,0x182c 00194ecc: 3c08801a lui r8,0x801a 00194ed0: 2508f3c4 addiu r8,r8,0xf3c4 00194ed4: 0102a821 addu r21,r8,r2 r21 =Targets AI decision data 00194ed8: 001710c0 sll r2,r23,0x03 00194edc: 00571023 subu r2,r2,r23 00194ee0: 00021180 sll r2,r2,0x06 00194ee4: 3c038019 lui r3,0x8019 00194ee8: 246308cc addiu r3,r3,0x08cc 00194eec: 3c04801a lui r4,0x801a 00194ef0: 908401f2 lbu r4,0x01f2(r4) load acting units ID 00194ef4: 0043a021 addu r20,r2,r3 r20 = Target unit data 00194ef8: afa00048 sw r0,0x0048(r29) 00194efc: 16e40003 bne r23,r4,0x 00194f0c branch if considered target isn't self 00194f00: afa00050 sw r0,0x0050(r29) 00194f04: 080653c6 j 0x 00194f18 00194f08: afa00018 sw r0,0x0018(r29) 00194f0c: 0c0666e6 jal 0x 00199b98 calculate clockticks till unit acts 00194f10: 02802021 addu r4,r20,r0 00194f14: afa20018 sw r2,0x0018(r29) store clockticks till unit acts 00194f18: 92a20006 lbu r2,0x0006(r21) load charging flag? 00194f1c: 0000f021 addu r30,r0,r0 00194f20: 304200fc andi r2,r2,0x00fc clear hp recovery on ally/not direct or arcing attack 00194f24: a2a20006 sb r2,0x0006(r21) store new
<Move Loop>
00194f28: 3c07801a lui r7,0x801a 00194f2c: 24e7f3c4 addiu r7,r7,0xf3c4 00194f30: 00f71021 addu r2,r7,r23 00194f34: 9043198c lbu r3,0x198c(r2) load considered targets battle ID 00194f38: 00000000 nop 00194f3c: 00031100 sll r2,r3,0x04 ID*16 00194f40: 00431021 addu r2,r2,r3 ID*17 00194f44: 000210c0 sll r2,r2,0x03 ID*136 00194f48: 24420ef0 addiu r2,r2,0x0ef0 ID*136 + 0xef0 00194f4c: 00e21021 addu r2,r7,r2 r2 = (Target units move list) 00194f50: 001e1880 sll r3,r30,0x02 movecounter*2 00194f54: 00439821 addu r19,r2,r3 r19 = next move address 00194f58: 96620002 lhu r2,0x0002(r19) load skillset/usage 00194f5c: 00000000 nop 00194f60: 30427fff andi r2,r2,0x7fff remove usage flag 00194f64: a6620002 sh r2,0x0002(r19) store new 00194f68: 92630002 lbu r3,0x0002(r19) load skillset 00194f6c: 340200ff ori r2,r0,0x00ff 00194f70: 106200f3 beq r3,r2,0x 00195340 branch if skillset = 0xff 00194f74: 00000000 nop
00194f78: 0c06561e jal 0x 00195878 AI ability data setting 00194f7c: 02602021 addu r4,r19,r0
00194f80: 92c30001 lbu r3,0x0001(r22) load CT of ability 00194f84: 9282005a lbu r2,0x005a(r20) load target status 00194f88: 8fa80018 lw r8,0x0018(r29) load clockticks till unit acts 00194f8c: 86d00002 lh r16,0x0002(r22) load ability ID 00194f90: 30420002 andi r2,r2,0x0002 00194f94: 10400008 beq r2,r0,0x 00194fb8 branch if not frog 00194f98: 01038821 addu r17,r8,r3 r17 = ability CT + clockticks till unit acts
if target = frog
00194f9c: 3402001d ori r2,r0,0x001d 00194fa0: 12020008 beq r16,r2,0x 00194fc4 branch if frog spell 00194fa4: 3402016f ori r2,r0,0x016f 00194fa8: 12020006 beq r16,r2,0x 00194fc4 branch if frog attack 00194fac: 00000000 nop 00194fb0: 080654cd j 0x 00195334 only allow frog abilities 00194fb4: 27de0001 addiu r30,r30,0x0001 move counter++
00194fb8: 3402016f ori r2,r0,0x016f 00194fbc: 120200dc beq r16,r2,0x 00195330 branch if frog attack 00194fc0: 00000000 nop
00194fc4: 8fa40018 lw r4,0x0018(r29) load clockticks till unit acts 00194fc8: 02802821 addu r5,r20,r0 r5 =target unit data? 00194fcc: 0c067bc9 jal 0x 0019ef24 check if status should/can be applied 00194fd0: 34060025 ori r6,r0,0x0025 if (Don't act), r2=1 00194fd4: 144000d6 bne r2,r0,0x 00195330 branch to next move if unit has don't act 00194fd8: 00000000 nop 00194fdc: 96c2000c lhu r2,0x000c(r22) load ability AI behavior flags 1 and 2 00194fe0: 00000000 nop 00194fe4: 30420100 andi r2,r2,0x0100 00194fe8: 10400006 beq r2,r0,0x 00195004 branch if not follow target
if follow target
00194fec: 02202021 addu r4,r17,r0 r4 = ability CT + clockticks till unit acts 00194ff0: 02802821 addu r5,r20,r0 r5 = unit data\ 00194ff4: 0c067bc9 jal 0x 0019ef24 see if ability goes off before units turn? 00194ff8: 3406000c ori r6,r0,0x000c check if unit has silence 00194ffc: 144000cc bne r2,r0,0x 00195330 branch if so 00195000: 00000000 nop
00195004: 96c2000c lhu r2,0x000c(r22) load AI behavior flags 00195008: 00000000 nop 0019500c: 30420400 andi r2,r2,0x0400 00195010: 10400006 beq r2,r0,0x 0019502c branch if no faith calculation 00195014: 02202021 addu r4,r17,r0 00195018: 02802821 addu r5,r20,r0 0019501c: 0c067bc9 jal 0x 0019ef24 check if status should/can be applied 00195020: 34060021 ori r6,r0,0x0021 check for innocent 00195024: 144000c2 bne r2,r0,0x 00195330 branch if so 00195028: 00000000 nop
0019502c: 92c30011 lbu r3,0x0011(r22) load ability MP cost 00195030: 9682002c lhu r2,0x002c(r20) load target MP 00195034: 00000000 nop 00195038: 0043102b sltu r2,r2,r3 0019503c: 144000bc bne r2,r0,0x 00195330 branch if not enough MP 00195040: 00000000 nop 00195044: 92620002 lbu r2,0x0002(r19) load ability's skillset 00195048: 3c018006 lui r1,0x8006 0019504c: 00220821 addu r1,r1,r2 00195050: 90235cb4 lbu r3,0x5cb4(r1) load action menu byte 00195054: 34020001 ori r2,r0,0x0001 00195058: 10620007 beq r3,r2,0x 00195078 branch if Item 0019505c: 34020007 ori r2,r0,0x0007 00195060: 10620005 beq r3,r2,0x 00195078 branch if katana inventory 00195064: 3402017e ori r2,r0,0x017e 00195068: 12020003 beq r16,r2,0x 00195078 branch if ability = throw knife? 0019506c: 34020189 ori r2,r0,0x0189 00195070: 1602001e bne r16,r2,0x 001950ec branch if ability != Ball 00195074: 34020002 ori r2,r0,0x0002 00195078: 928201ba lbu r2,0x01ba(r20) load modified ENTD 0019507c: 00000000 nop 00195080: 30420030 andi r2,r2,0x0030 00195084: 1440000a bne r2,r0,0x 001950b0 branch if on enemy team 00195088: 00000000 nop 0019508c: 92c20006 lbu r2,0x0006(r22) load item considered 00195090: 3c018006 lui r1,0x8006 00195094: 00220821 addu r1,r1,r2 00195098: 902296e0 lbu r2,-0x6920(r1) load item quantity 0019509c: 00000000 nop 001950a0: 14400052 bne r2,r0,0x 001951ec branch if quantity exists 001950a4: 00000000 nop 001950a8: 080654cd j 0x 00195334 jump to end, counter++ 001950ac: 27de0001 addiu r30,r30,0x0001
001950b0: 92c30006 lbu r3,0x0006(r22) load considered item 001950b4: 00000000 nop 001950b8: 00031040 sll r2,r3,0x01 item*2 001950bc: 00431021 addu r2,r2,r3 item*3 001950c0: 00021080 sll r2,r2,0x02 item*12 001950c4: 3c018006 lui r1,0x8006 001950c8: 00220821 addu r1,r1,r2 001950cc: 90232eba lbu r3,0x2eba(r1) load item required level 001950d0: 92820022 lbu r2,0x0022(r20) load level 001950d4: 00000000 nop 001950d8: 0043102b sltu r2,r2,r3 001950dc: 10400043 beq r2,r0,0x 001951ec branch if level is ok 001950e0: 00000000 nop 001950e4: 080654cd j 0x 00195334 001950e8: 27de0001 addiu r30,r30,0x0001
AI throw determinations <Throw Loop>
001950ec: 1462003f bne r3,r2,0x 001951ec branch if not Throw 001950f0: 00000000 nop 001950f4: 3c02801a lui r2,0x801a 001950f8: 904201f2 lbu r2,0x01f2(r2) load acting unit ID 001950fc: 00000000 nop 00195100: 16e2008b bne r23,r2,0x 00195330 branch if considered target isn't self 00195104: 2411ffff addiu r17,r0,0xffff 00195108: 3410017f ori r16,r0,0x017f default? 0019510c: 34120001 ori r18,r0,0x0001 default? 00195110: 02e02021 addu r4,r23,r0 00195114: 92c50000 lbu r5,0x0000(r22) load skillset 00195118: 0c066a94 jal 0x 0019aa50 load known ability flag 0019511c: 2606fe83 addiu r6,r16,0xfe83 00195120: 1040002b beq r2,r0,0x 001951d0 branch if ability not known 00195124: 00000000 nop 00195128: 3c018006 lui r1,0x8006 0019512c: 00320821 addu r1,r1,r18 00195130: 90261020 lbu r6,0x1020(r1) load throw ability item type 00195134: 00002021 addu r4,r0,r0 00195138: 00002821 addu r5,r0,r0 0019513c: 3c018006 lui r1,0x8006 00195140: 00250821 addu r1,r1,r5 00195144: 90222ebd lbu r2,0x2ebd(r1) load item type 00195148: 00000000 nop 0019514c: 1446001c bne r2,r6,0x 001951c0 branch to next item ability types don't match 00195150: 00000000 nop 00195154: 3c018006 lui r1,0x8006 00195158: 00250821 addu r1,r1,r5 0019515c: 90232eba lbu r3,0x2eba(r1) load required level 00195160: 00000000 nop 00195164: 0071102a slt r2,r3,r17 set if level < item level of last item 00195168: 14400015 bne r2,r0,0x 001951c0 branch to next item if so?? 0019516c: 00000000 nop 00195170: 928201ba lbu r2,0x01ba(r20) 00195174: 00000000 nop 00195178: 30420030 andi r2,r2,0x0030 0019517c: 14400006 bne r2,r0,0x 00195198 other team check 00195180: 00000000 nop
If player team
00195184: 3c018006 lui r1,0x8006 00195188: 00240821 addu r1,r1,r4 0019518c: 902296e0 lbu r2,-0x6920(r1) load quantity 00195190: 08065469 j 0x 001951a4 00195194: 2c420005 sltiu r2,r2,0x0005 set if quantity is less than 05 00195198: 92820022 lbu r2,0x0022(r20) load level 0019519c: 00000000 nop 001951a0: 0043102a slt r2,r2,r3 001951a4: 14400006 bne r2,r0,0x 001951c0 Branch to next item if level too low 001951a8: 00000000 nop 001951ac: 00608821 addu r17,r3,r0 r17 = required level for item 001951b0: 3c01801a lui r1,0x801a 001951b4: a43001d8 sh r16,0x01d8(r1) store chosen ability ID 001951b8: 3c01801a lui r1,0x801a 001951bc: a02401da sb r4,0x01da(r1) store chosen weapon ID 001951c0: 24840001 addiu r4,r4,0x0001 001951c4: 28820100 slti r2,r4,0x0100 001951c8: 1440ffdc bne r2,r0,0x 0019513c do for all weapons 001951cc: 24a5000c addiu r5,r5,0x000c
</Throw Item>
001951d0: 26100001 addiu r16,r16,0x0001 001951d4: 2a020189 slti r2,r16,0x0189 001951d8: 1440ffcd bne r2,r0,0x 00195110 check for next ability 001951dc: 26520001 addiu r18,r18,0x0001
</Throw ability>
001951e0: 2402ffff addiu r2,r0,0xffff 001951e4: 12220052 beq r17,r2,0x 00195330 001951e8: 00000000 nop
</Throw loop>
001951ec: 96620002 lhu r2,0x0002(r19) load skillset and usage type 001951f0: 00000000 nop 001951f4: 34428000 ori r2,r2,0x8000 add usable flag? 001951f8: a6620002 sh r2,0x0002(r19) store new flags 001951fc: 30420800 andi r2,r2,0x0800 00195200: 1440004b bne r2,r0,0x 00195330 branch if requires monster skill 00195204: 00000000 nop 00195208: 92a20008 lbu r2,0x0008(r21) load enemy flag of considered target 0019520c: 00000000 nop 00195210: 10400026 beq r2,r0,0x 001952ac branch if same team 00195214: 00000000 nop 00195218: 96c4000c lhu r4,0x000c(r22) load ability ai behavior 0019521c: 00000000 nop 00195220: 30820002 andi r2,r4,0x0002 00195224: 10400021 beq r2,r0,0x 001952ac branch if not target enemies 00195228: 00000000 nop 0019522c: 8fa70020 lw r7,0x0020(r29) 00195230: 96c3000e lhu r3,0x000e(r22) 00195234: 24e70001 addiu r7,r7,0x0001 00195238: 30620002 andi r2,r3,0x0002 0019523c: 10400005 beq r2,r0,0x 00195254 branch if not magic attack 00195240: afa70020 sw r7,0x0020(r29) Store target enemies counter 00195244: 8fa80028 lw r8,0x0028(r29) 00195248: 00000000 nop 0019524c: 25080001 addiu r8,r8,0x0001 00195250: afa80028 sw r8,0x0028(r29) store magic attack counter 00195254: 30620001 andi r2,r3,0x0001 00195258: 10400005 beq r2,r0,0x 00195270 branch if not physical attack 0019525c: 30824000 andi r2,r4,0x4000 r2 = reflectable check 00195260: 8fa70030 lw r7,0x0030(r29) 00195264: 00000000 nop 00195268: 24e70001 addiu r7,r7,0x0001 0019526c: afa70030 sw r7,0x0030(r29) store physical attack counter 00195270: 10400005 beq r2,r0,0x 00195288 branch if not reflectable 00195274: 00000000 nop 00195278: 8fa80038 lw r8,0x0038(r29) 0019527c: 00000000 nop 00195280: 25080001 addiu r8,r8,0x0001 00195284: afa80038 sw r8,0x0038(r29) Store reflectable counter 00195288: 92c20010 lbu r2,0x0010(r22) load elements 0019528c: 00000000 nop 00195290: 30420008 andi r2,r2,0x0008 00195294: 10400005 beq r2,r0,0x 001952ac branch if not Earth element? 00195298: 00000000 nop 0019529c: 8fa70040 lw r7,0x0040(r29) 001952a0: 00000000 nop 001952a4: 24e70001 addiu r7,r7,0x0001 001952a8: afa70040 sw r7,0x0040(r29) Store earth element counter
If target = ally
001952ac: 96c2000c lhu r2,0x000c(r22) load moves AI behavior 001952b0: 34030081 ori r3,r0,0x0081 001952b4: 30420081 andi r2,r2,0x0081 001952b8: 14430005 bne r2,r3,0x 001952d0 branch if move is not HP recovery on allies 001952bc: 00000000 nop 001952c0: 92a20006 lbu r2,0x0006(r21) 001952c4: 00000000 nop 001952c8: 34420002 ori r2,r2,0x0002 001952cc: a2a20006 sb r2,0x0006(r21) store HP recovery on ally flag 001952d0: 96c2000e lhu r2,0x000e(r22) 001952d4: 00000000 nop 001952d8: 304200c0 andi r2,r2,0x00c0 001952dc: 10400005 beq r2,r0,0x 001952f4 branch if not direct or Arc attack 001952e0: 00000000 nop 001952e4: 92a20006 lbu r2,0x0006(r21) 001952e8: 00000000 nop 001952ec: 34420001 ori r2,r2,0x0001 001952f0: a2a20006 sb r2,0x0006(r21) store abnormal trajectory ability 001952f4: 96c3000c lhu r3,0x000c(r22) 001952f8: 00000000 nop 001952fc: 30620002 andi r2,r3,0x0002 00195300: 10400005 beq r2,r0,0x 00195318 branch if move is not target enemies 00195304: 30620001 andi r2,r3,0x0001 00195308: 8fa80048 lw r8,0x0048(r29) 0019530c: 00000000 nop 00195310: 25080001 addiu r8,r8,0x0001 target enemies counter++ 00195314: afa80048 sw r8,0x0048(r29) 00195318: 10400005 beq r2,r0,0x 00195330 branch if not target allies 0019531c: 00000000 nop 00195320: 8fa70050 lw r7,0x0050(r29) 00195324: 00000000 nop 00195328: 24e70001 addiu r7,r7,0x0001 0019532c: afa70050 sw r7,0x0050(r29) target allies counter++ 00195330: 27de0001 addiu r30,r30,0x0001 move counter++ 00195334: 2bc20022 slti r2,r30,0x0022 00195338: 1440fefb bne r2,r0,0x 00194f28 branch if < 0x22 moves 0019533c: 00000000 nop
</Move loop>
00195340: 92a20008 lbu r2,0x0008(r21) load enemy flag 00195344: 00000000 nop 00195348: 14400020 bne r2,r0,0x 001953cc branch to next target if enemy 0019534c: 00000000 nop
<If Ally>
00195350: 8fa80050 lw r8,0x0050(r29) r8 = # of abilities that have target allies 00195354: 8fa70048 lw r7,0x0048(r29) r7 = # of abilites that have target enemeies 00195358: 00000000 nop 0019535c: 01071821 addu r3,r8,r7 r3 = sum of abilities with target enemy/ally 00195360: 14600006 bne r3,r0,0x 0019537c branch if any abilities found 00195364: 000811c0 sll r2,r8,0x07 target allies*
If nothing set yet
00195368: 92a20006 lbu r2,0x0006(r21) 0019536c: 00000000 nop 00195370: 304200fb andi r2,r2,0x00fb remove 0x04 flag 00195374: 080654f3 j 0x 001953cc go to next target 00195378: a2a20006 sb r2,0x0006(r21)
0019537c: 0043001a div r2,r3 # of target allies abilites*128 / (Sum of all target ally/enemy abilities) 00195380: 00001812 mflo r3 00195384: 00000000 nop 00195388: 2862004d slti r2,r3,0x004d set if less than 77 0019538c: 14400004 bne r2,r0,0x 001953a0 branch if so 00195390: 00000000 nop 00195394: 92a20006 lbu r2,0x0006(r21) 00195398: 080654eb j 0x 001953ac 0019539c: 34420004 ori r2,r2,0x0004 add 0x04 flag 001953a0: 92a20006 lbu r2,0x0006(r21) 001953a4: 00000000 nop 001953a8: 304200fb andi r2,r2,0x00fb remove 0x04 flag 001953ac: a2a20006 sb r2,0x0006(r21) 001953b0: 8fa70058 lw r7,0x0058(r29) 001953b4: 00000000 nop 001953b8: 0067102a slt r2,r3,r7 set if # of abilities < previous number 001953bc: 10400003 beq r2,r0,0x 001953cc 001953c0: 00000000 nop 001953c4: afb70060 sw r23,0x0060(r29) store unit ID 001953c8: afa30058 sw r3,0x0058(r29) store # of abilities?
</If Ally>
001953cc: 26f70001 addiu r23,r23,0x0001 target counter++ 001953d0: 2ae20015 slti r2,r23,0x0015 001953d4: 1440feb8 bne r2,r0,0x 00194eb8 Do for all units 001953d8: 340200ff ori r2,r0,0x00ff
001953dc: 8fa80060 lw r8,0x0060(r29) load unit ID 001953e0: 00000000 nop 001953e4: 11020009 beq r8,r2,0x 0019540c branch if no target found? 001953e8: 00009021 addu r18,r0,r0 001953ec: 00081900 sll r3,r8,0x04 001953f0: 3c07801a lui r7,0x801a 001953f4: 24e7f3c4 addiu r7,r7,0xf3c4 001953f8: 00e31821 addu r3,r7,r3 001953fc: 90621832 lbu r2,0x1832(r3) AI decision data + 0x06 00195400: 00000000 nop 00195404: 304200fb andi r2,r2,0x00fb remove 0x04 flag 00195408: a0621832 sb r2,0x1832(r3) store new
0019540c: 0000a021 addu r20,r0,r0 00195410: 3c02dfff lui r2,0xdfff 00195414: 3c15801a lui r21,0x801a 00195418: 8eb501f8 lw r21,0x01f8(r21) load acting units AI decision 0019541c: 3c03801a lui r3,0x801a 00195420: 8c630078 lw r3,0x0078(r3) load targeting flags? 00195424: 8fa40020 lw r4,0x0020(r29) load target enemies counter 00195428: 3442ffff ori r2,r2,0xffff r2 = 0xdfffffff 0019542c: 3c01801a lui r1,0x801a 00195430: a0200082 sb r0,0x0082(r1) 00195434: 00621824 and r3,r3,r2 remove 0x20000000 flag 00195438: 340200ff ori r2,r0,0x00ff 0019543c: 3c01801a lui r1,0x801a 00195440: ac230078 sw r3,0x0078(r1) store new flags 00195444: a2a2000f sb r2,0x000f(r21) store 0xff in max ability range 00195448: 04810002 bgez r4,0x 00195454 branch if target enemies abilities found 0019544c: a2a2000e sb r2,0x000e(r21) store 0xff in min ability range 00195450: 24840007 addiu r4,r4,0x0007 00195454: 000488c3 sra r17,r4,0x03 00195458: 341e0004 ori r30,r0,0x0004 0019545c: 3c08801a lui r8,0x801a 00195460: 2508f3c4 addiu r8,r8,0xf3c4 00195464: 25020004 addiu r2,r8,0x0004 r2 = 0x8019f3c8 00195468: a0400e44 sb r0,0x0e44(r2) clear ?? 0019546c: 27deffff addiu r30,r30,0xffff perform 4 times 00195470: 07c1fffd bgez r30,0x 00195468 00195474: 2442ffff addiu r2,r2,0xffff
00195478: 0000f021 addu r30,r0,r0
<Move Loop>
0019547c: 3c03801a lui r3,0x801a 00195480: 906301f3 lbu r3,0x01f3(r3) load acting units battle ID 00195484: 3c07801a lui r7,0x801a 00195488: 24e7f3c4 addiu r7,r7,0xf3c4 0019548c: 00031100 sll r2,r3,0x04 00195490: 00431021 addu r2,r2,r3 00195494: 000210c0 sll r2,r2,0x03 00195498: 24420ef0 addiu r2,r2,0x0ef0 0019549c: 00e21021 addu r2,r7,r2 r2 = units move list 001954a0: 001e1880 sll r3,r30,0x02 move list + move counter 001954a4: 00439821 addu r19,r2,r3 001954a8: 92630002 lbu r3,0x0002(r19) load skillset 001954ac: 340200ff ori r2,r0,0x00ff 001954b0: 1062009b beq r3,r2,0x 00195720 branch out of loop if skillset = 0xff 001954b4: 00000000 nop
001954b8: 0c06561e jal 0x 00195878 AI ability setting 001954bc: 02602021 addu r4,r19,r0
001954c0: 96620002 lhu r2,0x0002(r19) load skillset/usage type 001954c4: 00000000 nop 001954c8: 30428000 andi r2,r2,0x8000 001954cc: 10400090 beq r2,r0,0x 00195710 branch to next move if 0x8000 not set (disabled?) 001954d0: 00000000 nop 001954d4: 8fa80028 lw r8,0x0028(r29) magic attack check 001954d8: 00000000 nop 001954dc: 0228102a slt r2,r17,r8 set if ?? < number of magic attacks 001954e0: 14400003 bne r2,r0,0x 001954f0 branch if so 001954e4: 02602021 addu r4,r19,r0 r4 = unit move address 001954e8: 0c0655f0 jal 0x 001957c0 check for some status inflictions? 001954ec: 3405001b ori r5,r0,0x001b 001954f0: 8fa70030 lw r7,0x0030(r29) load physical attack counter
001954f4: 00000000 nop 001954f8: 0227102a slt r2,r17,r7 set if ?? < physical counter 001954fc: 14400003 bne r2,r0,0x 0019550c branch if so 00195500: 02602021 addu r4,r19,r0 00195504: 0c0655f0 jal 0x 001957c0 00195508: 3405001a ori r5,r0,0x001a
0019550c: 8fa80038 lw r8,0x0038(r29) load reflectable ability counter 00195510: 00000000 nop 00195514: 0228102a slt r2,r17,r8 set if ?? < reflectable ability counter 00195518: 14400003 bne r2,r0,0x 00195528 branch if so 0019551c: 02602021 addu r4,r19,r0 00195520: 0c0655f0 jal 0x 001957c0 don't use ability if reflect? 00195524: 34050026 ori r5,r0,0x0026
00195528: 8fa70040 lw r7,0x0040(r29) load earth element ability counter 0019552c: 00000000 nop 00195530: 1ce00003 bgtz r7,0x 00195540 branch if any abilities found 00195534: 02602021 addu r4,r19,r0 00195538: 0c0655f0 jal 0x 001957c0 Don't use ability if float? 0019553c: 34050011 ori r5,r0,0x0011
00195540: 96620002 lhu r2,0x0002(r19) load skillset/usage type 00195544: 00000000 nop 00195548: 30428000 andi r2,r2,0x8000 0019554c: 10400070 beq r2,r0,0x 00195710 branch if 0x8000 not set 00195550: 00000000 nop 00195554: 96c2000c lhu r2,0x000c(r22) load AI behavior 00195558: 00000000 nop 0019555c: 30420800 andi r2,r2,0x0800 00195560: 10400002 beq r2,r0,0x 0019556c branch if not random hits 00195564: 26520001 addiu r18,r18,0x0001 usable ability counter? 00195568: 26940001 addiu r20,r20,0x0001 random hits counter 0019556c: 86c30002 lh r3,0x0002(r22) load ability ID 00195570: 3402017b ori r2,r0,0x017b 00195574: 14620007 bne r3,r2,0x 00195594 branch if not 0x17b (holy water) 00195578: 3c032000 lui r3,0x2000 0019557c: 3c02801a lui r2,0x801a 00195580: 8c420078 lw r2,0x0078(r2) load targetability flags 00195584: 00000000 nop 00195588: 00431025 or r2,r2,r3 set 0x20000000 flag 0019558c: 3c01801a lui r1,0x801a 00195590: ac220078 sw r2,0x0078(r1)
00195594: 96c2000c lhu r2,0x000c(r22) load AI behavior 00195598: 00000000 nop 0019559c: 30420020 andi r2,r2,0x0020 001955a0: 1040000e beq r2,r0,0x 001955dc branch if not cancel status 001955a4: 00000000 nop 001955a8: 00008021 addu r16,r0,r0 001955ac: 3c08801a lui r8,0x801a 001955b0: 2508f3c4 addiu r8,r8,0xf3c4 001955b4: 01102021 addu r4,r8,r16
001955b8: 02d01821 addu r3,r22,r16 001955bc: 90820e44 lbu r2,0x0e44(r4) load ?? 001955c0: 90630007 lbu r3,0x0007(r3) load status infliction 1 001955c4: 26100001 addiu r16,r16,0x0001 counter++ 001955c8: 00431025 or r2,r2,r3 set status infliction 1 001955cc: a0820e44 sb r2,0x0e44(r4) store new 001955d0: 2a020005 slti r2,r16,0x0005 do 5 times 001955d4: 1440fff8 bne r2,r0,0x 001955b8 001955d8: 01102021 addu r4,r8,r16
001955dc: 96c2000c lhu r2,0x000c(r22) load AI behavior 001955e0: 34030040 ori r3,r0,0x0040 001955e4: 30420042 andi r2,r2,0x0042 001955e8: 14430003 bne r2,r3,0x 001955f8 branch if affect MP or target enemies 001955ec: 34020001 ori r2,r0,0x0001 001955f0: 3c01801a lui r1,0x801a 001955f4: a0220082 sb r2,0x0082(r1) store 0x01 001955f8: 92c40004 lbu r4,0x0004(r22) load range
001955fc: 92c30005 lbu r3,0x0005(r22) load aoe 00195600: 96c2000c lhu r2,0x000c(r22) load AI 00195604: 00000000 nop 00195608: 30420002 andi r2,r2,0x0002 0019560c: 10400007 beq r2,r0,0x 0019562c branch if not target enemies 00195610: 00832021 addu r4,r4,r3 r4 = total ability range 00195614: 92a2000e lbu r2,0x000e(r21) load smallest range ability 00195618: 00000000 nop 0019561c: 0082102a slt r2,r4,r2 set if ability range < stored Min range 00195620: 10400002 beq r2,r0,0x 0019562c branch if not 00195624: 00000000 nop 00195628: a2a4000e sb r4,0x000e(r21) store smallest range ability
0019562c: 96c2000c lhu r2,0x000c(r22) load ai behavior 00195630: 00000000 nop 00195634: 30420001 andi r2,r2,0x0001 00195638: 10400011 beq r2,r0,0x 00195680 branch if not target allies 0019563c: 00000000 nop 00195640: 92c20000 lbu r2,0x0000(r22) load skillset 00195644: 3c018006 lui r1,0x8006 00195648: 00220821 addu r1,r1,r2 0019564c: 90235cb4 lbu r3,0x5cb4(r1) load action menu 00195650: 34020001 ori r2,r0,0x0001 00195654: 14620004 bne r3,r2,0x 00195668 branch if not item 00195658: 24820001 addiu r2,r4,0x0001 r2 = range + 1? 0019565c: 00021fc2 srl r3,r2,0x1f 00195660: 00431021 addu r2,r2,r3 00195664: 00022043 sra r4,r2,0x01 (range + 1) / 2?
00195668: 92a2000f lbu r2,0x000f(r21) load max range ability? 0019566c: 00000000 nop 00195670: 0082102a slt r2,r4,r2 set if range < max range 00195674: 10400002 beq r2,r0,0x 00195680 branch if not 00195678: 00000000 nop 0019567c: a2a4000f sb r4,0x000f(r21) store new max range
00195680: 96630002 lhu r3,0x0002(r19) load skillset/usage type 00195684: 00000000 nop 00195688: 30620200 andi r2,r3,0x0200 0019568c: 14400017 bne r2,r0,0x 001956ec branch if 0x0200 00195690: 34620100 ori r2,r3,0x0100 r2 = flags + 0x0100 00195694: 30620400 andi r2,r3,0x0400 00195698: 14400015 bne r2,r0,0x 001956f0 branch if 0x0400 is set 0019569c: 00000000 nop 001956a0: 92c20001 lbu r2,0x0001(r22) load ability CT 001956a4: 3c03801a lui r3,0x801a 001956a8: 90630213 lbu r3,0x0213(r3) load remaining clockticks 001956ac: 00000000 nop 001956b0: 0043102b sltu r2,r2,r3 set if ability CT < remaining clockticks 001956b4: 10400007 beq r2,r0,0x 001956d4 branch if not 001956b8: 00000000 nop 001956bc: 3c04801a lui r4,0x801a 001956c0: 908401f2 lbu r4,0x01f2(r4) load acting units ID 001956c4: 0c067976 jal 0x 0019e5d8 ???? 001956c8: 34050001 ori r5,r0,0x0001 001956cc: 14400004 bne r2,r0,0x 001956e0 branch if return value != 0 001956d0: 00000000 nop 001956d4: 96620002 lhu r2,0x0002(r19) load skillset/usage 001956d8: 080655bb j 0x 001956ec 001956dc: 34420100 ori r2,r2,0x0100 set 0x0100 flag
001956e0: 96620002 lhu r2,0x0002(r19) load usage flags 001956e4: 00000000 nop 001956e8: 3042feff andi r2,r2,0xfeff remove 0x0100 flag
If 0x0200 is set, store flags + 0x0100 If ability CT > # of remaining clockticks
001956ec: a6620002 sh r2,0x0002(r19) store new flags
if 0x0200 is not set, and 0x0400 is set
001956f0: 8fa70010 lw r7,0x0010(r29) load ?? 001956f4: 00000000 nop 001956f8: 10e00005 beq r7,r0,0x 00195710 001956fc: 00000000 nop 00195700: 96620002 lhu r2,0x0002(r19) load usage flags 00195704: 00000000 nop 00195708: 30427fff andi r2,r2,0x7fff remove 0x8000 flag 0019570c: a6620002 sh r2,0x0002(r19)
00195710: 27de0001 addiu r30,r30,0x0001 move counter++ 00195714: 2bc20022 slti r2,r30,0x0022 do for 0x22 moves 00195718: 1440ff58 bne r2,r0,0x 0019547c 0019571c: 00000000 nop
</Move Loop>
00195720: 92a2000e lbu r2,0x000e(r21) load lowest range 00195724: 340400ff ori r4,r0,0x00ff 00195728: 10440007 beq r2,r4,0x 00195748 branch if lowest range = 0xff 0019572c: 00000000 nop 00195730: 92a2000e lbu r2,0x000e(r21) load lowest range 00195734: 3c03801a lui r3,0x801a 00195738: 906301fc lbu r3,0x01fc(r3) load acting units move 0019573c: 00000000 nop 00195740: 00431021 addu r2,r2,r3 move + lowest range (max range) 00195744: a2a2000e sb r2,0x000e(r21) store max range of lowest range ability 00195748: 92a2000f lbu r2,0x000f(r21) load highest range ability 0019574c: 00000000 nop 00195750: 14440002 bne r2,r4,0x 0019575c branch if not 0xff 00195754: 00000000 nop 00195758: a2a0000f sb r0,0x000f(r21) clear highest range ability 0019575c: 92a2000f lbu r2,0x000f(r21) load highest range 00195760: 3c03801a lui r3,0x801a 00195764: 906301fc lbu r3,0x01fc(r3) load move 00195768: 00000000 nop 0019576c: 00431021 addu r2,r2,r3 add move to range 00195770: 12400006 beq r18,r0,0x 0019578c branch if no usable abilities found? 00195774: a2a2000f sb r2,0x000f(r21) store highest max range 00195778: 001411c0 sll r2,r20,0x07 random hits ability counter*128 0019577c: 0052001a div r2,r18 random hits ability counter*128/# of usable abilities 00195780: 00001012 mflo r2 00195784: 3c01801a lui r1,0x801a 00195788: a0220d7c sb r2,0x0d7c(r1) store number of abilities? 0019578c: 8fbf008c lw r31,0x008c(r29) 00195790: 8fbe0088 lw r30,0x0088(r29) 00195794: 8fb70084 lw r23,0x0084(r29) 00195798: 8fb60080 lw r22,0x0080(r29) 0019579c: 8fb5007c lw r21,0x007c(r29) 001957a0: 8fb40078 lw r20,0x0078(r29) 001957a4: 8fb30074 lw r19,0x0074(r29) 001957a8: 8fb20070 lw r18,0x0070(r29) 001957ac: 8fb1006c lw r17,0x006c(r29) 001957b0: 8fb00068 lw r16,0x0068(r29) 001957b4: 27bd0090 addiu r29,r29,0x0090 001957b8: 03e00008 jr r31 001957bc: 00000000 nop