Difference between revisions of "Checks map max X and Y"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - Checks_map_max_X_and_Y
Checks map max X and Y 197c68: [[00197c68 - 00197d08]]
+
------------------------------------------------------------------------------------------
   
+
Parameter : r4 = Pointer to some AI Tile's Table (1 bit per tile)
   
+
  Return : r2 = Nb of Tiles enabled in r4 Table
  00197c68: 27bdfff0 addiu r29,r29,0xfff0
+
  ------------------------------------------------------------------------------------------
  00197c6c: 00004821 addu r9,r0,r0
+
  00197c68: 27bdfff0 addiu r29,r29,-0x0010    |
  00197c70: 3c0c801a lui r12,0x801a
+
  00197c6c: 00004821 addu r9,r0,r0             |
  00197c74: 258cf3c4 addiu r12,r12,0xf3c4
+
  00197c70: 3c0c801a lui r12,0x801a           |
  00197c78: 00005821 addu r11,r0,r0
+
  00197c74: 258cf3c4 addiu r12,r12,-0x0c3c    |{{f/adr|0x8019f3c4}}
  00197c7c: 3c0d801a lui r13,0x801a
+
  00197c78: 00005821 addu r11,r0,r0           |{{f/std|Initialize elevation counter}}
  00197c80: 91ad01ff lbu r13,0x01ff(r13) Load ???
+
  00197c7c: 3c0d801a lui r13,0x801a           |
  00197c84: 00000000 nop
+
  00197c80: 91ad01ff lbu r13,0x01ff(r13)       |{{f/load|Map Max Y}}
  00197c88: 11a00018 beq r13,r0,0x00197cec Branch if  == 0x0
+
                                            {{f/bloop|LOOP - both elevation}}
  00197c8c: 00003021 addu r6,r0,r0
+
  00197c84: 00000000 nop                           |
  00197c90: 918a0e3b lbu r10,0x0e3b(r12) Load map max y
+
  00197c88: 11a00018 beq r13,r0,0x00197cec         {{f/Cond|If Max Y is invalid : branch to}} {{f/loc|next elevation}}
  00197c94: 00803821 addu r7,r4,r0
+
  00197c8c: 00003021 addu r6,r0,r0                 |{{f/std|Initialize Y counter}}
  00197c98: 94e20000 lhu r2,0x0000(r7) Load ???
+
  00197c90: 918a0e3b lbu r10,0x0e3b(r12)           |{{f/load|Map Max Y}}
  00197c9c: 00000000 nop
+
  00197c94: 00803821 addu r7,r4,r0                 |{{f/std|Prepare Dynamic pointer to AI Table of Tiles flags}}
  00197ca0: 1040000e beq r2,r0,0x00197cdc Branch if  == 0x0
+
                                                {{f/bloop|LOOP - All Y row (halfwords of flags)}}
  00197ca4: 00000000 nop
+
  00197c98: 94e20000 lhu r2,0x0000(r7)                 |{{f/load|This Y row Flags}}
  00197ca8: 91850e3a lbu r5,0x0e3a(r12) Load map max X
+
  00197c9c: 00000000 nop                               |
  00197cac: 00000000 nop
+
  00197ca0: 1040000e beq r2,r0,0x00197cdc             {{f/Cond|If All Tile's flags are off : branch to }} {{f/loc|Next Y row}}
  00197cb0: 18a0000a blez r5,0x00197cdc
+
  00197ca4: 00000000 nop                               |
  00197cb4: 00001821 addu r3,r0,r0
+
  00197ca8: 91850e3a lbu r5,0x0e3a(r12)               |{{f/load|Load map max X}}
  00197cb8: 00404021 addu r8,r2,r0
+
  00197cac: 00000000 nop                               |
  00197cbc: 00681004 sllv r2,r8,r3 Exception
+
  00197cb0: 18a0000a blez r5,0x00197cdc               {{f/Cond|If Max X is invalid : branch to }} {{f/loc|Next Y row}}
  00197cc0: 30428000 andi r2,r2,0x8000 & 0x8000
+
  00197cb4: 00001821 addu r3,r0,r0                     |{{f/std|Initialize X counter}}
  00197cc4: 10400002 beq r2,r0,0x00197cd0 Branch if  & 0x8000 == 0x0
+
  00197cb8: 00404021 addu r8,r2,r0                     |{{f/std|Y row flags}}
  00197cc8: 24630001 addiu r3,r3,0x0001
+
  00197cbc: 00681004 sllv r2,r8,r3                     |{{f/std|Shift flags so tile of interest flag is in 0x8000 position}}
  00197ccc: 25290001 addiu r9,r9,0x0001
+
                                                    {{f/bloop|LOOP}}
  00197cd0: 0065102a slt r2,r3,r5 Set if 0x1 < ???
+
  00197cc0: 30428000 andi r2,r2,0x8000                     |
  00197cd4: 1440fffa bne r2,r0,0x00197cc0 Branch if so
+
  00197cc4: 10400002 beq r2,r0,0x00197cd0                 {{f/Cond|If This Tile flag is ON}}
  00197cd8: 00681004 sllv r2,r8,r3 Exception
+
  00197cc8: 24630001 addiu r3,r3,0x0001                   |{{f/std|X counter + 1}}
  00197cdc: 24c60001 addiu r6,r6,0x0001
+
  00197ccc: 25290001 addiu r9,r9,0x0001                       |{{f/std|Increase Tile ON counter}}
  00197ce0: 00ca102a slt r2,r6,r10 Set if 0x1 < ???
+
  00197cd0: 0065102a slt r2,r3,r5                         |
  00197ce4: 1440ffec bne r2,r0,0x00197c98 Branch if so
+
  00197cd4: 1440fffa bne r2,r0,0x00197cc0             {{f/Cond|Loop while X < Max X}}
  00197ce8: 24e70002 addiu r7,r7,0x0002
+
  00197cd8: 00681004 sllv r2,r8,r3                         |{{f/std|Shift flags so tile of interest flag is in 0x8000 position}}
  00197cec: 256b0001 addiu r11,r11,0x0001
+
  00197cdc: 24c60001 addiu r6,r6,0x0001               |{{f/std|Y counter +1}}
  00197cf0: 29620002 slti r2,r11,0x0002 Set if 0x1 < 2
+
  00197ce0: 00ca102a slt r2,r6,r10                     |
  00197cf4: 1440ffe3 bne r2,r0,0x00197c84 Branch if so
+
  00197ce4: 1440ffec bne r2,r0,0x00197c98         {{f/Cond|Branch while Y < Max Y}}
  00197cf8: 24840024 addiu r4,r4,0x0024
+
  00197ce8: 24e70002 addiu r7,r7,0x0002               |{{f/std|Halfword offset}}
  00197cfc: 01201021 addu r2,r9,r0
+
  00197cec: 256b0001 addiu r11,r11,0x0001         |{{f/std|Elevation counter + 1}}
  00197d00: 27bd0010 addiu r29,r29,0x0010
+
  00197cf0: 29620002 slti r2,r11,0x0002           |{{f/std|Set if 0x1 < 2}}
  00197d04: 03e00008 jr r31 Jump to Address
+
  00197cf4: 1440ffe3 bne r2,r0,0x00197c84     {{f/Cond|Branch if so}}
 +
  00197cf8: 24840024 addiu r4,r4,0x0024           |{{f/std|Elevation offset}}
 +
  00197cfc: 01201021 addu r2,r9,r0             |{{f/Returns|Returns Number of Tiles enabled in considered Table}}
 +
  00197d00: 27bd0010 addiu r29,r29,0x0010
 +
  00197d04: 03e00008 jr r31
 
  00197d08: 00000000 nop
 
  00197d08: 00000000 nop
   
+
===Return locations===
</font>
+
  '''BATTLE.BIN'''
 +
  0019771c: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]  r4 = AI 0x0b4c
 +
  0019c8a8: [[Evaluate_Linear_Ability_Behaviors]]  r4 = AI 0x0bdc
 +
  0019c8b4: [[Evaluate_Linear_Ability_Behaviors]]  r4 = AI 0x0b94

Latest revision as of 19:02, 12 May 2024

BATTLE.BIN :  - Checks_map_max_X_and_Y
------------------------------------------------------------------------------------------
Parameter : r4 = Pointer to some AI Tile's Table (1 bit per tile)
Return : r2 = Nb of Tiles enabled in r4 Table
------------------------------------------------------------------------------------------
00197c68: 27bdfff0 addiu r29,r29,-0x0010     |
00197c6c: 00004821 addu r9,r0,r0             |
00197c70: 3c0c801a lui r12,0x801a            |
00197c74: 258cf3c4 addiu r12,r12,-0x0c3c     |0x8019f3c4
00197c78: 00005821 addu r11,r0,r0            |Initialize elevation counter
00197c7c: 3c0d801a lui r13,0x801a            |
00197c80: 91ad01ff lbu r13,0x01ff(r13)       |Map Max Y
                                            @LOOP - both elevation
00197c84: 00000000 nop                           |
00197c88: 11a00018 beq r13,r0,0x00197cec         #If Max Y is invalid : branch to next elevation
00197c8c: 00003021 addu r6,r0,r0                 |Initialize Y counter
00197c90: 918a0e3b lbu r10,0x0e3b(r12)           |Map Max Y
00197c94: 00803821 addu r7,r4,r0                 |Prepare Dynamic pointer to AI Table of Tiles flags
                                                @LOOP - All Y row (halfwords of flags)
00197c98: 94e20000 lhu r2,0x0000(r7)                 |This Y row Flags
00197c9c: 00000000 nop                               |
00197ca0: 1040000e beq r2,r0,0x00197cdc              #If All Tile's flags are off : branch to  Next Y row
00197ca4: 00000000 nop                               |
00197ca8: 91850e3a lbu r5,0x0e3a(r12)                |Load map max X
00197cac: 00000000 nop                               |
00197cb0: 18a0000a blez r5,0x00197cdc                #If Max X is invalid : branch to  Next Y row
00197cb4: 00001821 addu r3,r0,r0                     |Initialize X counter
00197cb8: 00404021 addu r8,r2,r0                     |Y row flags
00197cbc: 00681004 sllv r2,r8,r3                     |Shift flags so tile of interest flag is in 0x8000 position
                                                    @LOOP
00197cc0: 30428000 andi r2,r2,0x8000                     |
00197cc4: 10400002 beq r2,r0,0x00197cd0                  #If This Tile flag is ON
00197cc8: 24630001 addiu r3,r3,0x0001                    |X counter + 1
00197ccc: 25290001 addiu r9,r9,0x0001                        |Increase Tile ON counter
00197cd0: 0065102a slt r2,r3,r5                          |
00197cd4: 1440fffa bne r2,r0,0x00197cc0              #Loop while X < Max X
00197cd8: 00681004 sllv r2,r8,r3                         |Shift flags so tile of interest flag is in 0x8000 position
00197cdc: 24c60001 addiu r6,r6,0x0001                |Y counter +1
00197ce0: 00ca102a slt r2,r6,r10                     |
00197ce4: 1440ffec bne r2,r0,0x00197c98          #Branch while Y < Max Y
00197ce8: 24e70002 addiu r7,r7,0x0002                |Halfword offset
00197cec: 256b0001 addiu r11,r11,0x0001          |Elevation counter + 1
00197cf0: 29620002 slti r2,r11,0x0002            |Set if 0x1 < 2
00197cf4: 1440ffe3 bne r2,r0,0x00197c84      #Branch if so
00197cf8: 24840024 addiu r4,r4,0x0024            |Elevation offset
00197cfc: 01201021 addu r2,r9,r0             |Returns Number of Tiles enabled in considered Table
00197d00: 27bd0010 addiu r29,r29,0x0010
00197d04: 03e00008 jr r31
00197d08: 00000000 nop

Return locations

BATTLE.BIN
 0019771c: Store_ability/skillset_data,_set_AI_settings_for_ability?   r4 = AI 0x0b4c
 0019c8a8: Evaluate_Linear_Ability_Behaviors   r4 = AI 0x0bdc
 0019c8b4: Evaluate_Linear_Ability_Behaviors   r4 = AI 0x0b94