Difference between revisions of "Calculate Tile Ceiling"
Jump to navigation
Jump to search
(Created page with "<font face='Courier New'> 00176164: 3c028019 lui r2,0x8019 00176168: 8c42f4e0 lw r2,-0x0b20(r2) 0017616c: 00000000 nop 00176170: 90420018 lbu r2,0x0018(r2) 00176174: 00...") |
|||
Line 1: | Line 1: | ||
− | + | BATTLE.BIN : Calculate Tile Ceiling | |
+ | ------------------------------------------------------------------------------------------------------- | ||
+ | Parameters : r4 - Tile X coordinate | ||
+ | r5 - Tile Y coordinate | ||
+ | r6 - Tile Exit side slope mod | ||
+ | r7 - Tile Exit side height | ||
− | 00176164: 3c028019 lui r2,0x8019 | + | Returns : r2 = Ceiling Height if any |
− | 00176168: 8c42f4e0 lw r2,-0x0b20(r2) | + | r2 = 0x7f if no ceiling or invalid results |
− | 0017616c: 00000000 nop | + | |
− | 00176170: 90420018 lbu r2,0x0018(r2) | + | Uses Data from ScratchPad 0x1f800000 |
− | 00176174: 00000000 nop | + | --------------------------------------------------------------------------------------------------------- |
− | 00176178: 00a20018 mult r5,r2 | + | 00176164: 3c028019 lui r2,0x8019 | |
− | 0017617c: 00805821 addu r11,r4,r0 | + | 00176168: 8c42f4e0 lw r2,-0x0b20(r2) |{{f/adr|Pointer to scratch pad 0x1f800000}} {{f/std|Pointer at 8019f4e0}} |
− | 00176180: 3408007f ori r8,r0,0x007f | + | 0017616c: 00000000 nop | |
− | 00176184: 00005021 addu r10,r0,r0 | + | 00176170: 90420018 lbu r2,0x0018(r2) |{{f/load|Map Max X}} |
− | 00176188: 3c0c8019 lui r12,0x8019 | + | 00176174: 00000000 nop | |
− | 0017618c: 258cf8cc addiu r12,r12, | + | 00176178: 00a20018 mult r5,r2 | |
− | 00176190: 00004812 mflo r9 | + | 0017617c: 00805821 addu r11,r4,r0 |{{f/std|Tile's X Coord}} |
− | 00176194: 012b1021 addu r2,r9,r11 | + | 00176180: 3408007f ori r8,r0,0x007f |{{f/std|Max Height (no ceiling)}} |
− | 00176198: 000210c0 sll r2,r2,0x03 | + | 00176184: 00005021 addu r10,r0,r0 |{{f/std|Initialize Elevation counter}} |
− | 0017619c: 004c2821 addu r5,r2,r12 | + | 00176188: 3c0c8019 lui r12,0x8019 | |
− | 001761a0: 90a20006 lbu r2,0x0006(r5) | + | 0017618c: 258cf8cc addiu r12,r12,-0x0734 |{{f/adr|Pointer : Tiles data ( 8019f8cc )}} |
− | 001761a4: 00000000 nop | + | 00176190: 00004812 mflo r9 |{{f/std|Y*Max X}} |
− | 001761a8: 30420001 andi r2,r2,0x0001 | + | {{f/bloop|LOOP - 2 Times (Low elevation and High elevation)}} |
− | 001761ac: 14400019 bne r2,r0,0x00176214 | + | 00176194: 012b1021 addu r2,r9,r11 |{{f/std|This Iteration Tile ID (Low or High elevation)}} |
− | 001761b0: 00000000 nop | + | 00176198: 000210c0 sll r2,r2,0x03 |{{f/std|Tile's ID *8}} |
− | 001761b4: 90a30003 lbu r3,0x0003(r5) | + | 0017619c: 004c2821 addu r5,r2,r12 |{{f/adr|dynamic Tile data pointer ( 8019f8cc Table - from sent data)}} |
− | 001761b8: 90a20004 lbu r2,0x0004(r5) | + | 001761a0: 90a20006 lbu r2,0x0006(r5) |{{f/load|Tile's 0x06}} |
− | 001761bc: 3063001f andi r3,r3,0x001f | + | 001761a4: 00000000 nop | |
− | 001761c0: 00c21007 srav r2,r2,r6 | + | 001761a8: 30420001 andi r2,r2,0x0001 | |
− | 001761c4: 30420003 andi r2,r2,0x0003 | + | 001761ac: 14400019 bne r2,r0,0x00176214 {{f/Cond|If Tile is Unselectable : branch to}} {{f/loc| Next iteration}} |
− | 001761c8: 00620018 mult r3,r2 | + | 001761b0: 00000000 nop | |
− | 001761cc: 90a40002 lbu r4,0x0002(r5) | + | 001761b4: 90a30003 lbu r3,0x0003(r5) |{{f/load|Load Halves + Depht}} |
− | 001761d0: 90a30005 lbu r3,0x0005(r5) | + | 001761b8: 90a20004 lbu r2,0x0004(r5) |{{f/load|Load Slope Type}} |
− | 001761d4: 00042040 sll r4,r4,0x01 | + | 001761bc: 3063001f andi r3,r3,0x001f |{{f/std|Keep only halves}} |
− | 001761d8: 3063001f andi r3,r3,0x001f | + | 001761c0: 00c21007 srav r2,r2,r6 | |
− | 001761dc: 00031840 sll r3,r3,0x01 | + | 001761c4: 30420003 andi r2,r2,0x0003 |{{f/std|Keep Exit Side Slope type}} |
− | 001761e0: 00001012 mflo r2 | + | 001761c8: 00620018 mult r3,r2 | |
− | 001761e4: 00822021 addu r4,r4,r2 | + | 001761cc: 90a40002 lbu r4,0x0002(r5) |{{f/load|Load Height}} |
− | 001761e8: 00832023 subu r4,r4,r3 | + | 001761d0: 90a30005 lbu r3,0x0005(r5) |{{f/load|Load Tile's 0x05 (Thickness)}} |
− | 001761ec: 308300ff andi r3,r4,0x00ff | + | 001761d4: 00042040 sll r4,r4,0x01 |{{f/std|Height * 2}} |
− | 001761f0: 30e200ff andi r2,r7,0x00ff | + | 001761d8: 3063001f andi r3,r3,0x001f |{{f/std|Thickness only}} {{f/std|Thickness ?}} |
− | 001761f4: 0043102b sltu r2,r2,r3 | + | 001761dc: 00031840 sll r3,r3,0x01 |{{f/std|Thickness * 2}} |
− | 001761f8: 10400006 beq r2,r0,0x00176214 | + | 001761e0: 00001012 mflo r2 |{{f/std|Halve * Exit Side slope mod}} |
− | 001761fc: 310200ff andi r2,r8,0x00ff | + | 001761e4: 00822021 addu r4,r4,r2 |Exit Side Height |
− | 00176200: 0043102b sltu r2,r2,r3 | + | 001761e8: 00832023 subu r4,r4,r3 |{{f/std|Potential Ceiling Height (Exit Side Height - Thickness)}} |
− | 00176204: 10400002 beq r2,r0,0x00176210 | + | 001761ec: 308300ff andi r3,r4,0x00ff |Dynamic Ceiling Height |
− | 00176208: 00000000 nop | + | 001761f0: 30e200ff andi r2,r7,0x00ff |Not Dynamic Exit Side Height |
− | 0017620c: 01002021 addu r4,r8,r0 | + | 001761f4: 0043102b sltu r2,r2,r3 | |
− | 00176210: 00804021 addu r8,r4,r0 | + | 001761f8: 10400006 beq r2,r0,0x00176214 {{f/Cond|If Exit Side height < Ceiling height}} {{f/std|False if no ceiling - keep 0x7f}} |
− | 00176214: 254a0001 addiu r10,r10,0x0001 | + | 001761fc: 310200ff andi r2,r8,0x00ff |{{f/std|0x7f}} |
− | 00176218: 29420002 slti r2,r10,0x0002 | + | 00176200: 0043102b sltu r2,r2,r3 |{{f/std|0x1 if 0x7f < Ceiling height}} |
− | 0017621c: 1440ffdd bne r2,r0,0x00176194 | + | 00176204: 10400002 beq r2,r0,0x00176210 {{f/Cond|If Ceiling Height is invalid ? (> 0x7f)}} |
− | 00176220: 25290100 addiu r9,r9,0x0100 | + | 00176208: 00000000 nop | |
− | 00176224: 03e00008 jr r31 | + | 0017620c: 01002021 addu r4,r8,r0 |{{f/std|Preserve 0x7f}} |
− | 00176228: 310200ff andi r2,r8,0x00ff | + | 00176210: 00804021 addu r8,r4,r0 |{{f/std|<nowiki>r8 = Ceiling height</nowiki>}} |
− | + | 00176214: 254a0001 addiu r10,r10,0x0001 |{{f/std|Counter + 1}} | |
+ | 00176218: 29420002 slti r2,r10,0x0002 | | ||
+ | 0017621c: 1440ffdd bne r2,r0,0x00176194 {{f/eloop|Loop 2 times}} | ||
+ | 00176220: 25290100 addiu r9,r9,0x0100 |{{f/adr|High Elevation Offset}} | ||
+ | 00176224: 03e00008 jr r31 | | ||
+ | 00176228: 310200ff andi r2,r8,0x00ff |{{f/std|Returns Ceiling Height, or 0x7f}} | ||
+ | === Return Locations === | ||
+ | '''BATTLE.BIN''' | ||
+ | 001757c0: [[0017567c_-_00175954]] | ||
+ | 00175868: [[0017567c_-_00175954]] | ||
+ | 00175ab0: [[Movement_routine]] | ||
+ | 00175b80: [[Movement_routine]] | ||
+ | 001772cc: [[00177180_-_001773b4]] | ||
+ | 00177344: [[00177180_-_001773b4]] | ||
+ | 001775ec: [[001773b8_-_00177790]] | ||
+ | 001776b4: [[001773b8_-_00177790]] |
Revision as of 12:24, 27 May 2023
BATTLE.BIN : Calculate Tile Ceiling ------------------------------------------------------------------------------------------------------- Parameters : r4 - Tile X coordinate r5 - Tile Y coordinate r6 - Tile Exit side slope mod r7 - Tile Exit side height Returns : r2 = Ceiling Height if any r2 = 0x7f if no ceiling or invalid results Uses Data from ScratchPad 0x1f800000 --------------------------------------------------------------------------------------------------------- 00176164: 3c028019 lui r2,0x8019 | 00176168: 8c42f4e0 lw r2,-0x0b20(r2) |Pointer to scratch pad 0x1f800000 Pointer at 8019f4e0 0017616c: 00000000 nop | 00176170: 90420018 lbu r2,0x0018(r2) |Map Max X 00176174: 00000000 nop | 00176178: 00a20018 mult r5,r2 | 0017617c: 00805821 addu r11,r4,r0 |Tile's X Coord 00176180: 3408007f ori r8,r0,0x007f |Max Height (no ceiling) 00176184: 00005021 addu r10,r0,r0 |Initialize Elevation counter 00176188: 3c0c8019 lui r12,0x8019 | 0017618c: 258cf8cc addiu r12,r12,-0x0734 |Pointer : Tiles data ( 8019f8cc ) 00176190: 00004812 mflo r9 |Y*Max X @LOOP - 2 Times (Low elevation and High elevation) 00176194: 012b1021 addu r2,r9,r11 |This Iteration Tile ID (Low or High elevation) 00176198: 000210c0 sll r2,r2,0x03 |Tile's ID *8 0017619c: 004c2821 addu r5,r2,r12 |dynamic Tile data pointer ( 8019f8cc Table - from sent data) 001761a0: 90a20006 lbu r2,0x0006(r5) |Tile's 0x06 001761a4: 00000000 nop | 001761a8: 30420001 andi r2,r2,0x0001 | 001761ac: 14400019 bne r2,r0,0x00176214 #If Tile is Unselectable : branch to Next iteration 001761b0: 00000000 nop | 001761b4: 90a30003 lbu r3,0x0003(r5) |Load Halves + Depht 001761b8: 90a20004 lbu r2,0x0004(r5) |Load Slope Type 001761bc: 3063001f andi r3,r3,0x001f |Keep only halves 001761c0: 00c21007 srav r2,r2,r6 | 001761c4: 30420003 andi r2,r2,0x0003 |Keep Exit Side Slope type 001761c8: 00620018 mult r3,r2 | 001761cc: 90a40002 lbu r4,0x0002(r5) |Load Height 001761d0: 90a30005 lbu r3,0x0005(r5) |Load Tile's 0x05 (Thickness) 001761d4: 00042040 sll r4,r4,0x01 |Height * 2 001761d8: 3063001f andi r3,r3,0x001f |Thickness only Thickness ? 001761dc: 00031840 sll r3,r3,0x01 |Thickness * 2 001761e0: 00001012 mflo r2 |Halve * Exit Side slope mod 001761e4: 00822021 addu r4,r4,r2 |Exit Side Height 001761e8: 00832023 subu r4,r4,r3 |Potential Ceiling Height (Exit Side Height - Thickness) 001761ec: 308300ff andi r3,r4,0x00ff |Dynamic Ceiling Height 001761f0: 30e200ff andi r2,r7,0x00ff |Not Dynamic Exit Side Height 001761f4: 0043102b sltu r2,r2,r3 | 001761f8: 10400006 beq r2,r0,0x00176214 #If Exit Side height < Ceiling height False if no ceiling - keep 0x7f 001761fc: 310200ff andi r2,r8,0x00ff |0x7f 00176200: 0043102b sltu r2,r2,r3 |0x1 if 0x7f < Ceiling height 00176204: 10400002 beq r2,r0,0x00176210 #If Ceiling Height is invalid ? (> 0x7f) 00176208: 00000000 nop | 0017620c: 01002021 addu r4,r8,r0 |Preserve 0x7f 00176210: 00804021 addu r8,r4,r0 |r8 = Ceiling height 00176214: 254a0001 addiu r10,r10,0x0001 |Counter + 1 00176218: 29420002 slti r2,r10,0x0002 | 0017621c: 1440ffdd bne r2,r0,0x00176194 Λ Loop 2 times 00176220: 25290100 addiu r9,r9,0x0100 |High Elevation Offset 00176224: 03e00008 jr r31 | 00176228: 310200ff andi r2,r8,0x00ff |Returns Ceiling Height, or 0x7f
Return Locations
BATTLE.BIN 001757c0: 0017567c_-_00175954 00175868: 0017567c_-_00175954 00175ab0: Movement_routine 00175b80: Movement_routine 001772cc: 00177180_-_001773b4 00177344: 00177180_-_001773b4 001775ec: 001773b8_-_00177790 001776b4: 001773b8_-_00177790