mirror of https://github.com/pmret/papermario.git
275 lines
7.3 KiB
C
275 lines
7.3 KiB
C
#include "common.h"
|
|
#include "map.h"
|
|
|
|
void transition_music_volume_to(s16 volume);
|
|
|
|
/// If the given song ID is present in gSongsUsingVariationFlag, returns the current
|
|
/// map's `songVariation & 1` value. Otherwise, returns -1.
|
|
///
|
|
/// @see gSongsUsingVariationFlag
|
|
/// @returns -1: no override; 0: override to variation 0; 1 override to variation 1
|
|
s32 get_song_variation_override_for_cur_map(SongID songID) {
|
|
u32 i = 0;
|
|
Area* areas = gAreas;
|
|
SongID* allowed = gSongsUsingVariationFlag;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(gSongsUsingVariationFlag); i++) {
|
|
if (allowed[i] == songID) {
|
|
Map* map = &areas[GAME_STATUS->areaID].maps[GAME_STATUS->mapID];
|
|
|
|
return map->songVariation & 1;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
void func_8014A498(void) {
|
|
MusicPlayer* src; // TODO: remove this temp when .data section for this file (incl. D_8014F6F0) is set up
|
|
s32 i;
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
musicPlayers[i] = *(src = &D_8014F6F0);
|
|
}
|
|
|
|
gMusicTargetVolume = 8;
|
|
gMusicUnkVolume2 = 8;
|
|
gMusicCurrentVolume = 8;
|
|
func_800561A4(8);
|
|
}
|
|
|
|
void func_8014A52C(void) {
|
|
gMusicTargetVolume = 8;
|
|
gMusicUnkVolume2 = 8;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014A548);
|
|
|
|
s32 _set_music_track(s32 playerIndex, SongID songID, s32 variation, s32 fadeOutTime, s16 volume) {
|
|
GameStatus* gameStatus = GAME_STATUS;
|
|
|
|
if (gameStatus->demoState != 0) {
|
|
return 1;
|
|
} else {
|
|
// TODO: these two lines likely a MUSIC_PLAYER(idx) macro
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!gameStatus->musicEnabled) {
|
|
func_800559C4(musicPlayer->unk_18);
|
|
musicPlayer->flags &= ~1;
|
|
|
|
return 1;
|
|
} else {
|
|
s32 override = get_song_variation_override_for_cur_map(songID);
|
|
if (override >= 0) {
|
|
variation = override;
|
|
}
|
|
|
|
if (musicPlayer->songID == songID && musicPlayer->variation == variation) {
|
|
transition_music_volume_to(volume);
|
|
|
|
if (musicPlayer->flags & 4) {
|
|
func_80055B80(musicPlayer->unk_18);
|
|
musicPlayer->flags &= ~4;
|
|
}
|
|
|
|
return 2;
|
|
}
|
|
|
|
gMusicUnkVolume = volume;
|
|
musicPlayer->songID = songID;
|
|
musicPlayer->variation = variation;
|
|
musicPlayer->fadeOutTime = fadeOutTime;
|
|
musicPlayer->unk_02 = 1;
|
|
musicPlayer->flags &= ~2;
|
|
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 set_music_track(s32 playerIndex, SongID songID, s32 variation, s32 fadeOutTime, s16 volume) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
|
|
musicPlayers[playerIndex].flags &= ~8;
|
|
|
|
return _set_music_track(playerIndex, songID, variation, fadeOutTime, volume);
|
|
}
|
|
|
|
s32 func_8014A964(s32 playerIndex, SongID songID, s32 variation, s32 fadeInTime, s16 arg4, s16 arg5) {
|
|
GameStatus* gameStatus = GAME_STATUS;
|
|
|
|
if (gameStatus->demoState != 0) {
|
|
return 1;
|
|
} else {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!gameStatus->musicEnabled) {
|
|
func_800559C4(musicPlayer->unk_18);
|
|
musicPlayer->flags &= ~1;
|
|
|
|
return 1;
|
|
} else {
|
|
s32 defaultVariation = get_song_variation_override_for_cur_map(songID);
|
|
if (defaultVariation >= 0) {
|
|
variation = defaultVariation;
|
|
}
|
|
|
|
musicPlayer->fadeInTime = fadeInTime;
|
|
musicPlayer->unk_0C = arg4;
|
|
musicPlayer->unk_0E = arg5;
|
|
musicPlayer->songID = songID;
|
|
musicPlayer->variation = variation;
|
|
musicPlayer->flags |= 0x20;
|
|
musicPlayer->unk_02 = 1;
|
|
musicPlayer->flags &= ~2;
|
|
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 func_8014AA54(s32 playerIndex, s32 arg1, s16 arg2) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!(musicPlayer->flags & 1)) {
|
|
return 0;
|
|
}
|
|
|
|
if (!(musicPlayer->flags & 2)) {
|
|
return 0;
|
|
}
|
|
|
|
switch (arg2) {
|
|
case 0:
|
|
func_80056028(musicPlayer->unk_18, arg1);
|
|
break;
|
|
case 1:
|
|
func_80056044(musicPlayer->unk_18, arg1);
|
|
break;
|
|
case 2:
|
|
func_80056068(musicPlayer->unk_18, arg1);
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
s32 func_8014AB0C(s32 playerIndex, s16 arg1) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!(musicPlayer->flags & 1)) {
|
|
return 0;
|
|
}
|
|
|
|
return func_80055DDC(musicPlayer->unk_18, arg1);
|
|
}
|
|
|
|
s32 func_8014AB60(s32 playerIndex, s16 arg1) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!(musicPlayer->flags & 1)) {
|
|
return 0;
|
|
}
|
|
|
|
return func_80055E48(musicPlayer->unk_18, arg1);
|
|
}
|
|
|
|
s32 func_8014ABB4(s32 playerIndex, s16 arg1) {
|
|
MusicPlayer* musicPlayers = gMusicPlayers;
|
|
MusicPlayer* musicPlayer = &musicPlayers[playerIndex];
|
|
|
|
if (!(musicPlayer->flags & 1)) {
|
|
return 0;
|
|
}
|
|
|
|
return func_80055CC4(musicPlayer->unk_18, arg1);
|
|
}
|
|
|
|
s32 func_8014AC08(void) {
|
|
set_music_track(0, -1, 0, 250, 8);
|
|
set_music_track(1, -1, 0, 250, 8);
|
|
|
|
return 1;
|
|
}
|
|
|
|
void func_8014AC5C(void) {
|
|
gMusicUnkVolume2 = 4;
|
|
}
|
|
|
|
void func_8014AC70(void) {
|
|
gMusicUnkVolume2 = 8;
|
|
}
|
|
|
|
void transition_music_volume_to(s16 volume) {
|
|
gMusicTargetVolume = volume;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014AC94);
|
|
|
|
INCLUDE_ASM(s32, "code_e0b30_len_b80", func_8014AD40);
|
|
|
|
void func_8014ADA4(void) {
|
|
MusicPlayer* musicPlayer = &gMusicPlayers[0];
|
|
|
|
if (GAME_STATUS->demoState == 0) {
|
|
musicPlayer->flags |= 8;
|
|
_set_music_track(0, musicPlayer->unk_24, musicPlayer->unk_28, 0, 8);
|
|
}
|
|
}
|
|
|
|
void func_8014ADF8(SongID songID, s32 variation) {
|
|
MusicPlayer* musicPlayer = &gMusicPlayers[0];
|
|
|
|
if (GAME_STATUS->demoState == 0) {
|
|
musicPlayer->unk_24 = musicPlayer->songID;
|
|
musicPlayer->unk_28 = musicPlayer->variation;
|
|
musicPlayer->unk_2C = musicPlayer->unk_18;
|
|
musicPlayer->flags |= 4;
|
|
set_music_track(0, songID, variation, 500, 8);
|
|
}
|
|
}
|
|
|
|
void func_8014AE6C(void) {
|
|
MusicPlayer* musicPlayer = &gMusicPlayers[0];
|
|
|
|
if (GAME_STATUS->demoState == 0) {
|
|
if (D_8009A650[0] & 0x20000) {
|
|
D_8009A650[0] &= ~0x20000;
|
|
} else {
|
|
musicPlayer->flags |= 8;
|
|
_set_music_track(0, musicPlayer->unk_24, musicPlayer->unk_28, 0, 8);
|
|
func_80055590(0, 250);
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_8014AEF8(void) {
|
|
MusicPlayer* musicPlayer = &gMusicPlayers[0];
|
|
|
|
if (GAME_STATUS->demoState == 0 && !(D_8009A650[0] & 0x20000)) {
|
|
func_8005553C(0, 250);
|
|
musicPlayer->unk_24 = musicPlayer->songID;
|
|
musicPlayer->unk_28 = musicPlayer->variation;
|
|
musicPlayer->unk_2C = musicPlayer->unk_18;
|
|
musicPlayer->flags |= 4;
|
|
set_music_track(0, musicPlayer->unk_1C, musicPlayer->unk_20, 500, 8);
|
|
}
|
|
}
|
|
|
|
void func_8014AF8C(s32 arg0, s32 arg1) {
|
|
MusicPlayer* musicPlayer = &gMusicPlayers[0];
|
|
|
|
musicPlayer->unk_1C = arg0;
|
|
musicPlayer->unk_20 = arg1;
|
|
}
|
|
|
|
void func_8014AFA0(void) {
|
|
}
|