From 35ec39d188701194b79ed5bfbcc885f1d8e4eb05 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 9 Jan 2022 10:54:15 +1000 Subject: [PATCH] Attempt to decompile mpChooseTrack --- src/game/game_176080.c | 6 +- src/game/mplayer/mplayer.c | 93 +++++++++++++++++++++++++++++- src/include/game/mplayer/mplayer.h | 2 +- src/include/types.h | 2 +- 4 files changed, 95 insertions(+), 8 deletions(-) diff --git a/src/game/game_176080.c b/src/game/game_176080.c index d0c36639f..8dd8c3057 100644 --- a/src/game/game_176080.c +++ b/src/game/game_176080.c @@ -611,7 +611,7 @@ s32 stageGetPrimaryTrack(s32 stagenum) s32 i; if (g_Vars.normmplayerisrunning) { - return mpChooseRandomTrack(); + return mpChooseTrack(); } i = 0; @@ -619,7 +619,7 @@ s32 stageGetPrimaryTrack(s32 stagenum) while (g_StageTracks[i].stagenum) { if (g_StageTracks[i].stagenum == stagenum) { if (g_StageTracks[i].primarytrack == -1) { - return mpChooseRandomTrack(); + return mpChooseTrack(); } return g_StageTracks[i].primarytrack; @@ -628,7 +628,7 @@ s32 stageGetPrimaryTrack(s32 stagenum) i++; } - return mpChooseRandomTrack(); + return mpChooseTrack(); } s32 stageGetAmbientTrack(s32 stagenum) diff --git a/src/game/mplayer/mplayer.c b/src/game/mplayer/mplayer.c index 6babd1cc6..edf7033d8 100644 --- a/src/game/mplayer/mplayer.c +++ b/src/game/mplayer/mplayer.c @@ -276,7 +276,7 @@ void mpInit(void) } } - g_MpLockInfo.unk04 = 0xffffffff; + g_MpLockInfo.unk04 = -1; } // Assign aibot commands to active menu slots @@ -7499,7 +7499,7 @@ s32 mpGetCurrentTrackSlotNum(void) #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( -glabel mpChooseRandomTrack +glabel mpChooseTrack /* f18d564: 27bdffc8 */ addiu $sp,$sp,-56 /* f18d568: afbf0034 */ sw $ra,0x34($sp) /* f18d56c: afb60030 */ sw $s6,0x30($sp) @@ -7713,7 +7713,7 @@ glabel mpChooseRandomTrack ); #else GLOBAL_ASM( -glabel mpChooseRandomTrack +glabel mpChooseTrack /* f18c4c0: 27bdffc8 */ addiu $sp,$sp,-56 /* f18c4c4: afbf0034 */ sw $ra,0x34($sp) /* f18c4c8: afb60030 */ sw $s6,0x30($sp) @@ -7917,6 +7917,93 @@ glabel mpChooseRandomTrack ); #endif +// Mismatch: goal uses shifting to calculate the offset into g_MpTracks +// while the below uses multu. +//s32 mpChooseTrack(void) +//{ +// s32 i; +// s32 tracknum; +// +// if (mpGetUsingMultipleTunes()) { +// s32 numunlocked = mpGetNumUnlockedTracks(); +// s32 numselected = 0; +// +// // 508 +// for (i = 0; i < numunlocked; i++) { +// if (mpIsMultiTrackSlotEnabled(i)) { +// numselected++; +// } +// } +// +// // 528 +// if (numselected == 0) { +// do { +// tracknum = mpGetTrackNumAtSlotIndex(random() % numunlocked); +// } while (tracknum == g_MpLockInfo.unk04); +// +// // 568 +// g_MpLockInfo.unk04 = tracknum; +// g_MusicLife60 = g_MpTracks[tracknum].duration * PALDOWN(60); +// +// return g_MpTracks[tracknum].musicnum; +// } +// +// // 5a4 +// do { +// s32 selectionindex = random() % numselected; +// s32 selectioncount = 0; +// tracknum = -1; // s3 +// +// // 5d8 +// for (i = 0; i < numunlocked; i++) { +// if (mpIsMultiTrackSlotEnabled(i)) { +// if (selectionindex == selectioncount) { +// tracknum = i; +// } +// +// selectioncount++; +// } +// } +// +// // 608 +// if (tracknum == -1) { +// g_MusicLife60 = g_MpTracks[0].duration * PALDOWN(60); +// return g_MpTracks[0].musicnum; +// } +// +// // 634 +// tracknum = mpGetTrackNumAtSlotIndex(tracknum); +// } while (numselected > 1 && tracknum == g_MpLockInfo.unk04); +// +// // 654 +// g_MpLockInfo.unk04 = tracknum; +// g_MusicLife60 = g_MpTracks[tracknum].duration * PALDOWN(60); +// +// return g_MpTracks[tracknum].musicnum; +// } +// +// // 690 +// tracknum = mpGetCurrentTrackSlotNum(); +// +// if (tracknum < 0) { +// s32 numunlocked = mpGetNumUnlockedTracks(); +// +// do { +// tracknum = mpGetTrackNumAtSlotIndex(random() % numunlocked); +// } while (tracknum == g_MpLockInfo.unk04); +// +// g_MpLockInfo.unk04 = tracknum; +// g_MusicLife60 = g_MpTracks[tracknum].duration * PALDOWN(60); +// return g_MpTracks[tracknum].musicnum; +// } +// +// tracknum = mpGetTrackNumAtSlotIndex(tracknum); +// g_MpLockInfo.unk04 = tracknum; +// g_MusicLife60 = g_MpTracks[g_MpLockInfo.unk04].duration * PALDOWN(60); +// +// return g_MpTracks[tracknum].musicnum; +//} + struct mpchrconfig *mpGetChrConfigBySlotNum(s32 slot) { s32 count = 0; diff --git a/src/include/game/mplayer/mplayer.h b/src/include/game/mplayer/mplayer.h index f039adac9..e6c9741d0 100644 --- a/src/include/game/mplayer/mplayer.h +++ b/src/include/game/mplayer/mplayer.h @@ -79,7 +79,7 @@ void mpDisableAllMultiTracks(void); void mpRandomiseMultiTracks(void); void mpSetTrackToRandom(void); s32 mpGetCurrentTrackSlotNum(void); -u32 mpChooseRandomTrack(void); +s32 mpChooseTrack(void); struct mpchrconfig *mpGetChrConfigBySlotNum(s32 slot); s32 mpGetChrIndexBySlotNum(s32 slot); s32 mpGetNumChrs(void); diff --git a/src/include/types.h b/src/include/types.h index 5dfb4f3ed..1c1b012ac 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6133,7 +6133,7 @@ struct mplockinfo { s8 lastwinner; s8 lastloser; s8 unk03; - s32 unk04; // might not be part of struct + s32 unk04; }; struct var8009da60 {