Get Battle Unit By Unit ID
Jump to navigation
Jump to search
# ROUTINE: GET BATTLE UNIT BY UNIT ID # Gets an in-battle unit pointer based on the specified Unit ID. Specified Unit ID can be either ENTD ID (preferred) or a special base class. # Parameters: # r4 = unitID (ENTD Unit ID (preferred) or special base class) # Returns: # r2 = (In-battle data pointer) of specified unit, if: # A unit was found with ENTD ID (offset 0x161) equal to the specified Unit ID, OR # A unit was found with a special (non-generic) base class equal to the specified Unit ID, # and had ENTD ID (0x161) between 0x78 and 0x7c. # -1, otherwise 80142508: 27bdffe0 addiu r29,r29,-0x0020 8014250c: afb00018 sw r16,0x0018(r29) 80142510: 00808021 addu r16,r4,r0 # unitID 80142514: afbf001c sw r31,0x001c(r29) 80142518: 0c060324 jal 0x80180c90 # Find Unit Data Pointer For ENTD Unit ID (unitID, &resultCode); 8014251c: 27a50010 addiu r5,r29,0x0010 80142520: 8fa40010 lw r4,0x0010(r29) # resultCode 80142524: 00000000 nop 80142528: 04810013 bgez r4,0x80142578 8014252c: 2602ffff addiu r2,r16,-0x0001 # unitID - 1 # if (resultCode < 0) { // Unit not found 80142530: 2c420049 sltiu r2,r2,0x0049 80142534: 10400019 beq r2,r0,0x8014259c # if ((unitID - 1) >= 0x49) // Generic class, or 0 80142538: 2402ffff addiu r2,r0,-0x0001 # return -1; 8014253c: 0c0602cb jal 0x80180b2c # unitIndex = Check Base Class (unitID); 80142540: 02002021 addu r4,r16,r0 80142544: 04400010 bltz r2,0x80142588 # if (unitIndex < 0) return -1; 80142548: afa20010 sw r2,0x0010(r29) # unitIndex 8014254c: 0c0602bf jal 0x80180afc # battleUnit = Get Unit's Data Pointer (unitIndex); 80142550: 00402021 addu r4,r2,r0 80142554: 00401821 addu r3,r2,r0 # battleUnit 80142558: 90620161 lbu r2,0x0161(r3) # battleUnit.ENTD_ID 8014255c: 00000000 nop 80142560: 2442ff88 addiu r2,r2,-0x0078 # battleUnit.ENTD_ID - 0x78 80142564: 2c420005 sltiu r2,r2,0x0005 80142568: 10400007 beq r2,r0,0x80142588 # if ((battleUnit.ENTD_ID - 0x78) >= 5) return -1; 8014256c: 00601021 addu r2,r3,r0 # 80142570: 08050967 j 0x8014259c # return battleUnit; 80142574: 00000000 nop # } else { 80142578: 0c023388 jal 0x0008ce20 # unitMiscID = Get Unit Misc ID By Unit Index (unitIndex); 8014257c: 00000000 nop 80142580: 04410003 bgez r2,0x80142590 # if (unitMiscID < 0) { // No unit misc data 80142584: 00000000 nop 80142588: 08050967 j 0x8014259c # return -1; 8014258c: 2402ffff addiu r2,r0,-0x0001 # } 80142590: 8fa40010 lw r4,0x0010(r29) # unitIndex 80142594: 0c0602bf jal 0x80180afc # return Get Unit's Data Pointer (unitIndex); 80142598: 00000000 nop # } 8014259c: 8fbf001c lw r31,0x001c(r29) 801425a0: 8fb00018 lw r16,0x0018(r29) 801425a4: 27bd0020 addiu r29,r29,0x0020 801425a8: 03e00008 jr r31 801425ac: 00000000 nop