- Refactor cause in draw_game_over_screen to an immediately invoked lambda, eliminating dead store warning - Rename sound effect files to standard-compliant names without double underscores to prevent reserved macro warnings in soundbank.h - Update source/game_audio.cpp to use clean SFX_* macro identifiers - Add codechecker_skip.txt to ignore external devkitPro toolchain headers - Ignore .codechecker/ output artifacts directory in .gitignore - Update AGENTS.md file tree and sound asset references
142 lines
2.7 KiB
C++
142 lines
2.7 KiB
C++
#include "game_audio.h"
|
|
|
|
#include "soundbank.h"
|
|
#include "soundbank_bin.h"
|
|
|
|
void audio_setup(AudioContext &audio) {
|
|
mmInitDefaultMem((mm_addr)(soundbank_bin));
|
|
|
|
mmLoad(MOD_0RIGIN);
|
|
|
|
mmLoadEffect(SFX_PICKUP);
|
|
mmLoadEffect(SFX_BOOM);
|
|
mmLoadEffect(SFX_PAUSE);
|
|
mmLoadEffect(SFX_UNPAUSE);
|
|
mmLoadEffect(SFX_PLOP);
|
|
mmLoadEffect(SFX_SAD_TROMBONE);
|
|
mmLoadEffect(SFX_DENIED);
|
|
|
|
audio.sfx_pickup = {
|
|
{ SFX_PICKUP },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
0,
|
|
255,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_boom = {
|
|
{ SFX_BOOM },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
1,
|
|
255,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_pause = {
|
|
{ SFX_PAUSE },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
2,
|
|
255,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_unpause = {
|
|
{ SFX_UNPAUSE },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
3,
|
|
255,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_plop = {
|
|
{ SFX_PLOP },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
4,
|
|
128,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_fail = {
|
|
{ SFX_SAD_TROMBONE },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
4,
|
|
255,
|
|
128,
|
|
};
|
|
|
|
audio.sfx_denied = {
|
|
{ SFX_DENIED },
|
|
static_cast<int>(1.0F * (1 << 10)),
|
|
5,
|
|
160,
|
|
128,
|
|
};
|
|
}
|
|
|
|
void audio_start_music(const AudioContext &audio) {
|
|
mmStart(MOD_0RIGIN, MM_PLAY_LOOP);
|
|
if (!audio.musicEnabled) {
|
|
mmPause();
|
|
}
|
|
}
|
|
|
|
void audio_stop_music() {
|
|
mmStop();
|
|
}
|
|
|
|
void audio_pause_music_if_enabled(const AudioContext &audio) {
|
|
if (audio.musicEnabled) {
|
|
mmPause();
|
|
}
|
|
}
|
|
|
|
void audio_resume_music_if_enabled(const AudioContext &audio) {
|
|
if (audio.musicEnabled) {
|
|
mmResume();
|
|
}
|
|
}
|
|
|
|
void audio_play_pickup(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_pickup);
|
|
}
|
|
|
|
void audio_play_boom(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_boom);
|
|
}
|
|
|
|
void audio_play_plop(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_plop);
|
|
}
|
|
|
|
void audio_play_pause(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_pause);
|
|
}
|
|
|
|
void audio_play_unpause(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_unpause);
|
|
}
|
|
|
|
void audio_play_fail(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_fail);
|
|
}
|
|
|
|
void audio_play_denied(const AudioContext &audio) {
|
|
mmEffectEx(&audio.sfx_denied);
|
|
}
|
|
|
|
bool audio_toggle_music(AudioContext &audio) {
|
|
audio.musicEnabled = !audio.musicEnabled;
|
|
|
|
if (audio.musicEnabled) {
|
|
mmResume();
|
|
} else {
|
|
mmPause();
|
|
}
|
|
|
|
return audio.musicEnabled;
|
|
}
|
|
|
|
bool audio_is_music_enabled(const AudioContext &audio) {
|
|
return audio.musicEnabled;
|
|
}
|