From 1556a4def25e2d0db77aec7ee126a4cb12e9b231 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 8 Jan 2026 01:58:55 +0000 Subject: [PATCH] Fix bgm slider (#54) * Fix BGM slider muting some SFXs * formatting * actually fix BGM slider --- patches/sound_patches.c | 127 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 121 insertions(+), 6 deletions(-) diff --git a/patches/sound_patches.c b/patches/sound_patches.c index bd40793..bed3a42 100644 --- a/patches/sound_patches.c +++ b/patches/sound_patches.c @@ -5,6 +5,108 @@ #include "../lib/bk-decomp/src/core1/musicplayer.h" #include "sound.h" +// @recomp The music player is often used to play sound effects. Therefore, check if track_id is actually music. +bool isMusic(s16 trackId) { + switch (trackId) { + case COMUSIC_2_MM: + case COMUSIC_3_FP_TWINKLIES_TALKING: + case COMUSIC_4_MMM_CLOCK_VERSION: + case COMUSIC_5_TTC_VACATION_VERSION: + case COMUSIC_6_BGS: + case COMUSIC_7_CC_MUTANT_CRABS: + case COMUSIC_8_STARTUP_MUSICAL: + case COMUSIC_F_MMM_ALTERNATIVE: + case COMUSIC_10_SM: + case COMUSIC_12_TTC_NIPPER: + case COMUSIC_13_INSIDE_SANDCASTLE: + case COMUSIC_1B_MYSTERIOUS_INDOORS: + case COMUSIC_1C_CC_ALTERNATIVE: + case COMUSIC_1E_GL_MM_VERSION: + case COMUSIC_1F_CC_INSIDE_CLANKER: + case COMUSIC_20_GV_ALTERNATIVE: + case COMUSIC_21_MMM_INSIDE_MMM_MANSION: + case COMUSIC_22_MMM: + case COMUSIC_23_MMM_INSIDE_CHURCH: + case COMUSIC_24_GV_INSIDE_PYRAMID: + case COMUSIC_25_USING_GOLD_FEATHERS: + case COMUSIC_26_GV_SANDYBUTT_DANGER: + case COMUSIC_27_GV_RUBEES_SONG: + case COMUSIC_28_SOMETHING_AQUATIC: + case COMUSIC_29_CCW_SUMMER: + case COMUSIC_2A_CCW_WINTER: + case COMUSIC_2E_CCW_FALL_AQUATIC: + case COMUSIC_2F_CCW_HUBROOM: + case COMUSIC_32_STARTUP_LOGO_SCENE: + case COMUSIC_33_RBB_ALTERNATIVE: + case COMUSIC_34_SNACKER_DANGER: + case COMUSIC_35_RBB_MASCHINE_ROOM_AQUATIC: + case COMUSIC_39_DK64_FUNGI_FOREST: + case COMUSIC_3A_FP_BOGGY_RACE: + case COMUSIC_41_MUMBOS_HUT: + case COMUSIC_44_CCW_NABNUT: + case COMUSIC_45_CCW_NABNUT_ATTIC_A: + case COMUSIC_46_CCW_SPRING: + case COMUSIC_47_BGS_INSIDE_TANKTUP: + case COMUSIC_48_CCW_ALTERNATIVE_A: + case COMUSIC_49_CCW_ALTERNATIVE_QUICK: + case COMUSIC_4A_RBB_INSIDE_CONTAINER: + case COMUSIC_4B_CCW_ZUBBA_FIGHT: + case COMUSIC_4C_RBB_CREWMATE_CABIN: + case COMUSIC_50_GL_TTC_VERSION: + case COMUSIC_51_GL_CCW_VERSION: + case COMUSIC_52_GL_BGS_RBB_VERSION: + case COMUSIC_53_GL_FP_VERSION_A: + case COMUSIC_54_GL_GV_VERSION: + case COMUSIC_55_BGS_MR_VILE: + case COMUSIC_56_SM_HANGBRIDGE: + case COMUSIC_57_TURBO_TRAINERS: + case COMUSIC_58_WADING_BOOTS: + case COMUSIC_59_GL_FP_VERSION_B: + case COMUSIC_5A_FP_IGLOO_SAD: + case COMUSIC_5B_FP_IGLOO_HAPPY: + case COMUSIC_5D_GL_MMM_VERSION: + case COMUSIC_5E_GL_MMM_RBB_VERSION: + case COMUSIC_5F_CCW_ALTERNATIVE_B: + case COMUSIC_60_NABNUT_ATTIC_B: + case COMUSIC_62_RBB_BOOMBOX: + case COMUSIC_63_GL_FF_VERSION: + case COMUSIC_64_WORLD_OPENING_A: + case COMUSIC_65_WORLD_OPENING_B: + case COMUSIC_66_FP_INSIDE_WOZZAS_CAVE: + case COMUSIC_68_TWINKLY_MINIGAME: + case COMUSIC_6A_MMM_TUMBLARS_SHED: + case COMUSIC_6B_FP_ALTERNATIVE: + case COMUSIC_6C_INTRO_TOWER_SCENE: + case COMUSIC_6D_CCW_GNAWTYS_HOUSE: + case COMUSIC_6E_GAME_SELECT: + case COMUSIC_6F_PAUSE_SCREEN: + case COMUSIC_70_MMM_INSIDE_LOGGO: + case COMUSIC_71_FF: + case MUSIC_BGS_FLIBBIT_FIGHT: + case COMUSIC_74_GL_FINAL_SECTION: + case COMUSIC_7A_BRENTILDA: + case COMUSIC_83_GV_SNS: + case COMUSIC_84_TTC_SNS: + case COMUSIC_85_FP_SNS: + case COMUSIC_86_MMM_SNS: + case COMUSIC_87_MMM_SNS_HAPPIER: + case COMUSIC_88_BIG_SNS_FANFARE: + case COMUSIC_8E_CREDITS: + case COMUSIC_94_BBONUS: + case COMUSIC_95_BBONUS_A: + case COMUSIC_AC_GOOD_ENDING: + case MUSIC_MUMBO_BBQ: + case COMUSIC_A8_KLUNGO_BY_FALLEN_GRUNTY: + case COMUSIC_AA_BEACH: + case COMUSIC_91_GRUNTY_FALLING: + case COMUSIC_80_GAME_OVER_CUTSCENE: + case COMUSIC_1_FINAL_BATTLE: + return TRUE; + default: + return FALSE; + } +} + extern MusicTrack D_80281720[6]; extern CoMusic *musicTracks; extern int D_80276E34; @@ -19,8 +121,12 @@ void func_802599B4(CoMusic *this); // @recomp Patched to incorporate the bgm player volume in the setvol command for music tracks. RECOMP_PATCH void musicTrack_setVolume(u8 arg0, s16 arg1) { D_80281720[arg0].unk0 = arg1; - alCSPSetVol(&D_80281720[arg0].cseqp, (s16)(arg1 * recomp_get_bgm_volume())); + if (isMusic(musicTracks[arg0].track_id)) { + alCSPSetVol(&D_80281720[arg0].cseqp, (s16)(arg1 * recomp_get_bgm_volume())); + } else { + alCSPSetVol(&D_80281720[arg0].cseqp, arg1); + } if (D_80281720[arg0].unk3 && arg1) { func_8024FCE0(arg0, arg1); } else if (!D_80281720[arg0].unk3 && arg1 == 0) { @@ -54,8 +160,10 @@ RECOMP_PATCH void coMusicPlayer_update(void) { if (!D_80276E34) { // @recomp If there are no pending track updates, send a volume command for each track to incorporate the BGM volume. for (var_s0 = musicTracks; var_s0 < &musicTracks[6]; var_s0++) { - temp_lo = var_s0 - musicTracks; - alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + if (isMusic(var_s0->track_id)) { + temp_lo = var_s0 - musicTracks; + alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + } } return; } @@ -75,7 +183,9 @@ RECOMP_PATCH void coMusicPlayer_update(void) { D_80276E34 = TRUE; // @recomp Send a volume command to incorporate the current BGM volume if the track's volume wasn't changed. - alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + if (isMusic(var_s0->track_id)) { + alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + } continue; } @@ -116,7 +226,10 @@ RECOMP_PATCH void coMusicPlayer_update(void) { } // @recomp Send a volume command to incorporate the current BGM volume if the track's volume wasn't changed. - alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + if (isMusic(var_s0->track_id)) { + alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + } + var_s0->unk12 = 0; } @@ -124,7 +237,9 @@ RECOMP_PATCH void coMusicPlayer_update(void) { else { temp_lo = var_s0 - musicTracks; // @recomp Send a volume command to incorporate the current BGM volume if the track's volume wasn't changed. - alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + if (isMusic(var_s0->track_id)) { + alCSPSetVol(&D_80281720[temp_lo].cseqp, (s16)(var_s0->volume * recomp_get_bgm_volume())); + } } } }