Added default volume support for custom sequences

This commit is contained in:
MysterD 2022-04-10 09:47:17 -07:00
parent 9dc78a0971
commit 2c187bba45
8 changed files with 107 additions and 16 deletions

View file

@ -7019,9 +7019,10 @@ end
--- @param sequenceId integer --- @param sequenceId integer
--- @param bankId integer --- @param bankId integer
--- @param defaultVolume integer
--- @param m64Name string --- @param m64Name string
--- @return nil --- @return nil
function smlua_audio_utils_replace_sequence(sequenceId, bankId, m64Name) function smlua_audio_utils_replace_sequence(sequenceId, bankId, defaultVolume, m64Name)
-- ... -- ...
end end

View file

@ -24564,20 +24564,21 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
## [smlua_audio_utils_replace_sequence](#smlua_audio_utils_replace_sequence) ## [smlua_audio_utils_replace_sequence](#smlua_audio_utils_replace_sequence)
### Lua Example ### Lua Example
`smlua_audio_utils_replace_sequence(sequenceId, bankId, m64Name)` `smlua_audio_utils_replace_sequence(sequenceId, bankId, defaultVolume, m64Name)`
### Parameters ### Parameters
| Field | Type | | Field | Type |
| ----- | ---- | | ----- | ---- |
| sequenceId | `integer` | | sequenceId | `integer` |
| bankId | `integer` | | bankId | `integer` |
| defaultVolume | `integer` |
| m64Name | `string` | | m64Name | `string` |
### Returns ### Returns
- None - None
### C Prototype ### C Prototype
`void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, const char* m64Name);` `void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, u8 defaultVolume, const char* m64Name);`
[:arrow_up_small:](#) [:arrow_up_small:](#)

View file

@ -280,8 +280,7 @@ u16 sLevelAcousticReaches[LEVEL_COUNT] = {
#define VOLUME_RANGE_UNK2 0.8f #define VOLUME_RANGE_UNK2 0.8f
#endif #endif
// Default volume for background music sequences (playing on player 0). const u8 sBackgroundMusicDefaultVolumeDefault[] = {
u8 sBackgroundMusicDefaultVolume[] = {
127, // SEQ_SOUND_PLAYER 127, // SEQ_SOUND_PLAYER
80, // SEQ_EVENT_CUTSCENE_COLLECT_STAR 80, // SEQ_EVENT_CUTSCENE_COLLECT_STAR
80, // SEQ_MENU_TITLE_SCREEN 80, // SEQ_MENU_TITLE_SCREEN
@ -319,7 +318,75 @@ u8 sBackgroundMusicDefaultVolume[] = {
0, // SEQ_EVENT_CUTSCENE_LAKITU (not in JP) 0, // SEQ_EVENT_CUTSCENE_LAKITU (not in JP)
}; };
STATIC_ASSERT(ARRAY_COUNT(sBackgroundMusicDefaultVolume) == SEQ_COUNT, // Default volume for background music sequences (playing on player 0).
u8 sBackgroundMusicDefaultVolume[64] = {
127, // SEQ_SOUND_PLAYER
80, // SEQ_EVENT_CUTSCENE_COLLECT_STAR
80, // SEQ_MENU_TITLE_SCREEN
75, // SEQ_LEVEL_GRASS
70, // SEQ_LEVEL_INSIDE_CASTLE
75, // SEQ_LEVEL_WATER
75, // SEQ_LEVEL_HOT
75, // SEQ_LEVEL_BOSS_KOOPA
70, // SEQ_LEVEL_SNOW
65, // SEQ_LEVEL_SLIDE
80, // SEQ_LEVEL_SPOOKY
65, // SEQ_EVENT_PIRANHA_PLANT
85, // SEQ_LEVEL_UNDERGROUND
75, // SEQ_MENU_STAR_SELECT
65, // SEQ_EVENT_POWERUP
70, // SEQ_EVENT_METAL_CAP
65, // SEQ_EVENT_KOOPA_MESSAGE
70, // SEQ_LEVEL_KOOPA_ROAD
70, // SEQ_EVENT_HIGH_SCORE
65, // SEQ_EVENT_MERRY_GO_ROUND
80, // SEQ_EVENT_RACE
70, // SEQ_EVENT_CUTSCENE_STAR_SPAWN
85, // SEQ_EVENT_BOSS
75, // SEQ_EVENT_CUTSCENE_COLLECT_KEY
75, // SEQ_EVENT_ENDLESS_STAIRS
85, // SEQ_LEVEL_BOSS_KOOPA_FINAL
70, // SEQ_EVENT_CUTSCENE_CREDITS
80, // SEQ_EVENT_SOLVE_PUZZLE
80, // SEQ_EVENT_TOAD_MESSAGE
70, // SEQ_EVENT_PEACH_MESSAGE
75, // SEQ_EVENT_CUTSCENE_INTRO
80, // SEQ_EVENT_CUTSCENE_VICTORY
70, // SEQ_EVENT_CUTSCENE_ENDING
65, // SEQ_MENU_FILE_SELECT
0, // SEQ_EVENT_CUTSCENE_LAKITU (not in JP)
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
75, // SEQ_???
};
STATIC_ASSERT(ARRAY_COUNT(sBackgroundMusicDefaultVolume) == 64,
"change this array if you are adding sequences"); "change this array if you are adding sequences");
u8 sCurrentBackgroundMusicSeqId = SEQUENCE_NONE; u8 sCurrentBackgroundMusicSeqId = SEQUENCE_NONE;
@ -2665,4 +2732,17 @@ void unused_80321460(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s
void unused_80321474(UNUSED s32 arg0) { void unused_80321474(UNUSED s32 arg0) {
} }
void sound_reset_background_music_default_volume(u8 seqId) {
if (seqId >= SEQ_EVENT_CUTSCENE_LAKITU) {
sBackgroundMusicDefaultVolume[seqId] = 75;
return;
}
sBackgroundMusicDefaultVolume[seqId] = sBackgroundMusicDefaultVolumeDefault[seqId];
}
void sound_set_background_music_default_volume(u8 seqId, u8 volume) {
sBackgroundMusicDefaultVolume[seqId] = volume;
}
#endif #endif

View file

@ -68,6 +68,9 @@ void audio_set_sound_mode(u8 arg0);
void audio_init(void); // in load.c void audio_init(void); // in load.c
void sound_reset_background_music_default_volume(u8 seqId);
void sound_set_background_music_default_volume(u8 seqId, u8 volume);
#if defined(VERSION_EU) || defined(VERSION_SH) #if defined(VERSION_EU) || defined(VERSION_SH)
struct SPTask *unused_80321460(); struct SPTask *unused_80321460();
struct SPTask *unused_80321460(void); struct SPTask *unused_80321460(void);

View file

@ -3,6 +3,7 @@
#include "pc/mods/mods_utils.h" #include "pc/mods/mods_utils.h"
#include "pc/crash_handler.h" #include "pc/crash_handler.h"
#include "pc/lua/utils/smlua_text_utils.h" #include "pc/lua/utils/smlua_text_utils.h"
#include "pc/lua/utils/smlua_audio_utils.h"
lua_State* gLuaState = NULL; lua_State* gLuaState = NULL;
u8 gLuaInitializingScript = 0; u8 gLuaInitializingScript = 0;

View file

@ -14621,16 +14621,18 @@ int smlua_func_save_file_set_flags(lua_State* L) {
///////////////////////// /////////////////////////
int smlua_func_smlua_audio_utils_replace_sequence(lua_State* L) { int smlua_func_smlua_audio_utils_replace_sequence(lua_State* L) {
if(!smlua_functions_valid_param_count(L, 3)) { return 0; } if(!smlua_functions_valid_param_count(L, 4)) { return 0; }
u8 sequenceId = smlua_to_integer(L, 1); u8 sequenceId = smlua_to_integer(L, 1);
if (!gSmLuaConvertSuccess) { return 0; } if (!gSmLuaConvertSuccess) { return 0; }
u8 bankId = smlua_to_integer(L, 2); u8 bankId = smlua_to_integer(L, 2);
if (!gSmLuaConvertSuccess) { return 0; } if (!gSmLuaConvertSuccess) { return 0; }
const char* m64Name = smlua_to_string(L, 3); u8 defaultVolume = smlua_to_integer(L, 3);
if (!gSmLuaConvertSuccess) { return 0; }
const char* m64Name = smlua_to_string(L, 4);
if (!gSmLuaConvertSuccess) { return 0; } if (!gSmLuaConvertSuccess) { return 0; }
smlua_audio_utils_replace_sequence(sequenceId, bankId, m64Name); smlua_audio_utils_replace_sequence(sequenceId, bankId, defaultVolume, m64Name);
return 1; return 1;
} }

View file

@ -1,4 +1,5 @@
#include "types.h" #include "types.h"
#include "audio/external.h"
#include "pc/mods/mods.h" #include "pc/mods/mods.h"
#include "pc/lua/smlua.h" #include "pc/lua/smlua.h"
#include "pc/debuglog.h" #include "pc/debuglog.h"
@ -16,14 +17,14 @@ struct AudioOverride {
struct AudioOverride sAudioOverrides[MAX_OVERRIDE] = { 0 }; struct AudioOverride sAudioOverrides[MAX_OVERRIDE] = { 0 };
static smlua_audio_utils_reset(struct AudioOverride* override) { static void smlua_audio_utils_reset(struct AudioOverride* override) {
if (override == NULL) { return; } if (override == NULL) { return; }
override->enabled = false; override->enabled = false;
override->loaded = false; override->loaded = false;
if (override->filename) { if (override->filename) {
free(override->filename); free((char*)override->filename);
override->filename = NULL; override->filename = NULL;
} }
@ -31,13 +32,14 @@ static smlua_audio_utils_reset(struct AudioOverride* override) {
override->bank = 0; override->bank = 0;
if (override->buffer != NULL) { if (override->buffer != NULL) {
free(override->filename); free((u8*)override->buffer);
override->filename = NULL; override->buffer = NULL;
} }
} }
void smlua_audio_utils_reset_all(void) { void smlua_audio_utils_reset_all(void) {
for (s32 i = 0; i < MAX_OVERRIDE; i++) { for (s32 i = 0; i < MAX_OVERRIDE; i++) {
if (sAudioOverrides[i].enabled) { sound_reset_background_music_default_volume(i); }
smlua_audio_utils_reset(&sAudioOverrides[i]); smlua_audio_utils_reset(&sAudioOverrides[i]);
} }
} }
@ -83,7 +85,7 @@ bool smlua_audio_utils_override(u8 sequenceId, s32* bankId, void** seqData) {
return true; return true;
} }
void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, const char* m64Name) { void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, u8 defaultVolume, const char* m64Name) {
if (gLuaActiveMod == NULL) { return; } if (gLuaActiveMod == NULL) { return; }
if (sequenceId >= MAX_OVERRIDE) { if (sequenceId >= MAX_OVERRIDE) {
LOG_LUA("Invalid sequenceId given to smlua_audio_utils_replace_sequence(): %d", sequenceId); LOG_LUA("Invalid sequenceId given to smlua_audio_utils_replace_sequence(): %d", sequenceId);
@ -111,6 +113,7 @@ void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, const char* m6
override->filename = strdup(fullPath); override->filename = strdup(fullPath);
override->enabled = true; override->enabled = true;
override->bank = bankId; override->bank = bankId;
sound_set_background_music_default_volume(sequenceId, defaultVolume);
return; return;
} }
} }

View file

@ -1,8 +1,8 @@
#ifndef SMLUA_AUDIO_UTILS_H #ifndef SMLUA_AUDIO_UTILS_H
#define SMLUA_AUDIO_UTILS_H #define SMLUA_AUDIO_UTILS_H
void smlua_audio_utils_reset_all(void);
bool smlua_audio_utils_override(u8 sequenceId, s32* bankId, void** seqData); bool smlua_audio_utils_override(u8 sequenceId, s32* bankId, void** seqData);
void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, u8 defaultVolume, const char* m64Name);
void smlua_audio_utils_replace_sequence(u8 sequenceId, u8 bankId, const char* m64Name);
#endif #endif