Difference between revisions of "Find New Formation Screen Unit Index"
Jump to navigation
Jump to search
(Created page with "=== Find New Formation Screen Unit Index === Finds the new formation screen unit index after considering button input (directional, L1/R1) ==== Parameters ==== {| class="wiki...") |
|||
Line 27: | Line 27: | ||
| r7 | | r7 | ||
| oldFormationUnitIndex | | oldFormationUnitIndex | ||
− | | | + | | *0x8018ba20 |
| Currently selected formation unit index | | Currently selected formation unit index | ||
|- | |- |
Latest revision as of 18:11, 10 May 2018
Find New Formation Screen Unit Index
Finds the new formation screen unit index after considering button input (directional, L1/R1)
Parameters
Location | Name | Value | Notes |
---|---|---|---|
r4 | unitsPerRow | 4 | Number of units per row in the formation screen |
r5 | numRows | 5 | Number of rows in the formation screen |
r6 | maxFormationUnitIndex | (*0x801cd788 - 1) | Number of units - 1. Maximum index into the formation screen unit array |
r7 | oldFormationUnitIndex | *0x8018ba20 | Currently selected formation unit index |
*(sp + 16) | buttonInput | Button input from Get Inverted Button Input function |
Returns
Location | Name | Notes |
---|---|---|
r2 | formationUnitIndex | New formation unit index, after considering button input |
Code
8012bb88: 00804821 addu r9,r4,r0 # unitsPerRow 8012bb8c: 8faa0010 lw r10,0x0010(r29) # buttonInput 8012bb90: 00000000 nop 8012bb94: 31421000 andi r2,r10,0x1000 8012bb98: 10400011 beq r2,r0,0x8012bbe0 8012bb9c: 00e04021 addu r8,r7,r0 # formationUnitIndex = oldFormationUnitIndex # if (buttonInput & BUTTON_UP) { 8012bba0: 01094023 subu r8,r8,r9 # formationUnitIndex = formationUnitIndex - unitsPerRow 8012bba4: 05010022 bgez r8,0x8012bc30 8012bba8: 31422000 andi r2,r10,0x2000 # if (formationUnitIndex < 0) { 8012bbac: 01250018 mult r9,r5 8012bbb0: 00001012 mflo r2 8012bbb4: 01024021 addu r8,r8,r2 # formationUnitIndex = formationUnitIndex + (unitsPerRow * numRows) 8012bbb8: 00c8102a slt r2,r6,r8 8012bbbc: 1040001c beq r2,r0,0x8012bc30 8012bbc0: 31422000 andi r2,r10,0x2000 # if (maxFormationUnitIndex < formationUnitIndex) { 8012bbc4: 01094023 subu r8,r8,r9 # formationUnitIndex = formationUnitIndex - unitsPerRow 8012bbc8: 00c8102a slt r2,r6,r8 # do { 8012bbcc: 1440fffe bne r2,r0,0x8012bbc8 8012bbd0: 01094023 subu r8,r8,r9 # formationUnitIndex = formationUnitIndex - unitsPerRow # } while (maxFormationUnitIndex < formationUnitIndex); 8012bbd4: 01094021 addu r8,r8,r9 # formationUnitIndex = formationUnitIndex + unitsPerRow 8012bbd8: 0804af0c j 0x8012bc30 8012bbdc: 31422000 andi r2,r10,0x2000 # } # } # } 8012bbe0: 31424000 andi r2,r10,0x4000 8012bbe4: 10400012 beq r2,r0,0x8012bc30 # else if (buttonInput & BUTTON_DOWN) { 8012bbe8: 31422000 andi r2,r10,0x2000 8012bbec: 0109001a div r8,r9 8012bbf0: 00001012 mflo r2 # oldRow = formationUnitIndex / unitsPerRow 8012bbf4: 00002810 mfhi r5 # oldCol = formationUnitIndex % unitsPerRow 8012bbf8: 00000000 nop 8012bbfc: 00000000 nop 8012bc00: 00c9001a div r6,r9 8012bc04: 00001812 mflo r3 # maxRow = maxFormationUnitIndex / unitsPerRow 8012bc08: 00000000 nop 8012bc0c: 14430003 bne r2,r3,0x8012bc1c 8012bc10: 01094021 addu r8,r8,r9 # formationUnitIndex = formationUnitIndex + unitsPerRow # if (oldRow == maxRow) { 8012bc14: 0804af0b j 0x8012bc2c 8012bc18: 00a04021 addu r8,r5,r0 # formationUnitIndex = oldCol 8012bc1c: 00c8102a slt r2,r6,r8 8012bc20: 10400003 beq r2,r0,0x8012bc30 # } else if (maxFormationUnitIndex < formationUnitIndex) { 8012bc24: 31422000 andi r2,r10,0x2000 8012bc28: 00c04021 addu r8,r6,r0 # formationUnitIndex = maxFormationUnitIndex 8012bc2c: 31422000 andi r2,r10,0x2000 # } # } 8012bc30: 10400012 beq r2,r0,0x8012bc7c # if (buttonInput & BUTTON_RIGHT) { 8012bc34: 25040001 addiu r4,r8,0x0001 # formationUnitIndex + 1 8012bc38: 0089001a div r4,r9 8012bc3c: 00001010 mfhi r2 # newCol = (formationUnitIndex + 1) % unitsPerRow 8012bc40: 00000000 nop 8012bc44: 10400003 beq r2,r0,0x8012bc54 8012bc48: 00c4102a slt r2,r6,r4 8012bc4c: 10400009 beq r2,r0,0x8012bc74 # if ((newCol == 0) or (maxFormationUnitIndex < (formationUnitIndex + 1))) { 8012bc50: 00000000 nop 8012bc54: 0109001a div r8,r9 8012bc58: 00001012 mflo r2 # oldRow = formationUnitIndex / unitsPerRow 8012bc5c: 00000000 nop 8012bc60: 00000000 nop 8012bc64: 01220018 mult r9,r2 8012bc68: 00004012 mflo r8 # formationUnitIndex = unitsPerRow * oldRow 8012bc6c: 0804af3e j 0x8012bcf8 8012bc70: 00000000 nop # } else { 8012bc74: 0804af3e j 0x8012bcf8 8012bc78: 00804021 addu r8,r4,r0 # formationUnitIndex = formationUnitIndex + 1 # } # } 8012bc7c: 31428000 andi r2,r10,0x8000 8012bc80: 1040000f beq r2,r0,0x8012bcc0 # else if (buttonInput & BUTTON_LEFT) { 8012bc84: 31420008 andi r2,r10,0x0008 8012bc88: 0109001a div r8,r9 8012bc8c: 00001010 mfhi r2 # oldCol = formationUnitIndex % unitsPerRow 8012bc90: 00000000 nop 8012bc94: 14400003 bne r2,r0,0x8012bca4 8012bc98: 01091021 addu r2,r8,r9 # if (oldCol == 0) { 8012bc9c: 0804af2a j 0x8012bca8 8012bca0: 2442ffff addiu r2,r2,-0x0001 # newValue = (formationUnitIndex + unitsPerRow) - 1 # } else { 8012bca4: 2502ffff addiu r2,r8,-0x0001 # newValue = formationUnitIndex - 1 # } 8012bca8: 00404021 addu r8,r2,r0 # formationUnitIndex = newValue 8012bcac: 00c8102a slt r2,r6,r8 8012bcb0: 10400011 beq r2,r0,0x8012bcf8 # if (maxFormationUnitIndex < formationUnitIndex) { 8012bcb4: 00000000 nop 8012bcb8: 0804af3e j 0x8012bcf8 8012bcbc: 00c04021 addu r8,r6,r0 # formationUnitIndex = maxFormationUnitIndex # } 8012bcc0: 10400007 beq r2,r0,0x8012bce0 # } else if (buttonInput & BUTTON_R1) { 8012bcc4: 31420004 andi r2,r10,0x0004 8012bcc8: 25080001 addiu r8,r8,0x0001 # formationUnitIndex = formationUnitIndex + 1 8012bccc: 00c8102a slt r2,r6,r8 8012bcd0: 10400009 beq r2,r0,0x8012bcf8 # if (maxFormationUnitIndex < formationUnitIndex) { 8012bcd4: 00000000 nop 8012bcd8: 0804af3e j 0x8012bcf8 8012bcdc: 00004021 addu r8,r0,r0 # formationUnitIndex = 0 # } 8012bce0: 10400005 beq r2,r0,0x8012bcf8 # } else if (buttonInput & BUTTON_L1) { 8012bce4: 00000000 nop 8012bce8: 2508ffff addiu r8,r8,-0x0001 # formationUnitIndex = formationUnitIndex - 1 8012bcec: 05010002 bgez r8,0x8012bcf8 # if (formationUnitIndex < 0) { 8012bcf0: 00000000 nop 8012bcf4: 00c04021 addu r8,r6,r0 # formationUnitIndex = maxFormationUnitIndex # } # } 8012bcf8: 11070004 beq r8,r7,0x8012bd0c # if (formationUnitIndex != oldFormationUnitIndex) { 8012bcfc: 00000000 nop 8012bd00: 34020003 ori r2,r0,0x0003 8012bd04: 3c018019 lui r1,0x8019 8012bd08: a022bacc sb r2,-0x4534(r1) # *0x8018bacc = 3 # } 8012bd0c: 03e00008 jr r31 # return formationUnitIndex 8012bd10: 01001021 addu r2,r8,r0