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

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

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