Difference between revisions of "List targeting data of all valid units"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 +
Parameters : r4 = Unit ID (always Attacker ?)
 +
              r5 = Not valid Unit ID (preset value)
 +
              r6 = Previous routine stack pointer
 +
 +
Store : "0x1f800000" on previous routine stack pointer (0x00)
 +
          A table of all valid unit targeting data (X mod, Height, Y mod, Spritesheets height) at 0x1f800000 (see [[#001af770Notes|'''notes''']])
 +
---------------------------------------------------------------------------------------------------------
 
  001af770: 27bdffc8 addiu r29,r29,-0x0038    |
 
  001af770: 27bdffc8 addiu r29,r29,-0x0038    |
 
  001af774: afb40028 sw r20,0x0028(r29)      |
 
  001af774: afb40028 sw r20,0x0028(r29)      |
Line 81: Line 88:
 
  001af8b0: 00000000 nop                   
 
  001af8b0: 00000000 nop                   
 
=== Notes ===
 
=== Notes ===
  '''Store targeting data at 0x1f800000'''
+
  '''Store targeting data at 0x1f800000''' <span id="001af770Notes"></span>
 
   
 
   
 
       0x00 : valid unit counter  
 
       0x00 : valid unit counter  
Line 111: Line 118:
 
  '''Battle.bin'''
 
  '''Battle.bin'''
 
  001afdf8: [[001afd90_-_001aff14]]
 
  001afdf8: [[001afd90_-_001aff14]]
  001affb0: [[001aff18_-_001b045c]] r4 = Attacker / preset value = -0x01 (0xffffffff)
+
  001affb0: [[Set_and_Validate_Arc_Trajectory]] r4 = Attacker / preset value = -0x01 (0xffffffff)
 
  001b074c: [[001b06d0_-_001b0814]]
 
  001b074c: [[001b06d0_-_001b0814]]
 
  001b08ac: [[001b0818_-_001b0a8c]]
 
  001b08ac: [[001b0818_-_001b0a8c]]

Latest revision as of 21:07, 30 January 2022

Parameters : r4 = Unit ID (always Attacker ?)
             r5 = Not valid Unit ID (preset value)
             r6 = Previous routine stack pointer

Store : "0x1f800000" on previous routine stack pointer (0x00)
         A table of all valid unit targeting data (X mod, Height, Y mod, Spritesheets height) at 0x1f800000 (see notes)
---------------------------------------------------------------------------------------------------------
001af770: 27bdffc8 addiu r29,r29,-0x0038    |
001af774: afb40028 sw r20,0x0028(r29)       |
001af778: 0080a021 addu r20,r4,r0           |r20 = Attacker's ID
001af77c: afb5002c sw r21,0x002c(r29)       |
001af780: 00a0a821 addu r21,r5,r0           |r21 = Preset Value
001af784: afb20020 sw r18,0x0020(r29)       |
001af788: 00c09021 addu r18,r6,r0           |r18 = Stack Pointer P
001af78c: afb30024 sw r19,0x0024(r29)       |
001af790: 00009821 addu r19,r0,r0           |r19 = 0x00 (future loop counter - used as unit ID)
001af794: 3c021f80 lui r2,0x1f80            |r2 = 0x1f800000
001af798: afbf0030 sw r31,0x0030(r29)       |
001af79c: afb1001c sw r17,0x001c(r29)       |
001af7a0: afb00018 sw r16,0x0018(r29)       |
001af7a4: ae420000 sw r2,0x0000(r18)        |Store 0x1f800000 on previous routine stack pointer 
001af7a8: ac400000 sw r0,0x0000(r2)         |Store 0x00 at 0x1f800000 (future valid unit counter)
001af7ac: 0c0602bf jal 0x00180afc           @ LOOP - ALL UNITS -->Get_Unit%27s_Data_Pointer returns r2 = stack pointer of Unit ID = r19
001af7b0: 02602021 addu r4,r19,r0                |r4 = Loop Counter (Unit ID)
001af7b4: 00408821 addu r17,r2,r0                |r17 = Unit's Data Pointer (matching r19)
001af7b8: 92230001 lbu r3,0x0001(r17)            |r3 = Unit's ID
001af7bc: 00000000 nop                           |
001af7c0: 1074002f beq r3,r20,0x001af880         #If Unit is not the attacker / Else branch to next loop iteration
001af7c4: 26730001 addiu r19,r19,0x0001          |Increase counter (r19)
001af7c8: 1075002e beq r3,r21,0x001af884             #If unit <> Preset value / Else branch to next loop iteration (check counter < 0x15 is here...)
001af7cc: 2a620015 slti r2,r19,0x0015                |r2 = 0x01 if counter < 0x15 (for branch above ...)
001af7d0: 340200ff ori r2,r0,0x00ff                      |r2 =0xff
001af7d4: 1062002b beq r3,r2,0x001af884                  #If Unit Exists / Else branch to next loop iteration
001af7d8: 2a620015 slti r2,r19,0x0015                    |r2 = 0x01 if counter < 0x15 (for branch above ...)
001af7dc: 92220058 lbu r2,0x0058(r17)                        |r2 = Unit's Current Statuses 1
001af7e0: 00000000 nop                                       |
001af7e4: 30420004 andi r2,r2,0x0004                         |r2 = 0x04 if unit is jumping
001af7e8: 14400026 bne r2,r0,0x001af884                      #If unit is not jumping / Else branch to next loop iteration
001af7ec: 2a620015 slti r2,r19,0x0015                        |r2 = 0x01 if counter < 0x15 (for branch above ...)
001af7f0: 92220182 lbu r2,0x0182(r17)                            |r2 =  Unit's Mount Info
001af7f4: 00000000 nop                                           |
001af7f8: 30420040 andi r2,r2,0x0040                             |r2 = 0x40 if unit is being ridden
001af7fc: 14400021 bne r2,r0,0x001af884                          #If unit is not being ridden / Else branch to next loop iteration
001af800: 2a620015 slti r2,r19,0x0015                            |r2 = 0x01 if counter < 0x15 (for branch above ...)
001af804: 8e430000 lw r3,0x0000(r18)                                 |r3 = 0x1f800000
001af808: 00000000 nop                                               |
001af80c: 8c700000 lw r16,0x0000(r3)                                 |r16 = Valid unit counter
001af810: 00000000 nop                                               |
001af814: 26020001 addiu r2,r16,0x0001                               |r2 = Valid unit counter + 1
001af818: ac620000 sw r2,0x0000(r3)                                  |store new valid unit counter at 0x1f800000
001af81c: 8e420000 lw r2,0x0000(r18)                                 |r2 = 0x1f800000
001af820: 92230001 lbu r3,0x0001(r17)                                |r3 = Unit's ID
001af824: 00501021 addu r2,r2,r16                                    |r2 = 0x1f800000 + unchanged Pointer Mod
001af828: a0430004 sb r3,0x0004(r2)                                  |Store unit ID at 0x1f800000 + Nb of valid Unit + 0x04
001af82c: 92240001 lbu r4,0x0001(r17)                                |r4 = unit's ID
001af830: 0c02311a jal 0x0008c468                                    |-->Set_Unit_Xmod,_Y_Mod_and_Height_data_from_unit_ID -returns r2 = 0x01 if data are on stack pointer
001af834: 27a50010 addiu r5,r29,0x0010                               |r5 = Stack Pointer 0x10
001af838: 8e430000 lw r3,0x0000(r18)                                 |r3 = 0x1f800000
001af83c: 001010c0 sll r2,r16,0x03                                   |r2 = r16 * 8
001af840: 00431021 addu r2,r2,r3                                     |r2 = 0x1f800000 + Nb of valid unit * 8 (2 words per valid unit)
001af844: 8ba30013 lwl r3,0x0013(r29)                                |
001af848: 9ba30010 lwr r3,0x0010(r29)                                |r3 = unaligned word at r29 0x10 - 0x13 (X mod and height data)
001af84c: 8ba40017 lwl r4,0x0017(r29)                                |
001af850: 9ba40014 lwr r4,0x0014(r29)                                |r4 = unaligned word at r29 0x14-0x17 (Y mod)
001af854: a843001d swl r3,0x001d(r2)                                 |
001af858: b843001a swr r3,0x001a(r2)                                 |Store Unit X mod and height data at 0x1f80001a + Valid unit counter * 8
001af85c: a8440021 swl r4,0x0021(r2)                                 |
001af860: b844001e swr r4,0x001e(r2)                                 |Store Unit Y mod and ?? (nothing ?) at 0x1f80001e + Valid unit counter * 8
001af864: 92240001 lbu r4,0x0001(r17)                                |r4 = Unit's ID
001af868: 0c023727 jal 0x0008dc9c                                    |-->Find_Unit%27s_Misc_Data_Pointer_and_Load_Spritesheet_Value returns r2 = Unit spritesheet graphic height 
001af86c: 00108080 sll r16,r16,0x02                                  |r16 = Nb of valid unit * 32
001af870: 8e430000 lw r3,0x0000(r18)                                 |r3 = 0x1f800000
001af874: 00000000 nop                                               |
001af878: 02038021 addu r16,r16,r3                                   |r16 = 0x1f800000 + Valid unit counter * 4
001af87c: ae0200c4 sw r2,0x00c4(r16)                                 |Store Unit spritesheet graphic height  at 0x1f8000c4 + Valid unit counter * 4 (one word per unit)
001af880: 2a620015 slti r2,r19,0x0015            |r2 = 0x01 if loop counter < 0x15
001af884: 1440ffc9 bne r2,r0,0x001af7ac          #Loop while counter < 0x15
001af888: 00000000 nop                           |
001af88c: 8fbf0030 lw r31,0x0030(r29)            |
001af890: 8fb5002c lw r21,0x002c(r29)            |
001af894: 8fb40028 lw r20,0x0028(r29)            |
001af898: 8fb30024 lw r19,0x0024(r29)            |
001af89c: 8fb20020 lw r18,0x0020(r29)            |
001af8a0: 8fb1001c lw r17,0x001c(r29)            |
001af8a4: 8fb00018 lw r16,0x0018(r29)            |
001af8a8: 27bd0038 addiu r29,r29,0x0038          |
001af8ac: 03e00008 jr r31                        END
001af8b0: 00000000 nop                  

Notes

Store targeting data at 0x1f800000  

      0x00 : valid unit counter 

      -- Unit ID -- (0x04 + counter)
          0x004 : 1st valid unit ID
          0x005 : 2nd valid unit ID
          ...
          0x019 : 15th valid unit (max allowed units)

      -- Unit Xmod, Height, Y mod -- (0x1a + valid unit counter * 8)
          0x01a : 1st unit X mod (halfword)
          0x01c : 1st unit Height data (halfword)
          0x01e : 1st unit Y mod (halfword)
          0x020 : nothing ?
          ...
          0x0ba : 15th unit X mod
          0x0bc : 15th unit height
          0x0be : 15th unit Y mod
          0x0c0 : nothing ?
          0x0c2 : nothing

      -- Unit spritesheet height -- (0xc4 + valid unit counter * 4)
          0x0c4 : 1st unit spritesheet's height (word)
          0x0c8 : 2nd unit spritesheet's height (word)
          ...
          0x114 : 15th unit spritesheet's height

Return locations

Battle.bin
001afdf8: 001afd90_-_001aff14
001affb0: Set_and_Validate_Arc_Trajectory r4 = Attacker / preset value = -0x01 (0xffffffff)
001b074c: 001b06d0_-_001b0814
001b08ac: 001b0818_-_001b0a8c