Difference between revisions of "Check and Spread Movement One Tile Around"
Jump to navigation
Jump to search
(Created page with "<font face='Courier New'> 00175ea0: 27bdffc8 addiu r29,r29,0xffc8 00175ea4: afb20028 sw r18,0x0028(r29) 00175ea8: 3c128019 lui r18,0x8019 00175eac: 8e52f4e4 lw r18,-0x0b...") |
|||
Line 1: | Line 1: | ||
− | + | BATTLE.BIN : Check and Spread Movement One Tile Around | |
+ | ---------------------------------------------------------------- | ||
+ | No Parameters | ||
+ | Returns Nothing | ||
− | 00175ea0: 27bdffc8 addiu r29,r29, | + | Check and Spread two Paths around an Origin Tile. |
− | 00175ea4: afb20028 sw r18,0x0028(r29) | + | - From Tile's ground : 4 directions, staying at ground or from above Units |
− | 00175ea8: 3c128019 lui r18,0x8019 | + | - From a Unit : 4 directions Staying above units, or walking/flying above units (thanks stepping stone..) |
− | 00175eac: 8e52f4e4 lw r18,-0x0b1c(r18) | + | -------------------------------------------------------------------------------------------------------------- |
− | 00175eb0: afbf0030 sw r31,0x0030(r29) | + | 00175ea0: 27bdffc8 addiu r29,r29,-0x0038 | |
− | 00175eb4: afb3002c sw r19,0x002c(r29) | + | 00175ea4: afb20028 sw r18,0x0028(r29) | |
− | 00175eb8: afb10024 sw r17,0x0024(r29) | + | 00175ea8: 3c128019 lui r18,0x8019 | |
− | 00175ebc: 0c05d56a jal 0x001755a8 | + | 00175eac: 8e52f4e4 lw r18,-0x0b1c(r18) |{{f/adr|Pointer to Scratch Pad (0x1f800180)}} |
− | 00175ec0: afb00020 sw r16,0x0020(r29) | + | 00175eb0: afbf0030 sw r31,0x0030(r29) | |
− | 00175ec4: 92420054 lbu r2,0x0054(r18) | + | 00175eb4: afb3002c sw r19,0x002c(r29) | |
− | 00175ec8: 00000000 nop | + | 00175eb8: afb10024 sw r17,0x0024(r29) | |
− | 00175ecc: 1840002d blez r2,0x00175f84 | + | 00175ebc: 0c05d56a jal 0x001755a8 |{{f/jal|Transfer_Tiles_Height_Halves_and_Slope_in_Scratch_Pad|Transfer_Tiles_Height_Halves_and_Slope_in_Scratch_Pad}} |
− | 00175ed0: 00008821 addu r17,r0,r0 | + | 00175ec0: afb00020 sw r16,0x0020(r29) | |
− | 00175ed4: 3c138019 lui r19,0x8019 | + | 00175ec4: 92420054 lbu r2,0x0054(r18) |{{f/load|Loop counter (0x8 : 4 direction and 2 Type of Checks)}} {{f/std| One case with counter at 0x24 not investigated}} |
− | 00175ed8: 2673f500 addiu r19,r19, | + | 00175ec8: 00000000 nop | |
− | 00175edc: 2a220004 slti r2,r17,0x0004 | + | 00175ecc: 1840002d blez r2,0x00175f84 {{f/Cond|If Invalid : }} {{f/loc| Exit routine}} |
− | 00175ee0: 38420001 xori r2,r2,0x0001 | + | 00175ed0: 00008821 addu r17,r0,r0 |{{f/std|Initialize spreading counter}} |
− | 00175ee4: a2420040 sb r2,0x0040(r18) | + | 00175ed4: 3c138019 lui r19,0x8019 | |
− | 00175ee8: 06210002 bgez r17,0x00175ef4 | + | 00175ed8: 2673f500 addiu r19,r19,-0x0b00 |{{f/adr|Table of Spreading routines}} |
− | 00175eec: 02201021 addu r2,r17,r0 | + | 00175edc: 2a220004 slti r2,r17,0x0004 |{{f/std|0x1 if Counter < 4}} |
− | 00175ef0: 26220003 addiu r2,r17,0x0003 | + | {{f/bloop|LOOP - 8 times (each direction - From Tile and From Above Unit)}} |
− | 00175ef4: 00021083 sra r2,r2,0x02 | + | 00175ee0: 38420001 xori r2,r2,0x0001 |{{f/std|Tile Vs Unit Flag (4 times 0x00 and then 0x1)}} |
− | 00175ef8: 00021080 sll r2,r2,0x02 | + | 00175ee4: a2420040 sb r2,0x0040(r18) |{{f/store|Store Tile Vs Unit flag}} |
− | 00175efc: 02221023 subu r2,r17,r2 | + | 00175ee8: 06210002 bgez r17,0x00175ef4 {{f/Cond|If Counter < 0x00 ??}} |
− | 00175f00: 00021080 sll r2,r2,0x02 | + | 00175eec: 02201021 addu r2,r17,r0 | |
− | 00175f04: 00531021 addu r2,r2,r19 | + | 00175ef0: 26220003 addiu r2,r17,0x0003 |{{f/std|Counter + 3}} |
− | 00175f08: 8c420000 lw r2,0x0000(r2) | + | 00175ef4: 00021083 sra r2,r2,0x02 |{{f/std|Counter /4 (0 or 1)}} |
− | 00175f0c: 00000000 nop | + | 00175ef8: 00021080 sll r2,r2,0x02 |{{f/std|0 or 4}} |
− | 00175f10: 0040f809 jalr r2,r31 | + | 00175efc: 02221023 subu r2,r17,r2 |{{f/std|Cycle between 0 and 3}} |
− | 00175f14: 00000000 nop | + | 00175f00: 00021080 sll r2,r2,0x02 |{{f/std|Word offset ( 0 to c)}} |
− | 00175f18: 0c05d57a jal 0x001755e8 | + | 00175f04: 00531021 addu r2,r2,r19 |{{f/adr|This iteration Pointer in Table of Spreading routines}} |
− | 00175f1c: 00000000 nop | + | 00175f08: 8c420000 lw r2,0x0000(r2) |{{f/adr|Load Routine Address (based on direction)}} |
− | 00175f20: 0c05d586 jal 0x00175618 | + | 00175f0c: 00000000 nop | |
− | 00175f24: 00000000 nop | + | 00175f10: 0040f809 jalr r2,r31 |{{f/jal|#175ea0Notes|Jal to spreading routine}} {{f/std|Set value at 3a 3c 44 45}} |
− | 00175f28: 14400011 bne r2,r0,0x00175f70 | + | 00175f14: 00000000 nop | |
− | 00175f2c: 00000000 nop | + | 00175f18: 0c05d57a jal 0x001755e8 |{{f/jal|Set_spreading_Tile_X_and_Y_coordinates|Set_spreading_Tile_X_and_Y_coordinates}} |
− | 00175f30: 0c05d59f jal 0x0017567c | + | 00175f1c: 00000000 nop | |
− | 00175f34: 02202021 addu r4,r17,r0 | + | 00175f20: 0c05d586 jal 0x00175618 |{{f/jal|Check_Spreading_Tile_Coordinates|Check_Spreading_Tile_Coordinates}} {{f/std|Returns r2 if Tile is valid}} |
− | 00175f38: 1440000d bne r2,r0,0x00175f70 | + | 00175f24: 00000000 nop | |
− | 00175f3c: 00000000 nop | + | 00175f28: 14400011 bne r2,r0,0x00175f70 {{f/Cond|If Spreading Tile is invalid : branch to}} {{f/loc| Next iteration}} |
− | 00175f40: 92420055 lbu r2,0x0055(r18) | + | 00175f2c: 00000000 nop | |
− | 00175f44: 00000000 nop | + | 00175f30: 0c05d59f jal 0x0017567c |{{f/jal|0017567c_-_00175954|Set Origin Height data}} {{f/std|<nowiki>returns r2 = 0 or 4 (Grid AoE tile)</nowiki>}} |
− | 00175f48: 18400009 blez r2,0x00175f70 | + | 00175f34: 02202021 addu r4,r17,r0 |{{f/std|Send Counter}} |
− | 00175f4c: 00008021 addu r16,r0,r0 | + | 00175f38: 1440000d bne r2,r0,0x00175f70 {{f/Cond|<nowiki>If Spreading Tile's AoE >=2</nowiki>}} {{f/std|Else nothing to spread}} |
− | 00175f50: 02002021 addu r4,r16,r0 | + | 00175f3c: 00000000 nop | |
− | 00175f54: 0c05d656 jal 0x00175958 | + | 00175f40: 92420055 lbu r2,0x0055(r18) |{{f/load|Load Spread Loop counter}} |
− | 00175f58: 00002821 addu r5,r0,r0 | + | 00175f44: 00000000 nop | |
− | 00175f5c: 92420055 lbu r2,0x0055(r18) | + | 00175f48: 18400009 blez r2,0x00175f70 {{f/Cond|If Counter is Valid}} |
− | 00175f60: 26100001 addiu r16,r16,0x0001 | + | 00175f4c: 00008021 addu r16,r0,r0 |{{f/std|Initialize Loop counter}} |
− | 00175f64: 0202102a slt r2,r16,r2 | + | 00175f50: 02002021 addu r4,r16,r0 |{{f/std|Counter (For Jal)}} |
− | 00175f68: 1440fffa bne r2,r0,0x00175f54 | + | {{f/bloop|LOOP - 4 Times (Tile Path, Above Unit Path - High and Low elevation)}} |
− | 00175f6c: 02002021 addu r4,r16,r0 | + | 00175f54: 0c05d656 jal 0x00175958 |{{f/jal|Movement_routine|Movement_routine}} {{f/std|Spread AoE - Set AoE in Grid 0x00, Enable Flag 0x01 in S-Pad 0x200, Decrease Movement left}} |
− | 00175f70: 92420054 lbu r2,0x0054(r18) | + | 00175f58: 00002821 addu r5,r0,r0 |{{f/std|Send 0x00}} |
− | 00175f74: 26310001 addiu r17,r17,0x0001 | + | 00175f5c: 92420055 lbu r2,0x0055(r18) |{{f/load|Loop counter}} |
− | 00175f78: 0222102a slt r2,r17,r2 | + | 00175f60: 26100001 addiu r16,r16,0x0001 |{{f/std|Counter + 1}} |
− | 00175f7c: 1440ffd8 bne r2,r0,0x00175ee0 | + | 00175f64: 0202102a slt r2,r16,r2 | |
− | 00175f80: 2a220004 slti r2,r17,0x0004 | + | 00175f68: 1440fffa bne r2,r0,0x00175f54 {{f/eloop|Loop - 4 Times (Both elevation - 1 time for Flag 0x10 / 1 time for Flag 0x28)}} |
− | 00175f84: 8fbf0030 lw r31,0x0030(r29) | + | 00175f6c: 02002021 addu r4,r16,r0 | |
+ | 00175f70: 92420054 lbu r2,0x0054(r18) |{{f/load|Load Loop limit}} | ||
+ | 00175f74: 26310001 addiu r17,r17,0x0001 |{{f/std|Counter +1}} | ||
+ | 00175f78: 0222102a slt r2,r17,r2 | | ||
+ | 00175f7c: 1440ffd8 bne r2,r0,0x00175ee0 {{f/eloop|Loop 8 Times}} | ||
+ | 00175f80: 2a220004 slti r2,r17,0x0004 | | ||
+ | 00175f84: 8fbf0030 lw r31,0x0030(r29) END | ||
00175f88: 8fb3002c lw r19,0x002c(r29) | 00175f88: 8fb3002c lw r19,0x002c(r29) | ||
00175f8c: 8fb20028 lw r18,0x0028(r29) | 00175f8c: 8fb20028 lw r18,0x0028(r29) | ||
Line 66: | Line 75: | ||
00175f9c: 03e00008 jr r31 | 00175f9c: 03e00008 jr r31 | ||
00175fa0: 00000000 nop | 00175fa0: 00000000 nop | ||
− | </ | + | === Notes === |
+ | Table of Spreading routines - 8018f500 <span id="175ea0Notes"></span> | ||
+ | 0x00 - 801754d0 [[Spread_Move_to_East_Preset]] | ||
+ | 0x04 - 801754f4 [[Spread_Move_to_North_Preset]] | ||
+ | 0x08 - 8017551c [[Spread_Move_to_West_Preset]] | ||
+ | 0x0c - 80175540 [[Spread_Move_to_South_Preset]] | ||
+ | === Return Location === | ||
+ | '''BATTLE.BIN''' | ||
+ | 00174d0c: [[00174b8c_-_00174df4]] | ||
+ | 001787ec: [[Calculate_Pathing]] |
Revision as of 20:26, 29 May 2023
BATTLE.BIN : Check and Spread Movement One Tile Around ---------------------------------------------------------------- No Parameters Returns Nothing Check and Spread two Paths around an Origin Tile. - From Tile's ground : 4 directions, staying at ground or from above Units - From a Unit : 4 directions Staying above units, or walking/flying above units (thanks stepping stone..) -------------------------------------------------------------------------------------------------------------- 00175ea0: 27bdffc8 addiu r29,r29,-0x0038 | 00175ea4: afb20028 sw r18,0x0028(r29) | 00175ea8: 3c128019 lui r18,0x8019 | 00175eac: 8e52f4e4 lw r18,-0x0b1c(r18) |Pointer to Scratch Pad (0x1f800180) 00175eb0: afbf0030 sw r31,0x0030(r29) | 00175eb4: afb3002c sw r19,0x002c(r29) | 00175eb8: afb10024 sw r17,0x0024(r29) | 00175ebc: 0c05d56a jal 0x001755a8 |-->Transfer_Tiles_Height_Halves_and_Slope_in_Scratch_Pad 00175ec0: afb00020 sw r16,0x0020(r29) | 00175ec4: 92420054 lbu r2,0x0054(r18) |Loop counter (0x8 : 4 direction and 2 Type of Checks) One case with counter at 0x24 not investigated 00175ec8: 00000000 nop | 00175ecc: 1840002d blez r2,0x00175f84 #If Invalid : Exit routine 00175ed0: 00008821 addu r17,r0,r0 |Initialize spreading counter 00175ed4: 3c138019 lui r19,0x8019 | 00175ed8: 2673f500 addiu r19,r19,-0x0b00 |Table of Spreading routines 00175edc: 2a220004 slti r2,r17,0x0004 |0x1 if Counter < 4 @LOOP - 8 times (each direction - From Tile and From Above Unit) 00175ee0: 38420001 xori r2,r2,0x0001 |Tile Vs Unit Flag (4 times 0x00 and then 0x1) 00175ee4: a2420040 sb r2,0x0040(r18) |Store Tile Vs Unit flag 00175ee8: 06210002 bgez r17,0x00175ef4 #If Counter < 0x00 ?? 00175eec: 02201021 addu r2,r17,r0 | 00175ef0: 26220003 addiu r2,r17,0x0003 |Counter + 3 00175ef4: 00021083 sra r2,r2,0x02 |Counter /4 (0 or 1) 00175ef8: 00021080 sll r2,r2,0x02 |0 or 4 00175efc: 02221023 subu r2,r17,r2 |Cycle between 0 and 3 00175f00: 00021080 sll r2,r2,0x02 |Word offset ( 0 to c) 00175f04: 00531021 addu r2,r2,r19 |This iteration Pointer in Table of Spreading routines 00175f08: 8c420000 lw r2,0x0000(r2) |Load Routine Address (based on direction) 00175f0c: 00000000 nop | 00175f10: 0040f809 jalr r2,r31 |-->Jal to spreading routine Set value at 3a 3c 44 45 00175f14: 00000000 nop | 00175f18: 0c05d57a jal 0x001755e8 |-->Set_spreading_Tile_X_and_Y_coordinates 00175f1c: 00000000 nop | 00175f20: 0c05d586 jal 0x00175618 |-->Check_Spreading_Tile_Coordinates Returns r2 if Tile is valid 00175f24: 00000000 nop | 00175f28: 14400011 bne r2,r0,0x00175f70 #If Spreading Tile is invalid : branch to Next iteration 00175f2c: 00000000 nop | 00175f30: 0c05d59f jal 0x0017567c |-->Set Origin Height data returns r2 = 0 or 4 (Grid AoE tile) 00175f34: 02202021 addu r4,r17,r0 |Send Counter 00175f38: 1440000d bne r2,r0,0x00175f70 #If Spreading Tile's AoE >=2 Else nothing to spread 00175f3c: 00000000 nop | 00175f40: 92420055 lbu r2,0x0055(r18) |Load Spread Loop counter 00175f44: 00000000 nop | 00175f48: 18400009 blez r2,0x00175f70 #If Counter is Valid 00175f4c: 00008021 addu r16,r0,r0 |Initialize Loop counter 00175f50: 02002021 addu r4,r16,r0 |Counter (For Jal) @LOOP - 4 Times (Tile Path, Above Unit Path - High and Low elevation) 00175f54: 0c05d656 jal 0x00175958 |-->Movement_routine Spread AoE - Set AoE in Grid 0x00, Enable Flag 0x01 in S-Pad 0x200, Decrease Movement left 00175f58: 00002821 addu r5,r0,r0 |Send 0x00 00175f5c: 92420055 lbu r2,0x0055(r18) |Loop counter 00175f60: 26100001 addiu r16,r16,0x0001 |Counter + 1 00175f64: 0202102a slt r2,r16,r2 | 00175f68: 1440fffa bne r2,r0,0x00175f54 Λ Loop - 4 Times (Both elevation - 1 time for Flag 0x10 / 1 time for Flag 0x28) 00175f6c: 02002021 addu r4,r16,r0 | 00175f70: 92420054 lbu r2,0x0054(r18) |Load Loop limit 00175f74: 26310001 addiu r17,r17,0x0001 |Counter +1 00175f78: 0222102a slt r2,r17,r2 | 00175f7c: 1440ffd8 bne r2,r0,0x00175ee0 Λ Loop 8 Times 00175f80: 2a220004 slti r2,r17,0x0004 | 00175f84: 8fbf0030 lw r31,0x0030(r29) END 00175f88: 8fb3002c lw r19,0x002c(r29) 00175f8c: 8fb20028 lw r18,0x0028(r29) 00175f90: 8fb10024 lw r17,0x0024(r29) 00175f94: 8fb00020 lw r16,0x0020(r29) 00175f98: 27bd0038 addiu r29,r29,0x0038 00175f9c: 03e00008 jr r31 00175fa0: 00000000 nop
Notes
Table of Spreading routines - 8018f500 0x00 - 801754d0 Spread_Move_to_East_Preset 0x04 - 801754f4 Spread_Move_to_North_Preset 0x08 - 8017551c Spread_Move_to_West_Preset 0x0c - 80175540 Spread_Move_to_South_Preset
Return Location
BATTLE.BIN 00174d0c: 00174b8c_-_00174df4 001787ec: Calculate_Pathing