diff --git a/src/game/game_107fb0.c b/src/game/game_107fb0.c index 71ce8b72a..3401c10c3 100644 --- a/src/game/game_107fb0.c +++ b/src/game/game_107fb0.c @@ -729,7 +729,7 @@ bool filemgrAttemptOperation(s32 arg0, bool closeonsuccess) break; case FILEOP_SAVE_MPPLAYER: errno = mpplayerfileSave( - g_Menus[g_MpPlayerNum].unke44, arg0, + (s32) g_Menus[g_MpPlayerNum].unke44, arg0, g_Menus[g_MpPlayerNum].unke48, g_Menus[g_MpPlayerNum].unke4c); break; diff --git a/src/game/mplayer/mplayer.c b/src/game/mplayer/mplayer.c index c18ad1778..184408d1d 100644 --- a/src/game/mplayer/mplayer.c +++ b/src/game/mplayer/mplayer.c @@ -8961,61 +8961,33 @@ void mpplayerfileGetOverview(char *arg0, char *name, u32 *playtime) *playtime = savebufferReadBits(&buffer, 28); } -GLOBAL_ASM( -glabel mpplayerfileSave -/* f18d9fc: 27bdfef8 */ addiu $sp,$sp,-264 -/* f18da00: afbf001c */ sw $ra,0x1c($sp) -/* f18da04: afa40108 */ sw $a0,0x108($sp) -/* f18da08: afa5010c */ sw $a1,0x10c($sp) -/* f18da0c: afa60110 */ sw $a2,0x110($sp) -/* f18da10: 04a00026 */ bltz $a1,.L0f18daac -/* f18da14: afa70114 */ sw $a3,0x114($sp) -/* f18da18: 0fc35517 */ jal savebufferClear -/* f18da1c: 27a40020 */ addiu $a0,$sp,0x20 -/* f18da20: 8fa40108 */ lw $a0,0x108($sp) -/* f18da24: 0fc63571 */ jal func0f18d5c4 -/* f18da28: 27a50020 */ addiu $a1,$sp,0x20 -/* f18da2c: 0fc35531 */ jal func0f0d54c4 -/* f18da30: 27a40020 */ addiu $a0,$sp,0x20 -/* f18da34: 240f0001 */ addiu $t7,$zero,0x1 -/* f18da38: 3c018007 */ lui $at,%hi(g_FileLists+0x18) -/* f18da3c: 27b80100 */ addiu $t8,$sp,0x100 -/* f18da40: ac2f5bd8 */ sw $t7,%lo(g_FileLists+0x18)($at) -/* f18da44: afb80010 */ sw $t8,0x10($sp) -/* f18da48: 83a4010f */ lb $a0,0x10f($sp) -/* f18da4c: 8fa50110 */ lw $a1,0x110($sp) -/* f18da50: 24060020 */ addiu $a2,$zero,0x20 -/* f18da54: 27a70024 */ addiu $a3,$sp,0x24 -/* f18da58: 0fc45a0a */ jal func0f116828 -/* f18da5c: afa00014 */ sw $zero,0x14($sp) -/* f18da60: 1440000e */ bnez $v0,.L0f18da9c -/* f18da64: 00401825 */ or $v1,$v0,$zero -/* f18da68: 8fb90108 */ lw $t9,0x108($sp) -/* f18da6c: 3c09800b */ lui $t1,%hi(g_MpPlayers) -/* f18da70: 8faa0100 */ lw $t2,0x100($sp) -/* f18da74: 00194080 */ sll $t0,$t9,0x2 -/* f18da78: 01194021 */ addu $t0,$t0,$t9 -/* f18da7c: 97ab0116 */ lhu $t3,0x116($sp) -/* f18da80: 00084140 */ sll $t0,$t0,0x5 -/* f18da84: 2529c7b8 */ addiu $t1,$t1,%lo(g_MpPlayers) -/* f18da88: 01091821 */ addu $v1,$t0,$t1 -/* f18da8c: 00001025 */ or $v0,$zero,$zero -/* f18da90: ac6a004c */ sw $t2,0x4c($v1) -/* f18da94: 10000006 */ b .L0f18dab0 -/* f18da98: a46b0050 */ sh $t3,0x50($v1) -.L0f18da9c: -/* f18da9c: 3c01800a */ lui $at,%hi(var800a21f8) -/* f18daa0: ac2321f8 */ sw $v1,%lo(var800a21f8)($at) -/* f18daa4: 10000002 */ b .L0f18dab0 -/* f18daa8: 2402ffff */ addiu $v0,$zero,-1 -.L0f18daac: -/* f18daac: 2402ffff */ addiu $v0,$zero,-1 -.L0f18dab0: -/* f18dab0: 8fbf001c */ lw $ra,0x1c($sp) -/* f18dab4: 27bd0108 */ addiu $sp,$sp,0x108 -/* f18dab8: 03e00008 */ jr $ra -/* f18dabc: 00000000 */ nop -); +s32 mpplayerfileSave(s32 playernum, s32 arg1, s32 arg2, u16 arg3) +{ + s32 tmp; + s32 uStack8; + struct savebuffer buffer; + + if (arg1 >= 0) { + savebufferClear(&buffer); + func0f18d5c4(playernum, &buffer); + func0f0d54c4(&buffer); + + var80075bd0[2] = true; + + tmp = func0f116828(arg1, arg2, 0x20, buffer.bytes, &uStack8, 0); + + if (tmp == 0) { + g_MpPlayers[playernum].unk4c.unk00 = uStack8; + g_MpPlayers[playernum].unk4c.unk04 = arg3; + return 0; + } + + var800a21f8.unk00 = tmp; + return -1; + } + + return -1; +} s32 mpplayerfileLoad(s32 playernum, s32 arg1, s32 arg2, u16 arg3) { diff --git a/src/include/game/mplayer/mplayer.h b/src/include/game/mplayer/mplayer.h index 7880e5a08..ec70893c9 100644 --- a/src/include/game/mplayer/mplayer.h +++ b/src/include/game/mplayer/mplayer.h @@ -100,9 +100,9 @@ s32 func0f18d0e8(s32 arg0); void mpplayerfileLoadGunFuncs(struct savebuffer *buffer, s32 playernum); u32 func0f18d238(void); void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2); -u32 func0f18d5c4(void); +void func0f18d5c4(s32 playernum, struct savebuffer *buffer); void mpplayerfileGetOverview(char *arg0, char *name, u32 *playtime); -s32 mpplayerfileSave(void *arg0, s32 arg1, s32 arg2, u16 arg3); +s32 mpplayerfileSave(s32 playernum, s32 arg1, s32 arg2, u16 arg3); s32 mpplayerfileLoad(s32 playernum, s32 arg1, s32 arg2, u16 arg3); s32 mpGetNumPresets(void); bool mpIsPresetUnlocked(s32 presetnum);