Find Free Party Index
Jump to navigation
Jump to search
# ROUTINE: FIND FREE PARTY INDEX # Parameters: # r4 = (joinAsGuest) Join as Guest flag # r5 = (zeroPtr) Pointer to write a zero byte to # Returns: # r2 = (unitIndex), if a free slot was found; # -1, otherwise 80059d5c: 27bdff90 addiu r29,r29,-0x0070 80059d60: afb20068 sw r18,0x0068(r29) 80059d64: 00809021 addu r18,r4,r0 # joinAsGuest (Join as Guest flag) 80059d68: afb00060 sw r16,0x0060(r29) 80059d6c: 00008021 addu r16,r0,r0 # unitIndex = 0 80059d70: afb10064 sw r17,0x0064(r29) 80059d74: 27b10010 addiu r17,r29,0x0010 # localArrayPtr 80059d78: afbf006c sw r31,0x006c(r29) 80059d7c: a0a00000 sb r0,0x0000(r5) # *zeroPtr = 0 # do { 80059d80: 0c0166bc jal 0x80059af0 # partyUnit = Get Party Data Pointer (unitIndex); 80059d84: 02002021 addu r4,r16,r0 80059d88: ae220000 sw r2,0x0000(r17) # *localArrayPtr = partyUnit 80059d8c: 26100001 addiu r16,r16,0x0001 # unitIndex = unitIndex + 1 80059d90: 2a020014 slti r2,r16,0x0014 80059d94: 1440fffa bne r2,r0,0x80059d80 80059d98: 26310004 addiu r17,r17,0x0004 # localArrayPtr = localArrayPtr + 4 # } while (unitIndex < 20); 80059d9c: 12400003 beq r18,r0,0x80059dac # if (joinAsGuest) { 80059da0: 34020010 ori r2,r0,0x0010 # startIndex = 16 80059da4: 0801676d j 0x80059db4 80059da8: 34050014 ori r5,r0,0x0014 # endIndex = 20 # } else { 80059dac: 00001021 addu r2,r0,r0 # startIndex = 0 80059db0: 34050010 ori r5,r0,0x0010 # endIndex = 16 # } 80059db4: 00408021 addu r16,r2,r0 # index = startIndex 80059db8: 0205102a slt r2,r16,r5 80059dbc: 1040000e beq r2,r0,0x80059df8 80059dc0: 00101080 sll r2,r16,0x02 # if (startIndex < endIndex) { 80059dc4: 340400ff ori r4,r0,0x00ff # 0xff 80059dc8: 27a30010 addiu r3,r29,0x0010 # localArrayBasePtr 80059dcc: 00431821 addu r3,r2,r3 # localArrayPtr = localArrayBasePtr + startIndex # do { 80059dd0: 8c620000 lw r2,0x0000(r3) # *localArrayPtr 80059dd4: 00000000 nop 80059dd8: 90420001 lbu r2,0x0001(r2) # unitIndex = *localArrayPtr.unitIndex 80059ddc: 00000000 nop 80059de0: 10440006 beq r2,r4,0x80059dfc # if (unitIndex == 0xff) return index; 80059de4: 02001021 addu r2,r16,r0 80059de8: 26100001 addiu r16,r16,0x0001 # index = index + 1 80059dec: 0205102a slt r2,r16,r5 80059df0: 1440fff7 bne r2,r0,0x80059dd0 80059df4: 24630004 addiu r3,r3,0x0004 # localArrayPtr = localArrayPtr + 4 # } while (startIndex < endIndex); # } 80059df8: 2402ffff addiu r2,r0,-0x0001 # return -1; 80059dfc: 8fbf006c lw r31,0x006c(r29) 80059e00: 8fb20068 lw r18,0x0068(r29) 80059e04: 8fb10064 lw r17,0x0064(r29) 80059e08: 8fb00060 lw r16,0x0060(r29) 80059e0c: 27bd0070 addiu r29,r29,0x0070 80059e10: 03e00008 jr r31 80059e14: 00000000 nop
Return Locations
SCUS_942.21 0x80059c18 - Save Unit to Party 0x80059c4c - Save Unit to Party REQUIRE.OUT 0x801c6078 - Get Free Party Slot Status