Decompile mpCalculateLockIfLastWinnerOrLoser

This commit is contained in:
Ryan Dwyer 2020-08-20 20:06:09 +10:00
parent 6e2472b2bc
commit 574091e310
6 changed files with 44 additions and 72 deletions

View File

@ -561,7 +561,7 @@ glabel var7f1a863c
.L0f01c588:
/* f01c588: 1621fff0 */ bne $s1,$at,.L0f01c54c
/* f01c58c: 24630e70 */ addiu $v1,$v1,0x0e70
/* f01c590: 0fc63005 */ jal func0f18c014
/* f01c590: 0fc63005 */ jal mpCalculateLockIfLastWinnerOrLoser
/* f01c594: 00000000 */ nop
/* f01c598: 0fc66d50 */ jal func0f19b540
/* f01c59c: 00000000 */ nop
@ -2114,7 +2114,7 @@ glabel var7f1a863c
// }
// }
//
// func0f18c014();
// mpCalculateLockIfLastWinnerOrLoser();
// func0f19b540();
// }
//

View File

@ -838,8 +838,8 @@ glabel func0f188210
/* f1882dc: 0fc6256f */ jal mpSetWeaponSet
/* f1882e0: 00002025 */ or $a0,$zero,$zero
.L0f1882e4:
/* f1882e4: 3c02800b */ lui $v0,%hi(g_MpLockPlayerNum)
/* f1882e8: 2442cc20 */ addiu $v0,$v0,%lo(g_MpLockPlayerNum)
/* f1882e4: 3c02800b */ lui $v0,%hi(g_MpLockInfo)
/* f1882e8: 2442cc20 */ addiu $v0,$v0,%lo(g_MpLockInfo)
/* f1882ec: 2403ffff */ addiu $v1,$zero,-1
/* f1882f0: 3c04800a */ lui $a0,%hi(g_Vars)
/* f1882f4: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars)
@ -1276,8 +1276,8 @@ glabel func0f1885e4
/* f1888d4: 1490ffcf */ bne $a0,$s0,.L0f188814
/* f1888d8: 24c60004 */ addiu $a2,$a2,0x4
.L0f1888dc:
/* f1888dc: 3c11800b */ lui $s1,%hi(g_MpLockPlayerNum)
/* f1888e0: 2631cc20 */ addiu $s1,$s1,%lo(g_MpLockPlayerNum)
/* f1888dc: 3c11800b */ lui $s1,%hi(g_MpLockInfo)
/* f1888e0: 2631cc20 */ addiu $s1,$s1,%lo(g_MpLockInfo)
/* f1888e4: a22d0001 */ sb $t5,0x1($s1)
/* f1888e8: a23f0002 */ sb $ra,0x2($s1)
/* f1888ec: 3c19800b */ lui $t9,%hi(g_MpSetup+0x88)
@ -5204,9 +5204,9 @@ bool mpSetLock(s32 locktype, s32 playernum)
g_MpSetupSaveFile.locktype = locktype;
if (g_MpSetupSaveFile.locktype == MPLOCKTYPE_RANDOM) {
g_MpLockPlayerNum = mpChooseRandomLockPlayer();
g_MpLockInfo.lockedplayernum = mpChooseRandomLockPlayer();
} else {
g_MpLockPlayerNum = playernum;
g_MpLockInfo.lockedplayernum = playernum;
}
return true;
@ -5219,7 +5219,7 @@ u32 mpGetLockType(void)
u32 mpGetLockPlayerNum(void)
{
return g_MpLockPlayerNum;
return g_MpLockInfo.lockedplayernum;
}
bool mpIsPlayerLockedOut(u32 playernum)
@ -5228,64 +5228,30 @@ bool mpIsPlayerLockedOut(u32 playernum)
return false;
}
if (g_MpLockPlayerNum == playernum) {
if (g_MpLockInfo.lockedplayernum == playernum) {
return false;
}
return true;
}
GLOBAL_ASM(
glabel func0f18c014
/* f18c014: 3c04800b */ lui $a0,%hi(g_MpSetup+0x88)
/* f18c018: 9084cc10 */ lbu $a0,%lo(g_MpSetup+0x88)($a0)
/* f18c01c: 27bdffe8 */ addiu $sp,$sp,-24
/* f18c020: 24010001 */ addiu $at,$zero,0x1
/* f18c024: 14810007 */ bne $a0,$at,.L0f18c044
/* f18c028: afbf0014 */ sw $ra,0x14($sp)
/* f18c02c: 3c03800b */ lui $v1,%hi(g_MpLockPlayerNum)
/* f18c030: 2463cc20 */ addiu $v1,$v1,%lo(g_MpLockPlayerNum)
/* f18c034: 80620001 */ lb $v0,0x1($v1)
/* f18c038: 04400002 */ bltz $v0,.L0f18c044
/* f18c03c: 00000000 */ nop
/* f18c040: a0620000 */ sb $v0,0x0($v1)
.L0f18c044:
/* f18c044: 3c03800b */ lui $v1,%hi(g_MpLockPlayerNum)
/* f18c048: 24010002 */ addiu $at,$zero,0x2
/* f18c04c: 14810005 */ bne $a0,$at,.L0f18c064
/* f18c050: 2463cc20 */ addiu $v1,$v1,%lo(g_MpLockPlayerNum)
/* f18c054: 80620002 */ lb $v0,0x2($v1)
/* f18c058: 04420003 */ bltzl $v0,.L0f18c068
/* f18c05c: 80620000 */ lb $v0,0x0($v1)
/* f18c060: a0620000 */ sb $v0,0x0($v1)
.L0f18c064:
/* f18c064: 80620000 */ lb $v0,0x0($v1)
.L0f18c068:
/* f18c068: 24010005 */ addiu $at,$zero,0x5
/* f18c06c: 04420011 */ bltzl $v0,.L0f18c0b4
/* f18c070: 8fbf0014 */ lw $ra,0x14($sp)
/* f18c074: 1081000e */ beq $a0,$at,.L0f18c0b0
/* f18c078: 3c0e800b */ lui $t6,%hi(g_MpSetup+0x16)
/* f18c07c: 95cecb9e */ lhu $t6,%lo(g_MpSetup+0x16)($t6)
/* f18c080: 240f0001 */ addiu $t7,$zero,0x1
/* f18c084: 004fc004 */ sllv $t8,$t7,$v0
/* f18c088: 01d8c824 */ and $t9,$t6,$t8
/* f18c08c: 17200008 */ bnez $t9,.L0f18c0b0
/* f18c090: 2408ffff */ addiu $t0,$zero,-1
/* f18c094: a0680002 */ sb $t0,0x2($v1)
/* f18c098: 80690002 */ lb $t1,0x2($v1)
/* f18c09c: 0fc62fba */ jal mpChooseRandomLockPlayer
/* f18c0a0: a0690001 */ sb $t1,0x1($v1)
/* f18c0a4: 3c03800b */ lui $v1,%hi(g_MpLockPlayerNum)
/* f18c0a8: 2463cc20 */ addiu $v1,$v1,%lo(g_MpLockPlayerNum)
/* f18c0ac: a0620000 */ sb $v0,0x0($v1)
.L0f18c0b0:
/* f18c0b0: 8fbf0014 */ lw $ra,0x14($sp)
.L0f18c0b4:
/* f18c0b4: 27bd0018 */ addiu $sp,$sp,0x18
/* f18c0b8: 03e00008 */ jr $ra
/* f18c0bc: 00000000 */ nop
);
void mpCalculateLockIfLastWinnerOrLoser(void)
{
if (g_MpSetupSaveFile.locktype == MPLOCKTYPE_LASTWINNER && g_MpLockInfo.lastwinner >= 0) {
g_MpLockInfo.lockedplayernum = g_MpLockInfo.lastwinner;
}
if (g_MpSetupSaveFile.locktype == MPLOCKTYPE_LASTLOSER && g_MpLockInfo.lastloser >= 0) {
g_MpLockInfo.lockedplayernum = g_MpLockInfo.lastloser;
}
if (g_MpLockInfo.lockedplayernum >= 0
&& g_MpSetupSaveFile.locktype != MPLOCKTYPE_CHALLENGE
&& (g_MpSetup.chrslots & (1 << g_MpLockInfo.lockedplayernum)) == 0) {
g_MpLockInfo.lastwinner = g_MpLockInfo.lastloser = -1;
g_MpLockInfo.lockedplayernum = mpChooseRandomLockPlayer();
}
}
GLOBAL_ASM(
glabel mpIsTrackUnlocked
@ -5514,8 +5480,8 @@ glabel func0f18c4c0
/* f18c524: 00000000 */ nop
.L0f18c528:
/* f18c528: 16a0001e */ bnez $s5,.L0f18c5a4
/* f18c52c: 3c16800b */ lui $s6,%hi(g_MpLockPlayerNum)
/* f18c530: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockPlayerNum)
/* f18c52c: 3c16800b */ lui $s6,%hi(g_MpLockInfo)
/* f18c530: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockInfo)
.L0f18c534:
/* f18c534: 0c004b70 */ jal random
/* f18c538: 00000000 */ nop
@ -5547,8 +5513,8 @@ glabel func0f18c4c0
/* f18c59c: 10000073 */ b .L0f18c76c
/* f18c5a0: 00031242 */ srl $v0,$v1,0x9
.L0f18c5a4:
/* f18c5a4: 3c16800b */ lui $s6,%hi(g_MpLockPlayerNum)
/* f18c5a8: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockPlayerNum)
/* f18c5a4: 3c16800b */ lui $s6,%hi(g_MpLockInfo)
/* f18c5a8: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockInfo)
/* f18c5ac: 00008025 */ or $s0,$zero,$zero
.L0f18c5b0:
/* f18c5b0: 0c004b70 */ jal random
@ -5621,9 +5587,9 @@ glabel func0f18c4c0
/* f18c69c: 00409825 */ or $s3,$v0,$zero
/* f18c6a0: 0fc63080 */ jal func0f18c200
/* f18c6a4: 00000000 */ nop
/* f18c6a8: 3c16800b */ lui $s6,%hi(g_MpLockPlayerNum)
/* f18c6a8: 3c16800b */ lui $s6,%hi(g_MpLockInfo)
/* f18c6ac: 00408025 */ or $s0,$v0,$zero
/* f18c6b0: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockPlayerNum)
/* f18c6b0: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockInfo)
.L0f18c6b4:
/* f18c6b4: 0c004b70 */ jal random
/* f18c6b8: 00000000 */ nop
@ -5658,9 +5624,9 @@ glabel func0f18c4c0
/* f18c724: 0fc63065 */ jal mpGetTrackNumAtSlotIndex
/* f18c728: 02602025 */ or $a0,$s3,$zero
/* f18c72c: 00024080 */ sll $t0,$v0,0x2
/* f18c730: 3c16800b */ lui $s6,%hi(g_MpLockPlayerNum)
/* f18c730: 3c16800b */ lui $s6,%hi(g_MpLockInfo)
/* f18c734: 01024023 */ subu $t0,$t0,$v0
/* f18c738: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockPlayerNum)
/* f18c738: 26d6cc20 */ addiu $s6,$s6,%lo(g_MpLockInfo)
/* f18c73c: 00084040 */ sll $t0,$t0,0x1
/* f18c740: 3c038008 */ lui $v1,%hi(g_MpTracks)
/* f18c744: aec20004 */ sw $v0,0x4($s6)

View File

@ -20315,7 +20315,7 @@ u8 g_ActiveMenuMpBotCommands[16] = {0};
struct mpsetup g_MpSetup = {0};
struct savefile_setup g_MpSetupSaveFile = {0};
u32 var800acc1c = 0;
s8 g_MpLockPlayerNum = 0;
struct mplockinfo g_MpLockInfo = {0};
u32 var800acc24 = 0;
u32 var800acc28[18] = {0};
u32 var800acc70 = 0;

View File

@ -61,7 +61,7 @@ bool mpSetLock(s32 locktype, s32 playernum);
u32 mpGetLockType(void);
u32 mpGetLockPlayerNum(void);
bool mpIsPlayerLockedOut(u32 playernum);
void func0f18c014(void);
void mpCalculateLockIfLastWinnerOrLoser(void);
bool mpIsTrackUnlocked(s32 tracknum);
s32 mpGetTrackSlotIndex(s32 tracknum);
s32 mpGetTrackNumAtSlotIndex(s32 slotindex);

View File

@ -817,7 +817,7 @@ extern struct mpplayer g_MpPlayers[6];
extern u8 g_ActiveMenuMpBotCommands[16];
extern struct mpsetup g_MpSetup;
extern struct savefile_setup g_MpSetupSaveFile;
extern s8 g_MpLockPlayerNum;
extern struct mplockinfo g_MpLockInfo;
extern u32 var800acc28[18];
extern u32 var800acc70;
extern u32 var800acc74;

View File

@ -6398,4 +6398,10 @@ struct var8009d510 {
/*0x40*/ u32 unk40;
};
struct mplockinfo {
s8 lockedplayernum;
s8 lastwinner;
s8 lastloser;
};
#endif