Difference between revisions of "AI Targeting Matrix Analysis (0019b7b8)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Updated documentation)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<font face='Courier New'>
 
 
 
  0019b7b8: 3c02801a lui r2,0x801a
 
  0019b7b8: 3c02801a lui r2,0x801a
  0019b7bc: 90420d7b lbu r2,0x0d7b(r2)
+
  0019b7bc: 90420d7b lbu r2,0x0d7b(r2) If Unit Acted this Turn
 
  0019b7c0: 27bdffe0 addiu r29,r29,0xffe0
 
  0019b7c0: 27bdffe0 addiu r29,r29,0xffe0
 
  0019b7c4: afb10014 sw r17,0x0014(r29)
 
  0019b7c4: afb10014 sw r17,0x0014(r29)
 
  0019b7c8: 3c11801a lui r17,0x801a
 
  0019b7c8: 3c11801a lui r17,0x801a
  0019b7cc: 2631f3c4 addiu r17,r17,0xf3c4
+
  0019b7cc: 2631f3c4 addiu r17,r17,0xf3c4 r17 = Unit AI Pointer
 
  0019b7d0: afbf001c sw r31,0x001c(r29)
 
  0019b7d0: afbf001c sw r31,0x001c(r29)
 
  0019b7d4: afb20018 sw r18,0x0018(r29)
 
  0019b7d4: afb20018 sw r18,0x0018(r29)
  0019b7d8: 1440009e bne r2,r0,0x0019ba54
+
  0019b7d8: 1440009e bne r2,r0,0x0019ba54 Branch if acted already?
 
  0019b7dc: afb00010 sw r16,0x0010(r29)
 
  0019b7dc: afb00010 sw r16,0x0010(r29)
 +
 
  0019b7e0: 3c04fdff lui r4,0xfdff
 
  0019b7e0: 3c04fdff lui r4,0xfdff
  0019b7e4: 3484ffff ori r4,r4,0xffff
+
  0019b7e4: 3484ffff ori r4,r4,0xffff r4 = -02000000
 
  0019b7e8: 3c03801a lui r3,0x801a
 
  0019b7e8: 3c03801a lui r3,0x801a
  0019b7ec: 8c630078 lw r3,0x0078(r3)             load flags
+
  0019b7ec: 8c630078 lw r3,0x0078(r3) r3 = Load ? (Tracking?)
  0019b7f0: 34020001 ori r2,r0,0x0001
+
  0019b7f0: 34020001 ori r2,r0,0x0001 r2 = True
 
  0019b7f4: 3c01801a lui r1,0x801a
 
  0019b7f4: 3c01801a lui r1,0x801a
  0019b7f8: a022f3d9 sb r2,-0x0c27(r1)
+
  0019b7f8: a022f3d9 sb r2,-0x0c27(r1) ? = True
 
  0019b7fc: 3c01801a lui r1,0x801a
 
  0019b7fc: 3c01801a lui r1,0x801a
  0019b800: a020020d sb r0,0x020d(r1)
+
  0019b800: a020020d sb r0,0x020d(r1) Clear ?
  0019b804: 00641824 and r3,r3,r4               remove 0x02000000 flag
+
  0019b804: 00641824 and r3,r3,r4 Modify ?
 
  0019b808: 3c01801a lui r1,0x801a
 
  0019b808: 3c01801a lui r1,0x801a
  0019b80c: ac230078 sw r3,0x0078(r1)
+
  0019b80c: ac230078 sw r3,0x0078(r1) Save Tracking?
  0019b810: 92250e49 lbu r5,0x0e49(r17)               load unit ID
+
 
 +
<Y Loop>
 +
  0019b810: 92250e49 lbu r5,0x0e49(r17) r5 = Unit ID
 
  0019b814: 3c048019 lui r4,0x8019
 
  0019b814: 3c048019 lui r4,0x8019
  0019b818: 248408cc addiu r4,r4,0x08cc
+
  0019b818: 248408cc addiu r4,r4,0x08cc r4 = Unit Data
  0019b81c: 000518c0 sll r3,r5,0x03
+
  0019b81c: 000518c0 sll r3,r5,0x03 Unit ID * 8
  0019b820: 00651823 subu r3,r3,r5
+
  0019b820: 00651823 subu r3,r3,r5 Unit ID * 7
  0019b824: 00031980 sll r3,r3,0x06
+
  0019b824: 00031980 sll r3,r3,0x06 Unit ID * 0x1c0
  0019b828: 00051100 sll r2,r5,0x04
+
  0019b828: 00051100 sll r2,r5,0x04 Unit ID * 0x10
  0019b82c: 2442182c addiu r2,r2,0x182c
+
  0019b82c: 2442182c addiu r2,r2,0x182c Unit ID + 182c
  0019b830: 02228021 addu r16,r17,r2               r16 = ai decision data
+
  0019b830: 02228021 addu r16,r17,r2 r16 = Unit AI Decision Data
  0019b834: 92020007 lbu r2,0x0007(r16)
+
  0019b834: 92020007 lbu r2,0x0007(r16) Get Unit AI Vulnerablity status flags
 
  0019b838: 00000000 nop
 
  0019b838: 00000000 nop
 
  0019b83c: 30420010 andi r2,r2,0x0010
 
  0019b83c: 30420010 andi r2,r2,0x0010
  0019b840: 144000a2 bne r2,r0,0x0019bacc           branch if untargetable
+
  0019b840: 144000a2 bne r2,r0,0x0019bacc Branch if Target is untargetable
  0019b844: 00649021 addu r18,r3,r4
+
  0019b844: 00649021 addu r18,r3,r4 r18 = Unit Data Pointer
  0019b848: 92220e2e lbu r2,0x0e2e(r17)             load acting unit ID
+
 
 +
  0019b848: 92220e2e lbu r2,0x0e2e(r17) Get Caster ID
 
  0019b84c: 00000000 nop
 
  0019b84c: 00000000 nop
  0019b850: 10a2009e beq r5,r2,0x0019bacc           branch if not same unit
+
  0019b850: 10a2009e beq r5,r2,0x0019bacc Branch if Caster = Target
  0019b854: 02402821 addu r5,r18,r0
+
  0019b854: 02402821 addu r5,r18,r0 r5 = Unit Data Pointer
  0019b858: 92240001 lbu r4,0x0001(r17)             load CT
+
  0019b858: 92240001 lbu r4,0x0001(r17) r4 = CT
  0019b85c: 0c067bc9 jal 0x0019ef24 [[Check if Status Should/Can be Added]]
+
  0019b85c: 0c067bc9 jal 0x0019ef24 Check if Status Should/Can be Added
  0019b860: 34060026 ori r6,r0,0x0026
+
  0019b860: 34060026 ori r6,r0,0x0026 Check for Reflect
  0019b864: 10400099 beq r2,r0,0x0019bacc           branch if not inflicting status (stop?)
+
  0019b864: 10400099 beq r2,r0,0x0019bacc Y++ if unit doesn't have Reflect
 
  0019b868: 00000000 nop
 
  0019b868: 00000000 nop
  0019b86c: 92240e49 lbu r4,0x0e49(r17)             load ??
+
 
  0019b870: 0c067c36 jal 0x0019f0d8 [[See if ability should be used based on CT]]
+
  0019b86c: 92240e49 lbu r4,0x0e49(r17) Load Inflictable Statuses
 +
  0019b870: 0c067c36 jal 0x0019f0d8 Check if statuses can be inflicted in time
 
  0019b874: 00000000 nop
 
  0019b874: 00000000 nop
  0019b878: 14400094 bne r2,r0,0x0019bacc
+
  0019b878: 14400094 bne r2,r0,0x0019bacc Branch if none can be inflicted in time
 
  0019b87c: 00000000 nop
 
  0019b87c: 00000000 nop
  0019b880: 92020007 lbu r2,0x0007(r16)            
+
 
 +
  0019b880: 92020007 lbu r2,0x0007(r16) Get Unit AI Vulnerablity status flags
 
  0019b884: 00000000 nop
 
  0019b884: 00000000 nop
 
  0019b888: 30420020 andi r2,r2,0x0020
 
  0019b888: 30420020 andi r2,r2,0x0020
  0019b88c: 10400007 beq r2,r0,0x0019b8ac           branch if not dead unit w/o reraise
+
  0019b88c: 10400007 beq r2,r0,0x0019b8ac Branch if Unit is Dead without Reraise
  0019b890: 26250c74 addiu r5,r17,0x0c74
+
  0019b890: 26250c74 addiu r5,r17,0x0c74 r5 = Point to Coordinates
+
  0019b894: 92300001 lbu r16,0x0001(r17) r16 = CT
  0019b894: 92300001 lbu r16,0x0001(r17)             load CT
+
  0019b898: 0c066722 jal 0x00199c88 Check if Spell CT can land before target's turn?
  0019b898: 0c066722 jal 0x00199c88 [[00199c88 - 00199d1c]]
+
  0019b89c: 02402021 addu r4,r18,r0 r4 = Unit Data Pointer
  0019b89c: 02402021 addu r4,r18,r0
 
 
  0019b8a0: 0050102a slt r2,r2,r16
 
  0019b8a0: 0050102a slt r2,r2,r16
  0019b8a4: 14400089 bne r2,r0,0x0019bacc
+
  0019b8a4: 14400089 bne r2,r0,0x0019bacc Branch if Spell CT is too high
  0019b8a8: 26250c74 addiu r5,r17,0x0c74
+
  0019b8a8: 26250c74 addiu r5,r17,0x0c74 r5 = Point to Coordinates
  0019b8ac: 92240e49 lbu r4,0x0e49(r17)
+
 
  0019b8b0: 34020005 ori r2,r0,0x0005
+
  0019b8ac: 92240e49 lbu r4,0x0e49(r17) Load Inflictable Statuses
  0019b8b4: 0c067ca9 jal 0x0019f2a4 [[Transfer Unit Coordinates to AI]]
+
  0019b8b0: 34020005 ori r2,r0,0x0005 r2 = 0x0005
  0019b8b8: a2220026 sb r2,0x0026(r17)               store ability uses weapon-specific animation?
+
  0019b8b4: 0c067ca9 jal 0x0019f2a4 Transfer Unit Coordinates to AI
  0019b8bc: 92230026 lbu r3,0x0026(r17)
+
  0019b8b8: a2220026 sb r2,0x0026(r17) This is either Inflicted Statuses or Animations
 +
  0019b8bc: 92230026 lbu r3,0x0026(r17) Load ?
 
  0019b8c0: 34020006 ori r2,r0,0x0006
 
  0019b8c0: 34020006 ori r2,r0,0x0006
  0019b8c4: 14620002 bne r3,r2,0x0019b8d0           branch if ability uses target-specific animation?
+
  0019b8c4: 14620002 bne r3,r2,0x0019b8d0 Branch if 5 =/= 6?
 
  0019b8c8: 34040001 ori r4,r0,0x0001
 
  0019b8c8: 34040001 ori r4,r0,0x0001
 
  0019b8cc: 34040003 ori r4,r0,0x0003
 
  0019b8cc: 34040003 ori r4,r0,0x0003
  0019b8d0: 0c06723b jal 0x0019c8ec [[0019c8ec - 0019cb90]]
+
 
 +
  0019b8d0: 0c06723b jal 0x0019c8ec
 
  0019b8d4: 00002821 addu r5,r0,r0
 
  0019b8d4: 00002821 addu r5,r0,r0
 
  0019b8d8: 26240bdc addiu r4,r17,0x0bdc
 
  0019b8d8: 26240bdc addiu r4,r17,0x0bdc
 
  0019b8dc: 26250b4c addiu r5,r17,0x0b4c
 
  0019b8dc: 26250b4c addiu r5,r17,0x0b4c
  0019b8e0: 0c066ac2 jal 0x0019ab08 [[Transfer Halfword Values]]
+
  0019b8e0: 0c066ac2 jal 0x0019ab08 Transfer Halfword Values
 
  0019b8e4: 34060048 ori r6,r0,0x0048
 
  0019b8e4: 34060048 ori r6,r0,0x0048
  0019b8e8: a2200e4a sb r0,0x0e4a(r17)
+
  0019b8e8: a2200e4a sb r0,0x0e4a(r17) Initialize Current Unit ID
  0019b8ec: 92240e4a lbu r4,0x0e4a(r17)                   load unit ID
+
 
 +
<X Loop>
 +
  0019b8ec: 92240e4a lbu r4,0x0e4a(r17) Load Current Unit ID
 
  0019b8f0: 00000000 nop
 
  0019b8f0: 00000000 nop
  0019b8f4: 02241021 addu r2,r17,r4
+
  0019b8f4: 02241021 addu r2,r17,r4 Current Unit AI Pointer
  0019b8f8: 90420c8d lbu r2,0x0c8d(r2)                   load targetable unit list
+
  0019b8f8: 90420c8d lbu r2,0x0c8d(r2) Load Targetable Unit List
 
  0019b8fc: 00000000 nop
 
  0019b8fc: 00000000 nop
  0019b900: 10400069 beq r2,r0,0x0019baa8                 branch if not targetable
+
  0019b900: 10400069 beq r2,r0,0x0019baa8 Next Unit if Current Unit is not targeting any unit? (This unit is fleeing?)
  0019b904: 00000000 nop
+
  0019b904: 00000000 nop
  0019b908: 92220e49 lbu r2,0x0e49(r17)
+
  0019b908: 92220e49 lbu r2,0x0e49(r17) Load ? Unit ID
 
  0019b90c: 00000000 nop
 
  0019b90c: 00000000 nop
  0019b910: 10820065 beq r4,r2,0x0019baa8
+
  0019b910: 10820065 beq r4,r2,0x0019baa8 Next Unit if Unit ID is targeting itself? (This unit is too injured?)
 
  0019b914: 00000000 nop
 
  0019b914: 00000000 nop
  0019b918: 92220e2e lbu r2,0x0e2e(r17)                 load acting unit
+
  0019b918: 92220e2e lbu r2,0x0e2e(r17) Load Caster Unit ID
 
  0019b91c: 00000000 nop
 
  0019b91c: 00000000 nop
  0019b920: 10820061 beq r4,r2,0x0019baa8               branch if unit is acting unit
+
  0019b920: 10820061 beq r4,r2,0x0019baa8 Skip Caster Unit (This unit is myself)
 
  0019b924: 00000000 nop
 
  0019b924: 00000000 nop
  0019b928: 0c067c36 jal 0x0019f0d8 [[See if ability should be used based on CT]]
+
  0019b928: 0c067c36 jal 0x0019f0d8 Check if spell can be used in time
 
  0019b92c: 00000000 nop
 
  0019b92c: 00000000 nop
  0019b930: 1440005d bne r2,r0,0x0019baa8
+
  0019b930: 1440005d bne r2,r0,0x0019baa8 Next Unit if it cannot be used in time
 
  0019b934: 00000000 nop
 
  0019b934: 00000000 nop
  0019b938: 92240e4a lbu r4,0x0e4a(r17)                   load unit id
+
  0019b938: 92240e4a lbu r4,0x0e4a(r17) Reload Current Unit ID
  0019b93c: 0c067976 jal 0x0019e5d8 [[AI Abiltiy Use Decisions]]
+
  0019b93c: 0c067976 jal 0x0019e5d8 AI Ability Use
  0019b940: 00002821 addu r5,r0,r0
+
  0019b940: 00002821 addu r5,r0,r0 Bypass Don't Use on Reflect Check
 
  0019b944: 34030001 ori r3,r0,0x0001
 
  0019b944: 34030001 ori r3,r0,0x0001
  0019b948: 14430057 bne r2,r3,0x0019baa8
+
  0019b948: 14430057 bne r2,r3,0x0019baa8 Next Unit if Current Ability is not offensive
 
  0019b94c: 00000000 nop
 
  0019b94c: 00000000 nop
  0019b950: 92230e4a lbu r3,0x0e4a(r17)
+
 
  0019b954: 92250e3a lbu r5,0x0e3a(r17)                     load map max X
+
  0019b950: 92230e4a lbu r3,0x0e4a(r17) Reload Current Unit ID
  0019b958: 000310c0 sll r2,r3,0x03
+
  0019b954: 92250e3a lbu r5,0x0e3a(r17) Load Max Map X
  0019b95c: 00431023 subu r2,r2,r3
+
  0019b958: 000310c0 sll r2,r3,0x03 ID * 8
  0019b960: 00021180 sll r2,r2,0x06
+
  0019b95c: 00431023 subu r2,r2,r3 ID * 7
  0019b964: 92430047 lbu r3,0x0047(r18)                       load X coordinate
+
  0019b960: 00021180 sll r2,r2,0x06 ID * 0x1c0
 +
  0019b964: 92430047 lbu r3,0x0047(r18) Load Caster X
 
  0019b968: 3c018019 lui r1,0x8019
 
  0019b968: 3c018019 lui r1,0x8019
 
  0019b96c: 00220821 addu r1,r1,r2
 
  0019b96c: 00220821 addu r1,r1,r2
  0019b970: 90220913 lbu r2,0x0913(r1)                       load X coordinate
+
  0019b970: 90220913 lbu r2,0x0913(r1) Load Current Unit X (1908cc + 47)
  0019b974: 00031840 sll r3,r3,0x01                         X coordinate*2
+
  0019b974: 00031840 sll r3,r3,0x01 Caster X * 2
  0019b978: 00621823 subu r3,r3,r2                           X coordinate
+
  0019b978: 00621823 subu r3,r3,r2 Caster (X * 2) - Current X
  0019b97c: a2230018 sb r3,0x0018(r17)                       store acting unit's X Coordinate
+
  0019b97c: a2230018 sb r3,0x0018(r17) Save X distance
  0019b980: 92440048 lbu r4,0x0048(r18)                     load Y coordinate
+
  0019b980: 92440048 lbu r4,0x0048(r18) Load Caster Y
  0019b984: 92230e4a lbu r3,0x0e4a(r17)                     load Y coordinate
+
  0019b984: 92230e4a lbu r3,0x0e4a(r17) Reload Current Unit ID
  0019b988: 00042040 sll r4,r4,0x01
+
  0019b988: 00042040 sll r4,r4,0x01 Caster Y * 2
  0019b98c: 000310c0 sll r2,r3,0x03
+
  0019b98c: 000310c0 sll r2,r3,0x03 ID * 8
  0019b990: 00431023 subu r2,r2,r3
+
  0019b990: 00431023 subu r2,r2,r3 ID * 7
  0019b994: 00021180 sll r2,r2,0x06
+
  0019b994: 00021180 sll r2,r2,0x06 ID * 1c0
 
  0019b998: 3c018019 lui r1,0x8019
 
  0019b998: 3c018019 lui r1,0x8019
 
  0019b99c: 00220821 addu r1,r1,r2
 
  0019b99c: 00220821 addu r1,r1,r2
  0019b9a0: 90230914 lbu r3,0x0914(r1)
+
  0019b9a0: 90230914 lbu r3,0x0914(r1) Load Current Y
  0019b9a4: 92220018 lbu r2,0x0018(r17)
+
  0019b9a4: 92220018 lbu r2,0x0018(r17) Load X Distance
  0019b9a8: 00832023 subu r4,r4,r3
+
  0019b9a8: 00832023 subu r4,r4,r3 Caster (Y * 2) - Current Y
  0019b9ac: 0045102b sltu r2,r2,r5
+
  0019b9ac: 0045102b sltu r2,r2,r5
  0019b9b0: 1040003d beq r2,r0,0x0019baa8
+
  0019b9b0: 1040003d beq r2,r0,0x0019baa8 Next Unit if X Distance is greater than Max X
  0019b9b4: a224001a sb r4,0x001a(r17)                         store Y coordinate
+
  0019b9b4: a224001a sb r4,0x001a(r17) Save Y Distance
  0019b9b8: 9222001a lbu r2,0x001a(r17)
+
  0019b9b8: 9222001a lbu r2,0x001a(r17) Load Y Distance
  0019b9bc: 92230e3b lbu r3,0x0e3b(r17)
+
  0019b9bc: 92230e3b lbu r3,0x0e3b(r17) Load Max Y
 
  0019b9c0: 00000000 nop
 
  0019b9c0: 00000000 nop
  0019b9c4: 0043102b sltu r2,r2,r3
+
  0019b9c4: 0043102b sltu r2,r2,r3
  0019b9c8: 10400037 beq r2,r0,0x0019baa8
+
  0019b9c8: 10400037 beq r2,r0,0x0019baa8 Next Unit if Y Distance is greater than Max Y
 
  0019b9cc: 00000000 nop
 
  0019b9cc: 00000000 nop
  0019b9d0: a2200e4b sb r0,0x0e4b(r17)
+
  0019b9d0: a2200e4b sb r0,0x0e4b(r17) Initialize Map Level
  0019b9d4: 92230e2d lbu r3,0x0e2d(r17)
+
 
  0019b9d8: 92220e4b lbu r2,0x0e4b(r17)
+
<Map Level Loop>
  0019b9dc: 000320c0 sll r4,r3,0x03
+
  0019b9d4: 92230e2d lbu r3,0x0e2d(r17) Load ? ID
  0019b9e0: 00832021 addu r4,r4,r3
+
  0019b9d8: 92220e4b lbu r2,0x0e4b(r17) Load Map Level
  0019b9e4: 000420c0 sll r4,r4,0x03
+
  0019b9dc: 000320c0 sll r4,r3,0x03 ID * 8
  0019b9e8: 00912021 addu r4,r4,r17
+
  0019b9e0: 00832021 addu r4,r4,r3 ID * 9
  0019b9ec: 92230e4b lbu r3,0x0e4b(r17)
+
  0019b9e4: 000420c0 sll r4,r4,0x03 ID * 48
  0019b9f0: 24840a74 addiu r4,r4,0x0a74
+
  0019b9e8: 00912021 addu r4,r4,r17 ? Unit AI Pointer
  0019b9f4: a2220019 sb r2,0x0019(r17)                   store map level
+
  0019b9ec: 92230e4b lbu r3,0x0e4b(r17) Load Secondary Target ID?
  0019b9f8: 000310c0 sll r2,r3,0x03
+
  0019b9f0: 24840a74 addiu r4,r4,0x0a74 Point to Coordinates of Interest
  0019b9fc: 00431021 addu r2,r2,r3
+
  0019b9f4: a2220019 sb r2,0x0019(r17) Save Map Level
  0019ba00: 00021080 sll r2,r2,0x02
+
  0019b9f8: 000310c0 sll r2,r3,0x03 ID * 8
  0019ba04: 9223001a lbu r3,0x001a(r17)
+
  0019b9fc: 00431021 addu r2,r2,r3 ID * 9
  0019ba08: 00441021 addu r2,r2,r4
+
  0019ba00: 00021080 sll r2,r2,0x02 ID * 24
  0019ba0c: 00031840 sll r3,r3,0x01
+
  0019ba04: 9223001a lbu r3,0x001a(r17) Load Caster Y
  0019ba10: 00621821 addu r3,r3,r2
+
  0019ba08: 00441021 addu r2,r2,r4 Get Current Unit's Coordinates of Interest
  0019ba14: 94620000 lhu r2,0x0000(r3)
+
  0019ba0c: 00031840 sll r3,r3,0x01 Caster Y * 2
  0019ba18: 92230018 lbu r3,0x0018(r17)                   X coordinate
+
  0019ba10: 00621821 addu r3,r3,r2 Pointer to Caster's Row on that map
 +
  0019ba14: 94620000 lhu r2,0x0000(r3) Load Unit Row Coordinate Value
 +
  0019ba18: 92230018 lbu r3,0x0018(r17) Load Caster X
 
  0019ba1c: 00000000 nop
 
  0019ba1c: 00000000 nop
  0019ba20: 00621004 sllv r2,r2,r3
+
  0019ba20: 00621004 sllv r2,r2,r3 Row Value * X
 
  0019ba24: 30428000 andi r2,r2,0x8000
 
  0019ba24: 30428000 andi r2,r2,0x8000
  0019ba28: 10400016 beq r2,r0,0x0019ba84
+
  0019ba28: 10400016 beq r2,r0,0x0019ba84 Branch if not in Current Unit's Coordinates of Interest (You eyeballing me, son?)
  0019ba2c: 00000000 nop
+
  0019ba2c: 00000000 nop
  0019ba30: 0c066ec8 jal 0x0019bb20 [[0019bb20 - 0019bbb8]]
+
 
 +
  0019ba30: 0c066ec8 jal 0x0019bb20 Units are where they are supposed to be/Unit Exists check
 
  0019ba34: 00000000 nop
 
  0019ba34: 00000000 nop
 
  0019ba38: 34020001 ori r2,r0,0x0001
 
  0019ba38: 34020001 ori r2,r0,0x0001
  0019ba3c: a2220014 sb r2,0x0014(r17)
+
  0019ba3c: a2220014 sb r2,0x0014(r17) Targeting a Unit = True?
  0019ba40: a2200ed8 sb r0,0x0ed8(r17)
+
  0019ba40: a2200ed8 sb r0,0x0ed8(r17) Clear ?
  0019ba44: 0c066d3d jal 0x0019b4f4 [[0019b4f4 - 0019b6ac]]
+
<Mini Loop>
  0019ba48: 26240e30 addiu r4,r17,0x0e30
+
  0019ba44: 0c066d3d jal 0x0019b4f4 Water Depth/Monster Skill/Elemental Check
  0019ba4c: 10400006 beq r2,r0,0x0019ba68
+
  0019ba48: 26240e30 addiu r4,r17,0x0e30 Point Unit AI to ?
 +
  0019ba4c: 10400006 beq r2,r0,0x0019ba68 Skip next routine if Routine was false
 
  0019ba50: 00000000 nop
 
  0019ba50: 00000000 nop
  0019ba54: 0c067367 jal 0x0019cd9c [[0019cd9c - 0019d214]]
+
 
 +
  0019ba54: 0c067367 jal 0x0019cd9c
 
  0019ba58: 00000000 nop
 
  0019ba58: 00000000 nop
 
  0019ba5c: 2403ffff addiu r3,r0,0xffff
 
  0019ba5c: 2403ffff addiu r3,r0,0xffff
  0019ba60: 10430028 beq r2,r3,0x0019bb04
+
  0019ba60: 10430028 beq r2,r3,0x0019bb04 Break out of entire routine; exit and return -1 if routine failed
 
  0019ba64: 2402ffff addiu r2,r0,0xffff
 
  0019ba64: 2402ffff addiu r2,r0,0xffff
  0019ba68: 92220ed8 lbu r2,0x0ed8(r17)
+
 
 +
  0019ba68: 92220ed8 lbu r2,0x0ed8(r17) Load Mini Loop Counter
 
  0019ba6c: 00000000 nop
 
  0019ba6c: 00000000 nop
  0019ba70: 14400004 bne r2,r0,0x0019ba84
+
  0019ba70: 14400004 bne r2,r0,0x0019ba84 Branch if True
 
  0019ba74: 34020001 ori r2,r0,0x0001
 
  0019ba74: 34020001 ori r2,r0,0x0001
  0019ba78: a2220ed8 sb r2,0x0ed8(r17)
+
 
  0019ba7c: 08066e91 j 0x0019ba44
+
  0019ba78: a2220ed8 sb r2,0x0ed8(r17) Mini Loop Counter = True
  0019ba80: a2200014 sb r0,0x0014(r17)
+
  0019ba7c: 08066e91 j 0x0019ba44 Loop back to...?
  0019ba84: 92220e4b lbu r2,0x0e4b(r17)
+
  0019ba80: a2200014 sb r0,0x0014(r17) Clear ?
 +
</Mini Loop>
 +
  0019ba84: 92220e4b lbu r2,0x0e4b(r17) Load Map Level Counter
 
  0019ba88: 00000000 nop
 
  0019ba88: 00000000 nop
  0019ba8c: 24420001 addiu r2,r2,0x0001
+
  0019ba8c: 24420001 addiu r2,r2,0x0001 Map Level Counter++
  0019ba90: a2220e4b sb r2,0x0e4b(r17)
+
  0019ba90: a2220e4b sb r2,0x0e4b(r17) Save Counter
  0019ba94: 92220e4b lbu r2,0x0e4b(r17)
+
  0019ba94: 92220e4b lbu r2,0x0e4b(r17) Reload Map Level Counter
 
  0019ba98: 00000000 nop
 
  0019ba98: 00000000 nop
 
  0019ba9c: 2c420002 sltiu r2,r2,0x0002
 
  0019ba9c: 2c420002 sltiu r2,r2,0x0002
  0019baa0: 1440ffcc bne r2,r0,0x0019b9d4
+
  0019baa0: 1440ffcc bne r2,r0,0x0019b9d4 Once for Low Tiles, and once for High tiles
 
  0019baa4: 00000000 nop
 
  0019baa4: 00000000 nop
  0019baa8: 92220e4a lbu r2,0x0e4a(r17)
+
</Map Level Loop>
 +
 
 +
  0019baa8: 92220e4a lbu r2,0x0e4a(r17) Load X Counter
 
  0019baac: 00000000 nop
 
  0019baac: 00000000 nop
  0019bab0: 24420001 addiu r2,r2,0x0001
+
  0019bab0: 24420001 addiu r2,r2,0x0001 X Counter++
  0019bab4: a2220e4a sb r2,0x0e4a(r17)
+
  0019bab4: a2220e4a sb r2,0x0e4a(r17) Save Counter
  0019bab8: 92220e4a lbu r2,0x0e4a(r17)
+
  0019bab8: 92220e4a lbu r2,0x0e4a(r17) Reload X Counter
 
  0019babc: 00000000 nop
 
  0019babc: 00000000 nop
 
  0019bac0: 2c420015 sltiu r2,r2,0x0015
 
  0019bac0: 2c420015 sltiu r2,r2,0x0015
  0019bac4: 1440ff89 bne r2,r0,0x0019b8ec
+
  0019bac4: 1440ff89 bne r2,r0,0x0019b8ec Loop for each unit
 
  0019bac8: 00000000 nop
 
  0019bac8: 00000000 nop
 +
</X Loop>
  
  0019bacc: 92220e49 lbu r2,0x0e49(r17)
+
  0019bacc: 92220e49 lbu r2,0x0e49(r17) Load Y Row Counter
 
  0019bad0: 00000000 nop
 
  0019bad0: 00000000 nop
  0019bad4: 24420001 addiu r2,r2,0x0001
+
  0019bad4: 24420001 addiu r2,r2,0x0001 Y Row Counter++
  0019bad8: a2220e49 sb r2,0x0e49(r17)
+
  0019bad8: a2220e49 sb r2,0x0e49(r17) Save Counter
  0019badc: 92220e49 lbu r2,0x0e49(r17)
+
  0019badc: 92220e49 lbu r2,0x0e49(r17) Reload Y Row Counter
 
  0019bae0: 00000000 nop
 
  0019bae0: 00000000 nop
  0019bae4: 2c420015 sltiu r2,r2,0x0015
+
  0019bae4: 2c420015 sltiu r2,r2,0x0015
  0019bae8: 1440ff49 bne r2,r0,0x0019b810
+
  0019bae8: 1440ff49 bne r2,r0,0x0019b810 Loop for each unit
 
  0019baec: 00000000 nop
 
  0019baec: 00000000 nop
  0019baf0: 0c067c96 jal 0x0019f258 [[Store units coordinates]]
+
</Y Loop>
 +
 
 +
  0019baf0: 0c067c96 jal 0x0019f258
 
  0019baf4: 26240e30 addiu r4,r17,0x0e30
 
  0019baf4: 26240e30 addiu r4,r17,0x0e30
  0019baf8: 0c065bf1 jal 0x00196fc4 [[00196fc4 - 001970b8]]
+
 
 +
  0019baf8: 0c065bf1 jal 0x00196fc4
 
  0019bafc: a2200015 sb r0,0x0015(r17)
 
  0019bafc: a2200015 sb r0,0x0015(r17)
 +
 
  0019bb00: 00001021 addu r2,r0,r0
 
  0019bb00: 00001021 addu r2,r0,r0
 
  0019bb04: 8fbf001c lw r31,0x001c(r29)
 
  0019bb04: 8fbf001c lw r31,0x001c(r29)
Line 221: Line 244:
 
  0019bb18: 03e00008 jr r31
 
  0019bb18: 03e00008 jr r31
 
  0019bb1c: 00000000 nop
 
  0019bb1c: 00000000 nop
</font>
 

Latest revision as of 01:25, 9 March 2017

0019b7b8: 3c02801a lui r2,0x801a
0019b7bc: 90420d7b lbu r2,0x0d7b(r2)				If Unit Acted this Turn
0019b7c0: 27bdffe0 addiu r29,r29,0xffe0
0019b7c4: afb10014 sw r17,0x0014(r29)
0019b7c8: 3c11801a lui r17,0x801a
0019b7cc: 2631f3c4 addiu r17,r17,0xf3c4				r17 = Unit AI Pointer
0019b7d0: afbf001c sw r31,0x001c(r29)
0019b7d4: afb20018 sw r18,0x0018(r29)
0019b7d8: 1440009e bne r2,r0,0x0019ba54				Branch if acted already?
0019b7dc: afb00010 sw r16,0x0010(r29)
0019b7e0: 3c04fdff lui r4,0xfdff
0019b7e4: 3484ffff ori r4,r4,0xffff					r4 = -02000000
0019b7e8: 3c03801a lui r3,0x801a
0019b7ec: 8c630078 lw r3,0x0078(r3)					r3 = Load ? (Tracking?)
0019b7f0: 34020001 ori r2,r0,0x0001					r2 = True
0019b7f4: 3c01801a lui r1,0x801a
0019b7f8: a022f3d9 sb r2,-0x0c27(r1)				? = True
0019b7fc: 3c01801a lui r1,0x801a
0019b800: a020020d sb r0,0x020d(r1)					Clear ?
0019b804: 00641824 and r3,r3,r4						Modify ?				
0019b808: 3c01801a lui r1,0x801a
0019b80c: ac230078 sw r3,0x0078(r1)					Save Tracking?
<Y Loop>
0019b810: 92250e49 lbu r5,0x0e49(r17)				r5 = Unit ID
0019b814: 3c048019 lui r4,0x8019
0019b818: 248408cc addiu r4,r4,0x08cc				r4 = Unit Data
0019b81c: 000518c0 sll r3,r5,0x03					Unit ID * 8
0019b820: 00651823 subu r3,r3,r5					Unit ID * 7
0019b824: 00031980 sll r3,r3,0x06					Unit ID * 0x1c0
0019b828: 00051100 sll r2,r5,0x04					Unit ID * 0x10
0019b82c: 2442182c addiu r2,r2,0x182c				Unit ID + 182c
0019b830: 02228021 addu r16,r17,r2					r16 = Unit AI Decision Data
0019b834: 92020007 lbu r2,0x0007(r16)				Get Unit AI Vulnerablity status flags	
0019b838: 00000000 nop
0019b83c: 30420010 andi r2,r2,0x0010
0019b840: 144000a2 bne r2,r0,0x0019bacc				Branch if Target is untargetable
0019b844: 00649021 addu r18,r3,r4					r18 = Unit Data Pointer
0019b848: 92220e2e lbu r2,0x0e2e(r17)				Get Caster ID
0019b84c: 00000000 nop
0019b850: 10a2009e beq r5,r2,0x0019bacc				Branch if Caster = Target
0019b854: 02402821 addu r5,r18,r0					r5 = Unit Data Pointer
0019b858: 92240001 lbu r4,0x0001(r17)				r4 = CT
0019b85c: 0c067bc9 jal 0x0019ef24					Check if Status Should/Can be Added
0019b860: 34060026 ori r6,r0,0x0026					Check for Reflect
0019b864: 10400099 beq r2,r0,0x0019bacc				Y++ if unit doesn't have Reflect
0019b868: 00000000 nop
0019b86c: 92240e49 lbu r4,0x0e49(r17)				Load Inflictable Statuses
0019b870: 0c067c36 jal 0x0019f0d8					Check if statuses can be inflicted in time
0019b874: 00000000 nop
0019b878: 14400094 bne r2,r0,0x0019bacc				Branch if none can be inflicted in time
0019b87c: 00000000 nop
0019b880: 92020007 lbu r2,0x0007(r16)				Get Unit AI Vulnerablity status flags
0019b884: 00000000 nop
0019b888: 30420020 andi r2,r2,0x0020
0019b88c: 10400007 beq r2,r0,0x0019b8ac				Branch if Unit is Dead without Reraise
0019b890: 26250c74 addiu r5,r17,0x0c74				r5 = Point to Coordinates
0019b894: 92300001 lbu r16,0x0001(r17)				r16 = CT
0019b898: 0c066722 jal 0x00199c88					Check if Spell CT can land before target's turn?
0019b89c: 02402021 addu r4,r18,r0					r4 = Unit Data Pointer
0019b8a0: 0050102a slt r2,r2,r16
0019b8a4: 14400089 bne r2,r0,0x0019bacc				Branch if Spell CT is too high
0019b8a8: 26250c74 addiu r5,r17,0x0c74				r5 = Point to Coordinates
0019b8ac: 92240e49 lbu r4,0x0e49(r17)				Load Inflictable Statuses
0019b8b0: 34020005 ori r2,r0,0x0005					r2 = 0x0005
0019b8b4: 0c067ca9 jal 0x0019f2a4					Transfer Unit Coordinates to AI
0019b8b8: a2220026 sb r2,0x0026(r17)				This is either Inflicted Statuses or Animations
0019b8bc: 92230026 lbu r3,0x0026(r17)				Load ?
0019b8c0: 34020006 ori r2,r0,0x0006
0019b8c4: 14620002 bne r3,r2,0x0019b8d0				Branch if 5 =/= 6?
0019b8c8: 34040001 ori r4,r0,0x0001
0019b8cc: 34040003 ori r4,r0,0x0003
0019b8d0: 0c06723b jal 0x0019c8ec		
0019b8d4: 00002821 addu r5,r0,r0
0019b8d8: 26240bdc addiu r4,r17,0x0bdc
0019b8dc: 26250b4c addiu r5,r17,0x0b4c
0019b8e0: 0c066ac2 jal 0x0019ab08						Transfer Halfword Values
0019b8e4: 34060048 ori r6,r0,0x0048
0019b8e8: a2200e4a sb r0,0x0e4a(r17)				Initialize Current Unit ID
<X Loop>
0019b8ec: 92240e4a lbu r4,0x0e4a(r17)				Load Current Unit ID
0019b8f0: 00000000 nop
0019b8f4: 02241021 addu r2,r17,r4					Current Unit AI Pointer
0019b8f8: 90420c8d lbu r2,0x0c8d(r2)				Load Targetable Unit List
0019b8fc: 00000000 nop
0019b900: 10400069 beq r2,r0,0x0019baa8				Next Unit if Current Unit is not targeting any unit? (This unit is fleeing?)
0019b904: 00000000 nop								
0019b908: 92220e49 lbu r2,0x0e49(r17)				Load ? Unit ID
0019b90c: 00000000 nop
0019b910: 10820065 beq r4,r2,0x0019baa8				Next Unit if Unit ID is targeting itself? (This unit is too injured?)
0019b914: 00000000 nop
0019b918: 92220e2e lbu r2,0x0e2e(r17)				Load Caster Unit ID
0019b91c: 00000000 nop
0019b920: 10820061 beq r4,r2,0x0019baa8				Skip Caster Unit (This unit is myself)
0019b924: 00000000 nop
0019b928: 0c067c36 jal 0x0019f0d8					Check if spell can be used in time
0019b92c: 00000000 nop
0019b930: 1440005d bne r2,r0,0x0019baa8				Next Unit if it cannot be used in time
0019b934: 00000000 nop
0019b938: 92240e4a lbu r4,0x0e4a(r17)				Reload Current Unit ID		
0019b93c: 0c067976 jal 0x0019e5d8					AI Ability Use
0019b940: 00002821 addu r5,r0,r0					Bypass Don't Use on Reflect Check
0019b944: 34030001 ori r3,r0,0x0001
0019b948: 14430057 bne r2,r3,0x0019baa8				Next Unit if Current Ability is not offensive
0019b94c: 00000000 nop
0019b950: 92230e4a lbu r3,0x0e4a(r17)				Reload Current Unit ID
0019b954: 92250e3a lbu r5,0x0e3a(r17)				Load Max Map X
0019b958: 000310c0 sll r2,r3,0x03					ID * 8
0019b95c: 00431023 subu r2,r2,r3					ID * 7
0019b960: 00021180 sll r2,r2,0x06					ID * 0x1c0
0019b964: 92430047 lbu r3,0x0047(r18)				Load Caster X
0019b968: 3c018019 lui r1,0x8019
0019b96c: 00220821 addu r1,r1,r2
0019b970: 90220913 lbu r2,0x0913(r1)				Load Current Unit X (1908cc + 47)
0019b974: 00031840 sll r3,r3,0x01					Caster X * 2
0019b978: 00621823 subu r3,r3,r2					Caster (X * 2) - Current X
0019b97c: a2230018 sb r3,0x0018(r17)				Save X distance
0019b980: 92440048 lbu r4,0x0048(r18)				Load Caster Y
0019b984: 92230e4a lbu r3,0x0e4a(r17)				Reload Current Unit ID
0019b988: 00042040 sll r4,r4,0x01					Caster Y * 2
0019b98c: 000310c0 sll r2,r3,0x03					ID * 8
0019b990: 00431023 subu r2,r2,r3					ID * 7
0019b994: 00021180 sll r2,r2,0x06					ID * 1c0
0019b998: 3c018019 lui r1,0x8019
0019b99c: 00220821 addu r1,r1,r2
0019b9a0: 90230914 lbu r3,0x0914(r1)				Load Current Y
0019b9a4: 92220018 lbu r2,0x0018(r17)				Load X Distance
0019b9a8: 00832023 subu r4,r4,r3					Caster (Y * 2) - Current Y
0019b9ac: 0045102b sltu r2,r2,r5					
0019b9b0: 1040003d beq r2,r0,0x0019baa8				Next Unit if X Distance is greater than Max X
0019b9b4: a224001a sb r4,0x001a(r17)				Save Y Distance
0019b9b8: 9222001a lbu r2,0x001a(r17)				Load Y Distance
0019b9bc: 92230e3b lbu r3,0x0e3b(r17)				Load Max Y
0019b9c0: 00000000 nop
0019b9c4: 0043102b sltu r2,r2,r3					
0019b9c8: 10400037 beq r2,r0,0x0019baa8				Next Unit if Y Distance is greater than Max Y
0019b9cc: 00000000 nop
0019b9d0: a2200e4b sb r0,0x0e4b(r17)				Initialize Map Level
<Map Level Loop>
0019b9d4: 92230e2d lbu r3,0x0e2d(r17)				Load ? ID
0019b9d8: 92220e4b lbu r2,0x0e4b(r17)				Load Map Level
0019b9dc: 000320c0 sll r4,r3,0x03					ID * 8
0019b9e0: 00832021 addu r4,r4,r3					ID * 9
0019b9e4: 000420c0 sll r4,r4,0x03					ID * 48
0019b9e8: 00912021 addu r4,r4,r17					? Unit AI Pointer
0019b9ec: 92230e4b lbu r3,0x0e4b(r17)				Load Secondary Target ID?
0019b9f0: 24840a74 addiu r4,r4,0x0a74				Point to Coordinates of Interest
0019b9f4: a2220019 sb r2,0x0019(r17)				Save Map Level
0019b9f8: 000310c0 sll r2,r3,0x03					ID * 8
0019b9fc: 00431021 addu r2,r2,r3					ID * 9
0019ba00: 00021080 sll r2,r2,0x02					ID * 24
0019ba04: 9223001a lbu r3,0x001a(r17)				Load Caster Y
0019ba08: 00441021 addu r2,r2,r4					Get Current Unit's Coordinates of Interest
0019ba0c: 00031840 sll r3,r3,0x01					Caster Y * 2
0019ba10: 00621821 addu r3,r3,r2					Pointer to Caster's Row on that map
0019ba14: 94620000 lhu r2,0x0000(r3)				Load Unit Row Coordinate Value
0019ba18: 92230018 lbu r3,0x0018(r17)				Load Caster X
0019ba1c: 00000000 nop
0019ba20: 00621004 sllv r2,r2,r3					Row Value * X
0019ba24: 30428000 andi r2,r2,0x8000
0019ba28: 10400016 beq r2,r0,0x0019ba84				Branch if not in Current Unit's Coordinates of Interest (You eyeballing me, son?)
0019ba2c: 00000000 nop								
0019ba30: 0c066ec8 jal 0x0019bb20					Units are where they are supposed to be/Unit Exists check
0019ba34: 00000000 nop
0019ba38: 34020001 ori r2,r0,0x0001
0019ba3c: a2220014 sb r2,0x0014(r17)				Targeting a Unit = True?
0019ba40: a2200ed8 sb r0,0x0ed8(r17)				Clear ?
<Mini Loop>
0019ba44: 0c066d3d jal 0x0019b4f4					Water Depth/Monster Skill/Elemental Check
0019ba48: 26240e30 addiu r4,r17,0x0e30				Point Unit AI to ?
0019ba4c: 10400006 beq r2,r0,0x0019ba68				Skip next routine if Routine was false
0019ba50: 00000000 nop
0019ba54: 0c067367 jal 0x0019cd9c
0019ba58: 00000000 nop
0019ba5c: 2403ffff addiu r3,r0,0xffff
0019ba60: 10430028 beq r2,r3,0x0019bb04				Break out of entire routine; exit and return -1 if routine failed
0019ba64: 2402ffff addiu r2,r0,0xffff
0019ba68: 92220ed8 lbu r2,0x0ed8(r17)				Load Mini Loop Counter
0019ba6c: 00000000 nop
0019ba70: 14400004 bne r2,r0,0x0019ba84				Branch if True
0019ba74: 34020001 ori r2,r0,0x0001
0019ba78: a2220ed8 sb r2,0x0ed8(r17)				Mini Loop Counter = True
0019ba7c: 08066e91 j 0x0019ba44						Loop back to...?
0019ba80: a2200014 sb r0,0x0014(r17)				Clear ?
</Mini Loop>
0019ba84: 92220e4b lbu r2,0x0e4b(r17)				Load Map Level Counter
0019ba88: 00000000 nop
0019ba8c: 24420001 addiu r2,r2,0x0001				Map Level Counter++
0019ba90: a2220e4b sb r2,0x0e4b(r17)				Save Counter
0019ba94: 92220e4b lbu r2,0x0e4b(r17)				Reload Map Level Counter
0019ba98: 00000000 nop
0019ba9c: 2c420002 sltiu r2,r2,0x0002
0019baa0: 1440ffcc bne r2,r0,0x0019b9d4				Once for Low Tiles, and once for High tiles
0019baa4: 00000000 nop
</Map Level Loop>
0019baa8: 92220e4a lbu r2,0x0e4a(r17)			Load X Counter
0019baac: 00000000 nop
0019bab0: 24420001 addiu r2,r2,0x0001			X Counter++
0019bab4: a2220e4a sb r2,0x0e4a(r17)			Save Counter
0019bab8: 92220e4a lbu r2,0x0e4a(r17)			Reload X Counter
0019babc: 00000000 nop
0019bac0: 2c420015 sltiu r2,r2,0x0015
0019bac4: 1440ff89 bne r2,r0,0x0019b8ec			Loop for each unit
0019bac8: 00000000 nop
</X Loop>
0019bacc: 92220e49 lbu r2,0x0e49(r17)			Load Y Row Counter
0019bad0: 00000000 nop
0019bad4: 24420001 addiu r2,r2,0x0001			Y Row Counter++
0019bad8: a2220e49 sb r2,0x0e49(r17)			Save Counter
0019badc: 92220e49 lbu r2,0x0e49(r17)			Reload Y Row Counter
0019bae0: 00000000 nop
0019bae4: 2c420015 sltiu r2,r2,0x0015			
0019bae8: 1440ff49 bne r2,r0,0x0019b810			Loop for each unit
0019baec: 00000000 nop
</Y Loop>
0019baf0: 0c067c96 jal 0x0019f258
0019baf4: 26240e30 addiu r4,r17,0x0e30
0019baf8: 0c065bf1 jal 0x00196fc4
0019bafc: a2200015 sb r0,0x0015(r17)
0019bb00: 00001021 addu r2,r0,r0
0019bb04: 8fbf001c lw r31,0x001c(r29)
0019bb08: 8fb20018 lw r18,0x0018(r29)
0019bb0c: 8fb10014 lw r17,0x0014(r29)
0019bb10: 8fb00010 lw r16,0x0010(r29)
0019bb14: 27bd0020 addiu r29,r29,0x0020
0019bb18: 03e00008 jr r31
0019bb1c: 00000000 nop