AI Targeting Matrix Analysis (0019b7b8)

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
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