Prepare Valid Deployment Tiles
Revision as of 04:15, 1 May 2025 by Nyzer (talk | contribs) (Nyzer moved page ATTACK.OUT 001c7288 - 001c7558 to Prepare Valid Deployment Tiles: Giving it a title)
NOTE: while the comments of this routine specify "row" and "column", these may not be exact. Can't be bothered to math it out at the moment, it's not what I need here today anyway. ~Nyzer Parameters: r4 (Preset Value) - Deployment Screen and ATTACK.OUT 001c6748 - 001c67c8 both use 0x801DB650, but ATTACK.OUT 001c67cc - 001c7284, which currently is undocumented, does a lot more with the value before sending it here. 001c7288: 3c02801d lui r2,0x801d 001c728c: 8c42d080 lw r2,-0x2f80(r2) 001c7290: 00000000 nop 001c7294: 14400077 bne r2,r0,0x001c7474 001c7298: 34050001 ori r5,r0,0x0001 # r5 = 1 to start. 001c729c: 3c02801d lui r2,0x801d 001c72a0: 8c42d274 lw r2,-0x2d8c(r2) # Pointer to Current Squad Data 001c72a4: 00000000 nop 001c72a8: 90420007 lbu r2,0x0007(r2) # Load orientation byte 001c72ac: 00000000 nop 001c72b0: 3043000f andi r3,r2,0x000f # Isolate orientation with bitmap rotated 001c72b4: 1460001b bne r3,r0,0x001c7324 # Branch if not 0 (not default, needs to be rotated?) 001c72b8: 00004021 addu r8,r0,r0 # r8 = Current Row = 0 by default ## ORIENTATION 0 ## 001c72bc: 34090001 ori r9,r0,0x0001 # r9 = 1 001c72c0: 3c06801e lui r6,0x801e 001c72c4: 24c6cbc8 addiu r6,r6,0xcbc8 # r6 = 0x801DCBC8: Pointer to Valid Deployment Tiles 001c72c8: 00c01821 addu r3,r6,r0 # r3 = Valid Deployment Tiles 001c72cc: 24c70005 addiu r7,r6,0x0005 # r7 = r6 + 5 (start of next row's Valid Deployment Tiles) 001c72d0: 3c02801d lui r2,0x801d 001c72d4: 8c42d274 lw r2,-0x2d8c(r2) # Pointer to Current Squad Data 001c72d8: 00000000 nop 001c72dc: 8c420000 lw r2,0x0000(r2) # Load 5x5 bitmap 001c72e0: 00000000 nop 001c72e4: 00a21024 and r2,r5,r2 # Check the current bit 001c72e8: 10400003 beq r2,r0,0x001c72f8 # Branch if not flagged - not a deployable tile 001c72ec: 00000000 nop 001c72f0: 08071cbf j 0x001c72fc # If a deployable tile, jump ahead, 001c72f4: a0690000 sb r9,0x0000(r3) # while flagging this Valid Deployment Tile as true 001c72f8: a0600000 sb r0,0x0000(r3) # If not deployable, flag this Valid Deployment Tile as false 001c72fc: 24630001 addiu r3,r3,0x0001 # r3 ++: next tile 001c7300: 0067102a slt r2,r3,r7 # r2 = 0x01 if not on next row yet 001c7304: 1440fff2 bne r2,r0,0x001c72d0 # Branch back if not on next row yet 001c7308: 00052840 sll r5,r5,0x01 # r5 * 2, check next bit from bitmap to see if that tile is deployable 001c730c: 25080001 addiu r8,r8,0x0001 # Current Row ++ 001c7310: 29020005 slti r2,r8,0x0005 # r2 = 0x01 if still rows 1-5 001c7314: 1440ffec bne r2,r0,0x001c72c8 # Branch back if still rows left to check 001c7318: 24c60005 addiu r6,r6,0x0005 # r6 + 5 = next row's data 001c731c: 08071d1e j 0x001c7478 # Jump past other orientations if done here 001c7320: 00006821 addu r13,r0,r0 # r13 = 0 ## ORIENTATION NOT 0 ## 001c7324: 1465001c bne r3,r5,0x001c7398 # Branch if orientation isn't 1 001c7328: 34020002 ori r2,r0,0x0002 # r2 = 2 ## ORIENTATION 1 ## 001c732c: 34060004 ori r6,r0,0x0004 # r6 = Columns Remaining = 4 001c7330: 3c09801e lui r9,0x801e 001c7334: 2529cbc8 addiu r9,r9,0xcbc8 # r9 = Valid Deployment Tiles 001c7338: 34070001 ori r7,r0,0x0001 # r7 = 1 001c733c: 00004021 addu r8,r0,r0 # r8 = Current Row = 0 by default 001c7340: 01201821 addu r3,r9,r0 # r3 = Pointer to Valid Deployment Tiles 001c7344: 3c02801d lui r2,0x801d 001c7348: 8c42d274 lw r2,-0x2d8c(r2) # Pointer to Current Squad Data 001c734c: 00000000 nop 001c7350: 8c420000 lw r2,0x0000(r2) # Load 5x5 bitmap for current squad data 001c7354: 00000000 nop 001c7358: 00a21024 and r2,r5,r2 # Check current bit 001c735c: 10400003 beq r2,r0,0x001c736c # Branch if not flagged - not a deployable tile 001c7360: 00661021 addu r2,r3,r6 # r2 = Current Deployable Tile + Columns Remaining 001c7364: 08071cdc j 0x001c7370 # If a deployable tile, jump ahead, 001c7368: a0470000 sb r7,0x0000(r2) # while flagging this Valid Deployment Tile as true 001c736c: a0400000 sb r0,0x0000(r2) # If not deployable, flag this Valid Deployment Tile as false 001c7370: 00052840 sll r5,r5,0x01 # r5 * 2, check next bit from bitmap to see if that tile is deployable 001c7374: 25080001 addiu r8,r8,0x0001 # Current Row ++ 001c7378: 29020005 slti r2,r8,0x0005 # r2 = 0x01 if still rows 1-5 001c737c: 1440fff1 bne r2,r0,0x001c7344 # Branch back if still rows left to check 001c7380: 24630005 addiu r3,r3,0x0005 # r3 + 5 = next row's Valid Deployment Tile 001c7384: 24c6ffff addiu r6,r6,0xffff # Columns Remaining -- 001c7388: 04c1ffed bgez r6,0x001c7340 # Branch back if there are still columns remaining 001c738c: 00004021 addu r8,r0,r0 # r8 = Current Row = reset to 0 001c7390: 08071d1f j 0x001c747c # Jump past other orientations if done here 001c7394: 00006821 addu r13,r0,r0 # r13 = 0 ## ORIENTATION NOT 0 OR 1 ## 001c7398: 1462001b bne r3,r2,0x001c7408 # Branch if orientation =/= 2 001c739c: 34020003 ori r2,r0,0x0003 # r2 = 3 ## ORIENTATION 2 ## 001c73a0: 34080004 ori r8,r0,0x0004 # r8 = Rows Remaining = 4 001c73a4: 34090001 ori r9,r0,0x0001 # r9 = 1 001c73a8: 3c07801e lui r7,0x801e 001c73ac: 24e7cbdc addiu r7,r7,0xcbdc # r7 = Valid Deployment Tiles 001c73b0: 34060004 ori r6,r0,0x0004 # r6 = Columns Remaining = 4 001c73b4: 24e30004 addiu r3,r7,0x0004 # r3 = Valid Deployment Tiles pointer + 4 001c73b8: 3c02801d lui r2,0x801d 001c73bc: 8c42d274 lw r2,-0x2d8c(r2) # Pointer to Current Squad Data 001c73c0: 00000000 nop 001c73c4: 8c420000 lw r2,0x0000(r2) # Load 5x5 bitmap for current squad data 001c73c8: 00000000 nop 001c73cc: 00a21024 and r2,r5,r2 # Check current bit 001c73d0: 10400003 beq r2,r0,0x001c73e0 # Branch if not flagged - not a deployable tile 001c73d4: 00000000 nop 001c73d8: 08071cf9 j 0x001c73e4 # If a deployable tile, jump ahead, 001c73dc: a0690000 sb r9,0x0000(r3) # while flagging this Valid Deployment Tile as true 001c73e0: a0600000 sb r0,0x0000(r3) # If not deployable, flag this Valid Deployment Tile as false 001c73e4: 00052840 sll r5,r5,0x01 # r5 * 2, check next bit from bitmap to see if that tile is deployable 001c73e8: 24c6ffff addiu r6,r6,0xffff # Columns Remaining -- 001c73ec: 04c1fff2 bgez r6,0x001c73b8 # Branch back if there are still columns remaining 001c73f0: 2463ffff addiu r3,r3,0xffff # r3 - 1 = previous Valid Deployment Tile 001c73f4: 2508ffff addiu r8,r8,0xffff # Rows Remaining -- 001c73f8: 0501ffed bgez r8,0x001c73b0 # Branch back if there are still rows remaining 001c73fc: 24e7fffb addiu r7,r7,0xfffb # Pointer to Valid Deployment Tiles - 5 001c7400: 08071d1e j 0x001c7478 # Jump past other orientations if done here 001c7404: 00006821 addu r13,r0,r0 # r13 = 0 ## ORIENTATION NOT 0, 1, OR 2 ## 001c7408: 1462001b bne r3,r2,0x001c7478 001c740c: 00006821 addu r13,r0,r0 ## ORIENTATION 3 ## 001c7410: 00003021 addu r6,r0,r0 # r6 = Current Column = 0 001c7414: 3c09801e lui r9,0x801e 001c7418: 2529cbc8 addiu r9,r9,0xcbc8 # r9 = Valid Deployment Tiles 001c741c: 34070001 ori r7,r0,0x0001 # r7 = 1 001c7420: 34080004 ori r8,r0,0x0004 # r8 = Rows Remaining = 4 001c7424: 25230014 addiu r3,r9,0x0014 # r3 = Valid Deployment Tiles + 20 (starting with the final row) 001c7428: 3c02801d lui r2,0x801d 001c742c: 8c42d274 lw r2,-0x2d8c(r2) # Pointer to Current Squad Data 001c7430: 00000000 nop 001c7434: 8c420000 lw r2,0x0000(r2) # Load 5x5 bitmap for current squad data 001c7438: 00000000 nop 001c743c: 00a21024 and r2,r5,r2 # Check current bit 001c7440: 10400003 beq r2,r0,0x001c7450 # Branch if not flagged - not a deployable tile 001c7444: 00661021 addu r2,r3,r6 # r2 = Current Deployable Tile + Current Column 001c7448: 08071d15 j 0x001c7454 # If a deployable tile, jump ahead, 001c744c: a0470000 sb r7,0x0000(r2) # while flagging this Valid Deployment Tile as true 001c7450: a0400000 sb r0,0x0000(r2) # If not deployable, flag this Valid Deployment Tile as false 001c7454: 00052840 sll r5,r5,0x01 # r5 * 2, check next bit from bitmap to see if that tile is deployable 001c7458: 2508ffff addiu r8,r8,0xffff # Rows Remaining -- 001c745c: 0501fff2 bgez r8,0x001c7428 # Branch back if there are still rows remaining 001c7460: 2463fffb addiu r3,r3,0xfffb # Pointer to Valid Deployment Tiles - 5 001c7464: 24c60001 addiu r6,r6,0x0001 # Current Column ++ 001c7468: 28c20005 slti r2,r6,0x0005 # r2 = 0x01 if still columns 1-5 001c746c: 1440ffed bne r2,r0,0x001c7424 # Branch back if still columns left to check 001c7470: 34080004 ori r8,r0,0x0004 # r8 = Rows Remaining = 4 001c7474: 00006821 addu r13,r0,r0 # r13 = 0 ## ORIENTATIONS FINISHED ## 001c7478: 00004021 addu r8,r0,r0 # r8 = 0 001c747c: 341900c0 ori r25,r0,0x00c0 # r25 = 0xC0 001c7480: 34180028 ori r24,r0,0x0028 # r24 = 0x28 001c7484: 00006021 addu r12,r0,r0 # r12 = 0 001c7488: 00007021 addu r14,r0,r0 # r14 = 0 001c748c: 3c0f801e lui r15,0x801e 001c7490: 25efcbc8 addiu r15,r15,0xcbc8 # r15 = Valid Deployment Tiles 001c7494: 00003021 addu r6,r0,r0 # r6 = 0 001c7498: 00004821 addu r9,r0,r0 # r9 = 0 001c749c: 240bff00 addiu r11,r0,0xff00 # r11 = 0xFF00 001c74a0: 01e05021 addu r10,r15,r0 # r10 = Valid Deployment Tiles 001c74a4: 000d1080 sll r2,r13,0x02 # r2 = r13 * 4 001c74a8: 004d1021 addu r2,r2,r13 # r2 = r13 * 5 001c74ac: 00021080 sll r2,r2,0x02 # r2 = r13 * 0x0A 001c74b0: 00442821 addu r5,r2,r4 # r5 = r13 * 0x0A + Preset Value 001c74b4: 91420000 lbu r2,0x0000(r10) # r2 = value of current Valid Deployment Tile 001c74b8: 00000000 nop 001c74bc: 10400003 beq r2,r0,0x001c74cc # Branch if flagged false 001c74c0: 2407fffc addiu r7,r0,0xfffc # r7 = -4 001c74c4: 08071d35 j 0x001c74d4 # If a deployable tile, jump ahead, 001c74c8: a0b8000c sb r24,0x000c(r5) # while saving a value of 0x28 to offset 0x0C in r5 001c74cc: 00003821 addu r7,r0,r0 # r7 = 0 001c74d0: a0a0000c sb r0,0x000c(r5) # Save a value of 00 to offset 0x0C in r5 001c74d4: a0b9000d sb r25,0x000d(r5) # Save a value of 0xC0 to offset 0x0D in r5 001c74d8: 3c03801d lui r3,0x801d 001c74dc: 8c63d080 lw r3,-0x2f80(r3) # r3 = *0x801CD080 001c74e0: 01cb1023 subu r2,r14,r11 # r2 = r14 - r11 001c74e4: a4a20008 sh r2,0x0008(r5) # Save result of r14 - r11 to offset 0x08 in r5 001c74e8: 10600002 beq r3,r0,0x001c74f4 # Branch if *0x801CD080 had a value of 0 001c74ec: 340200c4 ori r2,r0,0x00c4 # r2 = 0xC4 001c74f0: 34020088 ori r2,r0,0x0088 # r2 = 0x88 001c74f4: 00491023 subu r2,r2,r9 # r2 = r2 - r9 001c74f8: 004c1023 subu r2,r2,r12 # r2 = r2 - r9 - r12 001c74fc: 00471021 addu r2,r2,r7 # r2 = r2 - r9 - r12 - r7 001c7500: a4a2000a sh r2,0x000a(r5) # Save result to offset 0x0A in r5 001c7504: 25ad0001 addiu r13,r13,0x0001 # r13 + 1 001c7508: 2529000a addiu r9,r9,0x000a # r9 + 0x0A 001c750c: 256b0014 addiu r11,r11,0x0014 # r11 + 0x14 001c7510: 254a0001 addiu r10,r10,0x0001 # r10 + 1 001c7514: 24c60001 addiu r6,r6,0x0001 # r6 + 1 001c7518: 94a20008 lhu r2,0x0008(r5) # Load offset 0x08 from r5 001c751c: 3403001c ori r3,r0,0x001c # r3 = 0x1C 001c7520: a4b80010 sh r24,0x0010(r5) # Save a value of 0x0028 to offset 0x10 in r5 001c7524: a4a30012 sh r3,0x0012(r5) # Save a value of 0x001C to offset 0x12 in r5 001c7528: 2442ffec addiu r2,r2,0xffec # r2 - 0x0014 001c752c: a4a20008 sh r2,0x0008(r5) # Save r2 - 0x0014 to offset 0x08 in r5 001c7530: 28c20005 slti r2,r6,0x0005 # r2 = 0x01 if r6 is less than 5 001c7534: 1440ffdf bne r2,r0,0x001c74b4 # Branch back r6 if less than 5 001c7538: 24a50014 addiu r5,r5,0x0014 # r5 + 0x14 001c753c: 258c000a addiu r12,r12,0x000a # r12 + 0x0A 001c7540: 25ce0014 addiu r14,r14,0x0014 # r14 + 0x14 001c7544: 25080001 addiu r8,r8,0x0001 # r8 + 1 001c7548: 29020005 slti r2,r8,0x0005 # r2 = 0x01 if r8 is less than 5 001c754c: 1440ffd1 bne r2,r0,0x001c7494 # Branch back if r8 less than 5 001c7550: 25ef0005 addiu r15,r15,0x0005 # r15 + 5 001c7554: 03e00008 jr r31 001c7558: 00000000 nop
Return Locations
1C40A0: Deployment Screen 1C6798: ATTACK.OUT 001c6748 - 001c67c8 1C69DC: ATTACK.OUT 001c67cc - 001c7284 1C6C78: ATTACK.OUT 001c67cc - 001c7284