Difference between revisions of "Some height/Map coordinate calculation for all units"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with "<font face='Courier New'> 0019cb94: 27bdffd8 addiu r29,r29,0xffd8 0019cb98: 00002021 addu r4,r0,r0 0019cb9c: afb10014 sw r17,0x0014(r29) 0019cba0: 3c11801a lui r17,0x801...")
 
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - Some height/Map coordinate calculation for all units
   
+
Reset AI Table 0xb4c then enable Tile adjacent to an Ally with Monster Skill in AI 0xb4c Table (if delta Height is less than 2)
  0019cb94: 27bdffd8 addiu r29,r29,0xffd8
+
  '''Bug ?''' The last loop checking both elevation seems to not doing it. The way the counter is handled seems wrong to me.
  0019cb98: 00002021 addu r4,r0,r0
+
------------------------------------------------------------------------------------------
  0019cb9c: afb10014 sw r17,0x0014(r29)
+
Parameter : Nothing
  0019cba0: 3c11801a lui r17,0x801a
+
Return : Nothing
  0019cba4: 2631f3c4 addiu r17,r17,0xf3c4
+
------------------------------------------------------------------------------------------
  0019cba8: 02201821 addu r3,r17,r0
+
  0019cb94: 27bdffd8 addiu r29,r29,-0x0028    |
  0019cbac: afbf0024 sw r31,0x0024(r29)
+
  0019cb98: 00002021 addu r4,r0,r0             |{{f/std|Initialize Y counter}}
  0019cbb0: afb40020 sw r20,0x0020(r29)
+
  0019cb9c: afb10014 sw r17,0x0014(r29)       |
  0019cbb4: afb3001c sw r19,0x001c(r29)
+
  0019cba0: 3c11801a lui r17,0x801a           |
  0019cbb8: afb20018 sw r18,0x0018(r29)
+
  0019cba4: 2631f3c4 addiu r17,r17,-0x0c3c    |{{f/adr|8019f3c4}}
  0019cbbc: afb00010 sw r16,0x0010(r29)
+
  0019cba8: 02201821 addu r3,r17,r0           |{{f/adr|Prepare Dynamic pointer to 0x8019f3c4 (1 halfword per iteration)}}
  0019cbc0: a4600b4c sh r0,0x0b4c(r3)
+
  0019cbac: afbf0024 sw r31,0x0024(r29)       |
  0019cbc4: a4600b70 sh r0,0x0b70(r3)
+
  0019cbb0: afb40020 sw r20,0x0020(r29)       |
  0019cbc8: 24840001 addiu r4,r4,0x0001
+
  0019cbb4: afb3001c sw r19,0x001c(r29)       |
  0019cbcc: 28820012 slti r2,r4,0x0012
+
  0019cbb8: afb20018 sw r18,0x0018(r29)       |
  0019cbd0: 1440fffb bne r2,r0,0x0019cbc0
+
  0019cbbc: afb00010 sw r16,0x0010(r29)       |
  0019cbd4: 24630002 addiu r3,r3,0x0002
+
                                            {{f/bloop|LOOP - Initialize AI 0xab4c}}
  0019cbd8: 00009821 addu r19,r0,r0
+
  0019cbc0: a4600b4c sh r0,0x0b4c(r3)             |{{f/store|Initialize AI 0xb4c}}
  0019cbdc: 34148000 ori r20,r0,0x8000
+
  0019cbc4: a4600b70 sh r0,0x0b70(r3)             |{{f/store|Initialize AI 0xb4c}} {{f/std| High Elevation}}
  0019cbe0: 00009021 addu r18,r0,r0
+
  0019cbc8: 24840001 addiu r4,r4,0x0001           |{{f/std|Y counter}}
  0019cbe4: 3c028019 lui r2,0x8019
+
  0019cbcc: 28820012 slti r2,r4,0x0012             |
  0019cbe8: 244208cc addiu r2,r2,0x08cc
+
  0019cbd0: 1440fffb bne r2,r0,0x0019cbc0     {{f/eloop|Loop 0x12 times}}
  0019cbec: 02428021 addu r16,r18,r2
+
  0019cbd4: 24630002 addiu r3,r3,0x0002           |{{f/std|Halfword offset}}
  0019cbf0: 92030001 lbu r3,0x0001(r16)
+
  0019cbd8: 00009821 addu r19,r0,r0           |{{f/std|Initialize Unit counter}}
  0019cbf4: 340200ff ori r2,r0,0x00ff
+
  0019cbdc: 34148000 ori r20,r0,0x8000         |{{f/std|Prepare Bitmask base}}
  0019cbf8: 1062005b beq r3,r2,0x0019cd68
+
  0019cbe0: 00009021 addu r18,r0,r0           |{{f/std|Initialize Unit offset for battle data}}
  0019cbfc: 00000000 nop
+
                                            {{f/bloop|LOOP - All Units (Seek an Ally with monster skill support)}}
  0019cc00: 92020092 lbu r2,0x0092(r16)
+
  0019cbe4: 3c028019 lui r2,0x8019                 |
  0019cc04: 00000000 nop
+
  0019cbe8: 244208cc addiu r2,r2,0x08cc           |
  0019cc08: 30420080 andi r2,r2,0x0080
+
  0019cbec: 02428021 addu r16,r18,r2               |{{f/adr|Dynamic Pointer to Battle data}}
  0019cc0c: 10400056 beq r2,r0,0x0019cd68
+
  0019cbf0: 92030001 lbu r3,0x0001(r16)           |{{f/load|This Unit ID}}
  0019cc10: 00000000 nop
+
  0019cbf4: 340200ff ori r2,r0,0x00ff             |
  0019cc14: 920201ba lbu r2,0x01ba(r16)
+
  0019cbf8: 1062005b beq r3,r2,0x0019cd68         {{f/Cond|If Unit do not exist : branch to}} {{f/loc|next unit}}
  0019cc18: 92230e39 lbu r3,0x0e39(r17)
+
  0019cbfc: 00000000 nop                           |
  0019cc1c: 30420030 andi r2,r2,0x0030
+
  0019cc00: 92020092 lbu r2,0x0092(r16)           |{{f/load|This Unit Support 4}}
  0019cc20: 14430051 bne r2,r3,0x0019cd68
+
  0019cc04: 00000000 nop                           |
  0019cc24: 00000000 nop
+
  0019cc08: 30420080 andi r2,r2,0x0080             |
  0019cc28: 02002021 addu r4,r16,r0
+
  0019cc0c: 10400056 beq r2,r0,0x0019cd68         {{f/Cond|If This Unit do not use [Monster Skill] : branch to}} {{f/loc|next unit}}
  0019cc2c: 0c01786c jal 0x0005e1b0
+
  0019cc10: 00000000 nop                           |
  0019cc30: 34050004 ori r5,r0,0x0004
+
  0019cc14: 920201ba lbu r2,0x01ba(r16)           |{{f/load|This Unit modified ENTD}}
  0019cc34: 1440004c bne r2,r0,0x0019cd68
+
  0019cc18: 92230e39 lbu r3,0x0e39(r17)           |{{f/load|Acting Unit Team}}
  0019cc38: 00000000 nop
+
  0019cc1c: 30420030 andi r2,r2,0x0030             |{{f/std|This Unit Team}}
  0019cc3c: 92030048 lbu r3,0x0048(r16)
+
  0019cc20: 14430051 bne r2,r3,0x0019cd68         {{f/Cond|If This Unit is not an Ally : branch to }} {{f/loc|next unit}}
  0019cc40: 92220e3a lbu r2,0x0e3a(r17)
+
  0019cc24: 00000000 nop                               |
  0019cc44: 00000000 nop
+
  0019cc28: 02002021 addu r4,r16,r0               |{{f/std|Send Battle Pointer}}
  0019cc48: 00620018 mult r3,r2
+
  0019cc2c: 0c01786c jal 0x0005e1b0               |{{f/jal|Status_Checks_(r5_%3D_set_to_check)|Status_Checks_(r5_%3D_set_to_check)}}
  0019cc4c: 00004021 addu r8,r0,r0
+
  0019cc30: 34050004 ori r5,r0,0x0004             |{{f/std|Check Set 0x04 (Unit can act/react)}}
  0019cc50: 96020048 lhu r2,0x0048(r16)
+
  0019cc34: 1440004c bne r2,r0,0x0019cd68         {{f/Cond|If Unit is somehow disabled : branch to }} {{f/loc|next unit}}
  0019cc54: 92040047 lbu r4,0x0047(r16)
+
  0019cc38: 00000000 nop                           |
  0019cc58: 000213c2 srl r2,r2,0x0f
+
  0019cc3c: 92030048 lbu r3,0x0048(r16)           |{{f/load|Load This Ally Unit with Monster skill Y coordinates}}
  0019cc5c: 00021200 sll r2,r2,0x08
+
  0019cc40: 92220e3a lbu r2,0x0e3a(r17)           |{{f/load|Map Max X}}
  0019cc60: 00001812 mflo r3
+
  0019cc44: 00000000 nop                           |
  0019cc64: 00431021 addu r2,r2,r3
+
  0019cc48: 00620018 mult r3,r2                   |
  0019cc68: 00441021 addu r2,r2,r4
+
  0019cc4c: 00004021 addu r8,r0,r0                 |{{f/std|Initialize Battle data loop offset}}
  0019cc6c: 000210c0 sll r2,r2,0x03
+
  0019cc50: 96020048 lhu r2,0x0048(r16)           |{{f/load|Unit Y coordinates + Elevation}}
  0019cc70: 3c018019 lui r1,0x8019
+
  0019cc54: 92040047 lbu r4,0x0047(r16)           |{{f/load|Unit X coordinates}}
  0019cc74: 00220821 addu r1,r1,r2
+
  0019cc58: 000213c2 srl r2,r2,0x0f               |{{f/std|Keep only elevation}}
  0019cc78: 902bf8ce lbu r11,-0x0732(r1)
+
  0019cc5c: 00021200 sll r2,r2,0x08               |{{f/std|0x100 or 0x00}}
  0019cc7c: 92030047 lbu r3,0x0047(r16)
+
  0019cc60: 00001812 mflo r3                       |{{f/std|Y*Max X}}
  0019cc80: 3c01801a lui r1,0x801a
+
  0019cc64: 00431021 addu r2,r2,r3                 |
  0019cc84: 00280821 addu r1,r1,r8
+
  0019cc68: 00441021 addu r2,r2,r4                 |{{f/std|Tile ID }} {{f/std| X + YMaxX +/-Elevation offset}}
  0019cc88: 9022f358 lbu r2,-0x0ca8(r1)
+
  0019cc6c: 000210c0 sll r2,r2,0x03               |{{f/std|Size of Tile data}}
  0019cc8c: 00000000 nop
+
  0019cc70: 3c018019 lui r1,0x8019                 |
  0019cc90: 00623821 addu r7,r3,r2
+
  0019cc74: 00220821 addu r1,r1,r2                 |
  0019cc94: 04e00030 bltz r7,0x0019cd58
+
  0019cc78: 902bf8ce lbu r11,-0x0732(r1)           |{{f/load|Unit Tile Height}} {{f/adr|0x8018f8cc + 0x02 + Tile offset}}
  0019cc98: 00000000 nop
+
                                                {{f/bloop|LOOP - Check Tiles around Unit with Monster skill}}
  0019cc9c: 92220e3a lbu r2,0x0e3a(r17)
+
  0019cc7c: 92030047 lbu r3,0x0047(r16)               |{{f/load|Unit X coordinates}}
  0019cca0: 00000000 nop
+
  0019cc80: 3c01801a lui r1,0x801a                     |
  0019cca4: 00e2102a slt r2,r7,r2
+
  0019cc84: 00280821 addu r1,r1,r8                     |{{f/std|+2 each iteration}}
  0019cca8: 1040002b beq r2,r0,0x0019cd58
+
  0019cc88: 9022f358 lbu r2,-0x0ca8(r1)               |{{f/load|This iteration X offset around Unit}} {{f/adr|0x8019f358}}
  0019ccac: 00000000 nop
+
  0019cc8c: 00000000 nop                               |
  0019ccb0: 92030048 lbu r3,0x0048(r16)
+
  0019cc90: 00623821 addu r7,r3,r2                     |{{f/std|Unit X + offset}}
  0019ccb4: 3c01801a lui r1,0x801a
+
  0019cc94: 04e00030 bltz r7,0x0019cd58               {{f/Cond|if This Tile is not in the map : branch to }} {{f/loc|Next Tile}}
  0019ccb8: 00280821 addu r1,r1,r8
+
  0019cc98: 00000000 nop                               |
  0019ccbc: 9022f359 lbu r2,-0x0ca7(r1)
+
  0019cc9c: 92220e3a lbu r2,0x0e3a(r17)               |{{f/load|Map Max X}}
  0019ccc0: 00000000 nop
+
  0019cca0: 00000000 nop                               |
  0019ccc4: 00622821 addu r5,r3,r2
+
  0019cca4: 00e2102a slt r2,r7,r2                     |
  0019ccc8: 04a00023 bltz r5,0x0019cd58
+
  0019cca8: 1040002b beq r2,r0,0x0019cd58             {{f/Cond|if This Tile is not in the map : branch to }} {{f/loc|Next Tile}}
  0019cccc: 00000000 nop
+
  0019ccac: 00000000 nop                               |
  0019ccd0: 92220e3b lbu r2,0x0e3b(r17)
+
  0019ccb0: 92030048 lbu r3,0x0048(r16)               |{{f/load|Unit Y coordinates}}
  0019ccd4: 00000000 nop
+
  0019ccb4: 3c01801a lui r1,0x801a                     |
  0019ccd8: 00a2102a slt r2,r5,r2
+
  0019ccb8: 00280821 addu r1,r1,r8                     |
  0019ccdc: 1040001e beq r2,r0,0x0019cd58
+
  0019ccbc: 9022f359 lbu r2,-0x0ca7(r1)               |{{f/load|This iteration Y offset around Unit}} {{f/adr|0x8019f358 + 0x01}}
  0019cce0: 00000000 nop
+
  0019ccc0: 00000000 nop                               |
  0019cce4: 00002021 addu r4,r0,r0
+
  0019ccc4: 00622821 addu r5,r3,r2                     |{{f/std|Unit Y + Offset}}
  0019cce8: 00055040 sll r10,r5,0x01
+
  0019ccc8: 04a00023 bltz r5,0x0019cd58               {{f/Cond|if This Tile is not in the map : branch to }} {{f/loc|Next Tile}}
  0019ccec: 00f44807 srav r9,r20,r7
+
  0019cccc: 00000000 nop                               |
  0019ccf0: 02203021 addu r6,r17,r0
+
  0019ccd0: 92220e3b lbu r2,0x0e3b(r17)               |{{f/load|Map Max Y}}
  0019ccf4: 92220e3a lbu r2,0x0e3a(r17)
+
  0019ccd4: 00000000 nop                               |
  0019ccf8: 00000000 nop
+
  0019ccd8: 00a2102a slt r2,r5,r2                     |
  0019ccfc: 00a20018 mult r5,r2
+
  0019ccdc: 1040001e beq r2,r0,0x0019cd58             {{f/Cond|if This Tile is not in the map : branch to }} {{f/loc|Next Tile}}
  0019cd00: 00041200 sll r2,r4,0x08
+
  0019cce0: 00000000 nop                               |
  0019cd04: 00001812 mflo r3
+
  0019cce4: 00002021 addu r4,r0,r0                     |{{f/std|Initialize Elevation counter}}
  0019cd08: 00431021 addu r2,r2,r3
+
  0019cce8: 00055040 sll r10,r5,0x01                   |{{f/std|Y Offset * 2}}
  0019cd0c: 00471021 addu r2,r2,r7
+
  0019ccec: 00f44807 srav r9,r20,r7                   |{{f/std|Bitmask for This Tile in AI Table 0xb4c}}
  0019cd10: 000210c0 sll r2,r2,0x03
+
  0019ccf0: 02203021 addu r6,r17,r0                   |{{f/adr|Prepare Dynamic pointer to AI 0xb4c}}
  0019cd14: 3c018019 lui r1,0x8019
+
                                                    {{f/bloop|LOOP - both elevation (test height)}}
  0019cd18: 00220821 addu r1,r1,r2
+
  0019ccf4: 92220e3a lbu r2,0x0e3a(r17)                   |{{f/load|Map Max X}}
  0019cd1c: 9022f8ce lbu r2,-0x0732(r1)
+
  0019ccf8: 00000000 nop                                   |
  0019cd20: 00000000 nop
+
  0019ccfc: 00a20018 mult r5,r2                           |
  0019cd24: 004b1023 subu r2,r2,r11
+
  0019cd00: 00041200 sll r2,r4,0x08                       |{{f/std|Elevation offset}}
  0019cd28: 24420002 addiu r2,r2,0x0002
+
  0019cd04: 00001812 mflo r3                               |
  0019cd2c: 2c420005 sltiu r2,r2,0x0005
+
  0019cd08: 00431021 addu r2,r2,r3                         |
  0019cd30: 10400007 beq r2,r0,0x0019cd50
+
  0019cd0c: 00471021 addu r2,r2,r7                         |{{f/std|This Tile ID (X + Y*Max X +/- Elevation offset}}
  0019cd34: 24840001 addiu r4,r4,0x0001
+
  0019cd10: 000210c0 sll r2,r2,0x03                       |{{f/std|Size Of Tile Data}}
  0019cd38: 24c30b4c addiu r3,r6,0x0b4c
+
  0019cd14: 3c018019 lui r1,0x8019                         |
  0019cd3c: 01431821 addu r3,r10,r3
+
  0019cd18: 00220821 addu r1,r1,r2                         |
  0019cd40: 94620000 lhu r2,0x0000(r3)
+
  0019cd1c: 9022f8ce lbu r2,-0x0732(r1)                   |{{f/load|This Tile Height}} {{f/adr|0x8018f8cc + 0x02 + Tile offset}}
  0019cd44: 00000000 nop
+
  0019cd20: 00000000 nop                                   |
  0019cd48: 00491025 or r2,r2,r9
+
  0019cd24: 004b1023 subu r2,r2,r11                       |{{f/std|Delta Height (This Tile - Unit)}}
  0019cd4c: a4620000 sh r2,0x0000(r3)
+
  0019cd28: 24420002 addiu r2,r2,0x0002                   |
  0019cd50: 1880ffe8 blez r4,0x0019ccf4
+
  0019cd2c: 2c420005 sltiu r2,r2,0x0005                   |{{f/std|0x1 If Delta Height is between -2 and 2}}
  0019cd54: 24c60024 addiu r6,r6,0x0024
+
  0019cd30: 10400007 beq r2,r0,0x0019cd50                 {{f/Cond|If Delta Height is ok}}
  0019cd58: 25080002 addiu r8,r8,0x0002
+
  0019cd34: 24840001 addiu r4,r4,0x0001                   |{{f/std|Elevation counter +1}}
  0019cd5c: 29020008 slti r2,r8,0x0008
+
  0019cd38: 24c30b4c addiu r3,r6,0x0b4c                       |
  0019cd60: 1440ffc6 bne r2,r0,0x0019cc7c
+
  0019cd3c: 01431821 addu r3,r10,r3                           |{{f/adr|8019f3c4 + 0xb4c + Y offset}}
  0019cd64: 00000000 nop
+
  0019cd40: 94620000 lhu r2,0x0000(r3)                         |{{f/load|Load this Tile's row in AI 0xb4c}}
  0019cd68: 26730001 addiu r19,r19,0x0001
+
  0019cd44: 00000000 nop                                       |
  0019cd6c: 2a620015 slti r2,r19,0x0015
+
  0019cd48: 00491025 or r2,r2,r9                               |{{f/std|Use bitmask}}
  0019cd70: 1440ff9c bne r2,r0,0x0019cbe4
+
  0019cd4c: a4620000 sh r2,0x0000(r3)                         |{{f/store|Enable this Tile in AI 0xb4c Table}}
  0019cd74: 265201c0 addiu r18,r18,0x01c0
+
  0019cd50: 1880ffe8 blez r4,0x0019ccf4               {{f/eloop|loop 2 times ?}} {{f/std|?? Bug ? does this realy loop two times ? }}
 +
  0019cd54: 24c60024 addiu r6,r6,0x0024                   |{{f/std|Elevation offset (0x24)}}
 +
  0019cd58: 25080002 addiu r8,r8,0x0002               |{{f/std|Counter + 2 (halfword offset)}}
 +
  0019cd5c: 29020008 slti r2,r8,0x0008                 |
 +
  0019cd60: 1440ffc6 bne r2,r0,0x0019cc7c         {{f/eloop|loop 4 times}}
 +
  0019cd64: 00000000 nop                               |
 +
  0019cd68: 26730001 addiu r19,r19,0x0001         |{{f/std|Unit Counter +1}}
 +
  0019cd6c: 2a620015 slti r2,r19,0x0015           |
 +
  0019cd70: 1440ff9c bne r2,r0,0x0019cbe4     {{f/eloop|Do this for all units}}
 +
  0019cd74: 265201c0 addiu r18,r18,0x01c0         |{{f/std|Battle data offset}}
 
  0019cd78: 8fbf0024 lw r31,0x0024(r29)
 
  0019cd78: 8fbf0024 lw r31,0x0024(r29)
 
  0019cd7c: 8fb40020 lw r20,0x0020(r29)
 
  0019cd7c: 8fb40020 lw r20,0x0020(r29)
Line 131: Line 140:
 
  0019cd94: 03e00008 jr r31
 
  0019cd94: 03e00008 jr r31
 
  0019cd98: 00000000 nop
 
  0019cd98: 00000000 nop
</font>
+
===Return locations===
 +
'''BATTLE.BIN'''
 +
  0019c6bc: [[Evaluate_Linear_Ability_Behaviors]]

Latest revision as of 21:00, 10 May 2024

BATTLE.BIN :  - Some height/Map coordinate calculation for all units
Reset AI Table 0xb4c then enable Tile adjacent to an Ally with Monster Skill in AI 0xb4c Table (if delta Height is less than 2)
Bug ? The last loop checking both elevation seems to not doing it. The way the counter is handled seems wrong to me.
------------------------------------------------------------------------------------------
Parameter : Nothing
Return : Nothing
------------------------------------------------------------------------------------------
0019cb94: 27bdffd8 addiu r29,r29,-0x0028     |
0019cb98: 00002021 addu r4,r0,r0             |Initialize Y counter
0019cb9c: afb10014 sw r17,0x0014(r29)        |
0019cba0: 3c11801a lui r17,0x801a            |
0019cba4: 2631f3c4 addiu r17,r17,-0x0c3c     |8019f3c4
0019cba8: 02201821 addu r3,r17,r0            |Prepare Dynamic pointer to 0x8019f3c4 (1 halfword per iteration)
0019cbac: afbf0024 sw r31,0x0024(r29)        |
0019cbb0: afb40020 sw r20,0x0020(r29)        |
0019cbb4: afb3001c sw r19,0x001c(r29)        |
0019cbb8: afb20018 sw r18,0x0018(r29)        |
0019cbbc: afb00010 sw r16,0x0010(r29)        |
                                            @LOOP - Initialize AI 0xab4c
0019cbc0: a4600b4c sh r0,0x0b4c(r3)              |Initialize AI 0xb4c
0019cbc4: a4600b70 sh r0,0x0b70(r3)              |Initialize AI 0xb4c  High Elevation
0019cbc8: 24840001 addiu r4,r4,0x0001            |Y counter
0019cbcc: 28820012 slti r2,r4,0x0012             |
0019cbd0: 1440fffb bne r2,r0,0x0019cbc0      Λ Loop 0x12 times
0019cbd4: 24630002 addiu r3,r3,0x0002            |Halfword offset
0019cbd8: 00009821 addu r19,r0,r0            |Initialize Unit counter
0019cbdc: 34148000 ori r20,r0,0x8000         |Prepare Bitmask base
0019cbe0: 00009021 addu r18,r0,r0            |Initialize Unit offset for battle data
                                            @LOOP - All Units (Seek an Ally with monster skill support)
0019cbe4: 3c028019 lui r2,0x8019                 |
0019cbe8: 244208cc addiu r2,r2,0x08cc            |
0019cbec: 02428021 addu r16,r18,r2               |Dynamic Pointer to Battle data
0019cbf0: 92030001 lbu r3,0x0001(r16)            |This Unit ID
0019cbf4: 340200ff ori r2,r0,0x00ff              |
0019cbf8: 1062005b beq r3,r2,0x0019cd68          #If Unit do not exist : branch to next unit
0019cbfc: 00000000 nop                           |
0019cc00: 92020092 lbu r2,0x0092(r16)            |This Unit Support 4
0019cc04: 00000000 nop                           |
0019cc08: 30420080 andi r2,r2,0x0080             |
0019cc0c: 10400056 beq r2,r0,0x0019cd68          #If This Unit do not use [Monster Skill] : branch to next unit
0019cc10: 00000000 nop                           |
0019cc14: 920201ba lbu r2,0x01ba(r16)            |This Unit modified ENTD
0019cc18: 92230e39 lbu r3,0x0e39(r17)            |Acting Unit Team
0019cc1c: 30420030 andi r2,r2,0x0030             |This Unit Team
0019cc20: 14430051 bne r2,r3,0x0019cd68          #If This Unit is not an Ally : branch to  next unit
0019cc24: 00000000 nop                               |
0019cc28: 02002021 addu r4,r16,r0                |Send Battle Pointer
0019cc2c: 0c01786c jal 0x0005e1b0                |-->Status_Checks_(r5_%3D_set_to_check)
0019cc30: 34050004 ori r5,r0,0x0004              |Check Set 0x04 (Unit can act/react)
0019cc34: 1440004c bne r2,r0,0x0019cd68          #If Unit is somehow disabled : branch to  next unit
0019cc38: 00000000 nop                           |
0019cc3c: 92030048 lbu r3,0x0048(r16)            |Load This Ally Unit with Monster skill Y coordinates
0019cc40: 92220e3a lbu r2,0x0e3a(r17)            |Map Max X
0019cc44: 00000000 nop                           |
0019cc48: 00620018 mult r3,r2                    |
0019cc4c: 00004021 addu r8,r0,r0                 |Initialize Battle data loop offset
0019cc50: 96020048 lhu r2,0x0048(r16)            |Unit Y coordinates + Elevation
0019cc54: 92040047 lbu r4,0x0047(r16)            |Unit X coordinates
0019cc58: 000213c2 srl r2,r2,0x0f                |Keep only elevation
0019cc5c: 00021200 sll r2,r2,0x08                |0x100 or 0x00
0019cc60: 00001812 mflo r3                       |Y*Max X
0019cc64: 00431021 addu r2,r2,r3                 |
0019cc68: 00441021 addu r2,r2,r4                 |Tile ID   X + YMaxX +/-Elevation offset
0019cc6c: 000210c0 sll r2,r2,0x03                |Size of Tile data
0019cc70: 3c018019 lui r1,0x8019                 |
0019cc74: 00220821 addu r1,r1,r2                 |
0019cc78: 902bf8ce lbu r11,-0x0732(r1)           |Unit Tile Height 0x8018f8cc + 0x02 + Tile offset
                                                @LOOP - Check Tiles around Unit with Monster skill
0019cc7c: 92030047 lbu r3,0x0047(r16)                |Unit X coordinates
0019cc80: 3c01801a lui r1,0x801a                     |
0019cc84: 00280821 addu r1,r1,r8                     |+2 each iteration
0019cc88: 9022f358 lbu r2,-0x0ca8(r1)                |This iteration X offset around Unit 0x8019f358
0019cc8c: 00000000 nop                               |
0019cc90: 00623821 addu r7,r3,r2                     |Unit X + offset
0019cc94: 04e00030 bltz r7,0x0019cd58                #if This Tile is not in the map : branch to  Next Tile
0019cc98: 00000000 nop                               |
0019cc9c: 92220e3a lbu r2,0x0e3a(r17)                |Map Max X
0019cca0: 00000000 nop                               |
0019cca4: 00e2102a slt r2,r7,r2                      |
0019cca8: 1040002b beq r2,r0,0x0019cd58              #if This Tile is not in the map : branch to  Next Tile
0019ccac: 00000000 nop                               |
0019ccb0: 92030048 lbu r3,0x0048(r16)                |Unit Y coordinates
0019ccb4: 3c01801a lui r1,0x801a                     |
0019ccb8: 00280821 addu r1,r1,r8                     |
0019ccbc: 9022f359 lbu r2,-0x0ca7(r1)                |This iteration Y offset around Unit 0x8019f358 + 0x01
0019ccc0: 00000000 nop                               |
0019ccc4: 00622821 addu r5,r3,r2                     |Unit Y + Offset
0019ccc8: 04a00023 bltz r5,0x0019cd58                #if This Tile is not in the map : branch to  Next Tile
0019cccc: 00000000 nop                               |
0019ccd0: 92220e3b lbu r2,0x0e3b(r17)                |Map Max Y
0019ccd4: 00000000 nop                               |
0019ccd8: 00a2102a slt r2,r5,r2                      |
0019ccdc: 1040001e beq r2,r0,0x0019cd58              #if This Tile is not in the map : branch to  Next Tile
0019cce0: 00000000 nop                               |
0019cce4: 00002021 addu r4,r0,r0                     |Initialize Elevation counter
0019cce8: 00055040 sll r10,r5,0x01                   |Y Offset * 2
0019ccec: 00f44807 srav r9,r20,r7                    |Bitmask for This Tile in AI Table 0xb4c
0019ccf0: 02203021 addu r6,r17,r0                    |Prepare Dynamic pointer to AI 0xb4c
                                                    @LOOP - both elevation (test height)
0019ccf4: 92220e3a lbu r2,0x0e3a(r17)                    |Map Max X
0019ccf8: 00000000 nop                                   |
0019ccfc: 00a20018 mult r5,r2                            |
0019cd00: 00041200 sll r2,r4,0x08                        |Elevation offset
0019cd04: 00001812 mflo r3                               |
0019cd08: 00431021 addu r2,r2,r3                         |
0019cd0c: 00471021 addu r2,r2,r7                         |This Tile ID (X + Y*Max X +/- Elevation offset
0019cd10: 000210c0 sll r2,r2,0x03                        |Size Of Tile Data
0019cd14: 3c018019 lui r1,0x8019                         |
0019cd18: 00220821 addu r1,r1,r2                         |
0019cd1c: 9022f8ce lbu r2,-0x0732(r1)                    |This Tile Height 0x8018f8cc + 0x02 + Tile offset
0019cd20: 00000000 nop                                   |
0019cd24: 004b1023 subu r2,r2,r11                        |Delta Height (This Tile - Unit)
0019cd28: 24420002 addiu r2,r2,0x0002                    |
0019cd2c: 2c420005 sltiu r2,r2,0x0005                    |0x1 If Delta Height is between -2 and 2
0019cd30: 10400007 beq r2,r0,0x0019cd50                  #If Delta Height is ok
0019cd34: 24840001 addiu r4,r4,0x0001                    |Elevation counter +1
0019cd38: 24c30b4c addiu r3,r6,0x0b4c                        |
0019cd3c: 01431821 addu r3,r10,r3                            |8019f3c4 + 0xb4c + Y offset
0019cd40: 94620000 lhu r2,0x0000(r3)                         |Load this Tile's row in AI 0xb4c
0019cd44: 00000000 nop                                       |
0019cd48: 00491025 or r2,r2,r9                               |Use bitmask
0019cd4c: a4620000 sh r2,0x0000(r3)                          |Enable this Tile in AI 0xb4c Table
0019cd50: 1880ffe8 blez r4,0x0019ccf4                Λ loop 2 times ? ?? Bug ? does this realy loop two times ? 
0019cd54: 24c60024 addiu r6,r6,0x0024                    |Elevation offset (0x24)
0019cd58: 25080002 addiu r8,r8,0x0002                |Counter + 2 (halfword offset)
0019cd5c: 29020008 slti r2,r8,0x0008                 |
0019cd60: 1440ffc6 bne r2,r0,0x0019cc7c          Λ loop 4 times
0019cd64: 00000000 nop                               |
0019cd68: 26730001 addiu r19,r19,0x0001          |Unit Counter +1
0019cd6c: 2a620015 slti r2,r19,0x0015            |
0019cd70: 1440ff9c bne r2,r0,0x0019cbe4      Λ Do this for all units
0019cd74: 265201c0 addiu r18,r18,0x01c0          |Battle data offset
0019cd78: 8fbf0024 lw r31,0x0024(r29)
0019cd7c: 8fb40020 lw r20,0x0020(r29)
0019cd80: 8fb3001c lw r19,0x001c(r29)
0019cd84: 8fb20018 lw r18,0x0018(r29)
0019cd88: 8fb10014 lw r17,0x0014(r29)
0019cd8c: 8fb00010 lw r16,0x0010(r29)
0019cd90: 27bd0028 addiu r29,r29,0x0028
0019cd94: 03e00008 jr r31
0019cd98: 00000000 nop

Return locations

BATTLE.BIN
 0019c6bc: Evaluate_Linear_Ability_Behaviors