From c14699d3649fefde308a8f966c6b0ed5d9aa9e19 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 17 Sep 2021 20:50:15 -0400 Subject: [PATCH] Identify bytes in music player for voice limit, as well as struct values for ScreenViewPort co-ords --- .../menu/menu_audio_options_loop.s | 4 +- .../menu/menu_track_select_init.s | 2 +- .../menu/menu_trophy_race_rankings_init.s | 2 +- .../menu/menu_trophy_race_round_init.s | 2 +- .../unknown_032760/func_80034E9C.s | 4 +- .../unknown_032760/func_80039330.s | 6 +- .../unknown_032760/func_8003B988.s | 4 +- .../unknown_032760/func_8003C2E4.s | 4 +- asm/non_matchings/unknown_06B2B0/load_level.s | 2 +- .../unknown_09F8F0/func_800A497C.s | 2 +- include/PR/libaudio.h | 115 ++++++++++-------- include/structs.h | 4 +- lib/src/al/alCSPGetChlVol.c | 2 +- lib/src/al/alHeapInit.c | 2 +- lib/src/mips1/al/seqplayer.c | 16 +-- src/audio.c | 35 +++--- src/audio.h | 39 +++--- src/camera.c | 53 ++++---- src/camera.h | 28 ++--- src/menu.c | 26 ++-- src/unknown_005740.h | 2 +- src/unknown_05CEF0.h | 2 +- src/unknown_06B2B0.c | 2 +- 23 files changed, 186 insertions(+), 172 deletions(-) diff --git a/asm/non_matchings/menu/menu_audio_options_loop.s b/asm/non_matchings/menu/menu_audio_options_loop.s index 72ee4808..ebae621d 100644 --- a/asm/non_matchings/menu/menu_audio_options_loop.s +++ b/asm/non_matchings/menu/menu_audio_options_loop.s @@ -264,7 +264,7 @@ glabel menu_audio_options_loop .L8008502C: /* 085C2C 8008502C 0C0002CA */ jal func_80000B28 /* 085C30 80085030 00000000 */ nop -/* 085C34 80085034 0C0002F8 */ jal func_80000BE0 +/* 085C34 80085034 0C0002F8 */ jal set_music_player_voice_limit /* 085C38 80085038 24040018 */ li $a0, 24 /* 085C3C 8008503C 0C0002CD */ jal play_music /* 085C40 80085040 24040018 */ li $a0, 24 @@ -310,7 +310,7 @@ glabel menu_audio_options_loop /* 085CD4 800850D4 00000000 */ nop /* 085CD8 800850D8 0C0002CA */ jal func_80000B28 /* 085CDC 800850DC 00000000 */ nop -/* 085CE0 800850E0 0C0002F8 */ jal func_80000BE0 +/* 085CE0 800850E0 0C0002F8 */ jal set_music_player_voice_limit /* 085CE4 800850E4 24040018 */ li $a0, 24 /* 085CE8 800850E8 92040003 */ lbu $a0, 3($s0) /* 085CEC 800850EC 0C0002CD */ jal play_music diff --git a/asm/non_matchings/menu/menu_track_select_init.s b/asm/non_matchings/menu/menu_track_select_init.s index 67ec1bc1..c3f38062 100644 --- a/asm/non_matchings/menu/menu_track_select_init.s +++ b/asm/non_matchings/menu/menu_track_select_init.s @@ -525,7 +525,7 @@ glabel menu_track_select_init /* 08FB7C 8008EF7C 2610F760 */ addiu $s0, %lo(D_800DF760) # addiu $s0, $s0, -0x8a0 /* 08FB80 8008EF80 AC206848 */ sw $zero, %lo(D_80126848)($at) /* 08FB84 8008EF84 AE000000 */ sw $zero, ($s0) -/* 08FB88 8008EF88 0C0002F8 */ jal func_80000BE0 +/* 08FB88 8008EF88 0C0002F8 */ jal set_music_player_voice_limit /* 08FB8C 8008EF8C 24040018 */ li $a0, 24 /* 08FB90 8008EF90 0C000307 */ jal func_80000C1C /* 08FB94 8008EF94 00000000 */ nop diff --git a/asm/non_matchings/menu/menu_trophy_race_rankings_init.s b/asm/non_matchings/menu/menu_trophy_race_rankings_init.s index fb3df0c1..1d84ba78 100644 --- a/asm/non_matchings/menu/menu_trophy_race_rankings_init.s +++ b/asm/non_matchings/menu/menu_trophy_race_rankings_init.s @@ -303,7 +303,7 @@ glabel menu_trophy_race_rankings_init .L80098E5C: /* 099A5C 80098E5C 0C03105C */ jal func_800C4170 /* 099A60 80098E60 24040002 */ li $a0, 2 -/* 099A64 80098E64 0C0002F8 */ jal func_80000BE0 +/* 099A64 80098E64 0C0002F8 */ jal set_music_player_voice_limit /* 099A68 80098E68 24040018 */ li $a0, 24 /* 099A6C 80098E6C 0C0002CD */ jal play_music /* 099A70 80098E70 24040018 */ li $a0, 24 diff --git a/asm/non_matchings/menu/menu_trophy_race_round_init.s b/asm/non_matchings/menu/menu_trophy_race_round_init.s index 6e638eec..32c69bbe 100644 --- a/asm/non_matchings/menu/menu_trophy_race_round_init.s +++ b/asm/non_matchings/menu/menu_trophy_race_round_init.s @@ -77,7 +77,7 @@ glabel menu_trophy_race_round_init /* 098F80 80098380 AC2B0980 */ sw $t3, %lo(D_800E0980)($at) /* 098F84 80098384 0C03105C */ jal func_800C4170 /* 098F88 80098388 24040002 */ li $a0, 2 -/* 098F8C 8009838C 0C0002F8 */ jal func_80000BE0 +/* 098F8C 8009838C 0C0002F8 */ jal set_music_player_voice_limit /* 098F90 80098390 24040018 */ li $a0, 24 /* 098F94 80098394 0C0002CD */ jal play_music /* 098F98 80098398 24040018 */ li $a0, 24 diff --git a/asm/non_matchings/unknown_032760/func_80034E9C.s b/asm/non_matchings/unknown_032760/func_80034E9C.s index 32e987a9..ff48d29f 100644 --- a/asm/non_matchings/unknown_032760/func_80034E9C.s +++ b/asm/non_matchings/unknown_032760/func_80034E9C.s @@ -141,7 +141,7 @@ glabel func_80034E9C /* 035CA0 800350A0 240E008C */ li $t6, 140 /* 035CA4 800350A4 24040010 */ li $a0, 16 /* 035CA8 800350A8 A5AB0004 */ sh $t3, 4($t5) -/* 035CAC 800350AC 0C00030E */ jal func_80000C38 +/* 035CAC 800350AC 0C00030E */ jal set_sndfx_player_voice_limit /* 035CB0 800350B0 ADAE0000 */ sw $t6, ($t5) /* 035CB4 800350B4 0C000326 */ jal func_80000C98 /* 035CB8 800350B8 2404FFF8 */ li $a0, -8 @@ -172,7 +172,7 @@ glabel func_80034E9C .L80035114: /* 035D14 80035114 0C000326 */ jal func_80000C98 /* 035D18 80035118 AF200000 */ sw $zero, ($t9) -/* 035D1C 8003511C 0C00030E */ jal func_80000C38 +/* 035D1C 8003511C 0C00030E */ jal set_sndfx_player_voice_limit /* 035D20 80035120 24040006 */ li $a0, 6 .L80035124: /* 035D24 80035124 8E0A005C */ lw $t2, 0x5c($s0) diff --git a/asm/non_matchings/unknown_032760/func_80039330.s b/asm/non_matchings/unknown_032760/func_80039330.s index 04e52851..fa8c5cb6 100644 --- a/asm/non_matchings/unknown_032760/func_80039330.s +++ b/asm/non_matchings/unknown_032760/func_80039330.s @@ -189,7 +189,7 @@ glabel func_80039330 .L800395A0: /* 03A1A0 800395A0 0C0004BA */ jal func_800012E8 /* 03A1A4 800395A4 AFA60084 */ sw $a2, 0x84($sp) -/* 03A1A8 800395A8 0C0002F8 */ jal func_80000BE0 +/* 03A1A8 800395A8 0C0002F8 */ jal set_music_player_voice_limit /* 03A1AC 800395AC 24040018 */ li $a0, 24 /* 03A1B0 800395B0 0C0002CD */ jal play_music /* 03A1B4 800395B4 24040020 */ li $a0, 32 @@ -661,7 +661,7 @@ glabel L80039BB8 /* 03A85C 80039C5C 8FA90064 */ lw $t1, 0x64($sp) /* 03A860 80039C60 00000000 */ nop /* 03A864 80039C64 912400B3 */ lbu $a0, 0xb3($t1) -/* 03A868 80039C68 0C0002F8 */ jal func_80000BE0 +/* 03A868 80039C68 0C0002F8 */ jal set_music_player_voice_limit /* 03A86C 80039C6C 00000000 */ nop /* 03A870 80039C70 8FAA0064 */ lw $t2, 0x64($sp) /* 03A874 80039C74 00000000 */ nop @@ -1135,7 +1135,7 @@ glabel L8003A268 /* 03AF4C 8003A34C 8FAD0064 */ lw $t5, 0x64($sp) /* 03AF50 8003A350 00000000 */ nop /* 03AF54 8003A354 91A400B3 */ lbu $a0, 0xb3($t5) -/* 03AF58 8003A358 0C0002F8 */ jal func_80000BE0 +/* 03AF58 8003A358 0C0002F8 */ jal set_music_player_voice_limit /* 03AF5C 8003A35C 00000000 */ nop /* 03AF60 8003A360 8FAE0064 */ lw $t6, 0x64($sp) /* 03AF64 8003A364 00000000 */ nop diff --git a/asm/non_matchings/unknown_032760/func_8003B988.s b/asm/non_matchings/unknown_032760/func_8003B988.s index e9e9efc5..acfb60ea 100644 --- a/asm/non_matchings/unknown_032760/func_8003B988.s +++ b/asm/non_matchings/unknown_032760/func_8003B988.s @@ -105,7 +105,7 @@ glabel func_8003B988 /* 03C700 8003BB00 8FA80044 */ lw $t0, 0x44($sp) /* 03C704 8003BB04 240F008C */ li $t7, 140 /* 03C708 8003BB08 24040010 */ li $a0, 16 -/* 03C70C 8003BB0C 0C00030E */ jal func_80000C38 +/* 03C70C 8003BB0C 0C00030E */ jal set_sndfx_player_voice_limit /* 03C710 8003BB10 AD0F0008 */ sw $t7, 8($t0) /* 03C714 8003BB14 0C002050 */ jal func_80008140 /* 03C718 8003BB18 00000000 */ nop @@ -163,7 +163,7 @@ glabel func_8003B988 /* 03C7D8 8003BBD8 AFA90040 */ sw $t1, 0x40($sp) /* 03C7DC 8003BBDC 0C000326 */ jal func_80000C98 /* 03C7E0 8003BBE0 AFA80044 */ sw $t0, 0x44($sp) -/* 03C7E4 8003BBE4 0C00030E */ jal func_80000C38 +/* 03C7E4 8003BBE4 0C00030E */ jal set_sndfx_player_voice_limit /* 03C7E8 8003BBE8 24040006 */ li $a0, 6 /* 03C7EC 8003BBEC 0C00205A */ jal func_80008168 /* 03C7F0 8003BBF0 00000000 */ nop diff --git a/asm/non_matchings/unknown_032760/func_8003C2E4.s b/asm/non_matchings/unknown_032760/func_8003C2E4.s index 5fe87bf0..9afe9c04 100644 --- a/asm/non_matchings/unknown_032760/func_8003C2E4.s +++ b/asm/non_matchings/unknown_032760/func_8003C2E4.s @@ -84,7 +84,7 @@ glabel func_8003C2E4 /* 03D020 8003C420 2404FFF8 */ li $a0, -8 /* 03D024 8003C424 240B008C */ li $t3, 140 /* 03D028 8003C428 AE0B0008 */ sw $t3, 8($s0) -/* 03D02C 8003C42C 0C00030E */ jal func_80000C38 +/* 03D02C 8003C42C 0C00030E */ jal set_sndfx_player_voice_limit /* 03D030 8003C430 24040010 */ li $a0, 16 /* 03D034 8003C434 0C0006F0 */ jal play_sound /* 03D038 8003C438 24040011 */ li $a0, 17 @@ -122,7 +122,7 @@ glabel func_8003C2E4 .L8003C4AC: /* 03D0AC 8003C4AC 0C000326 */ jal func_80000C98 /* 03D0B0 8003C4B0 AE000008 */ sw $zero, 8($s0) -/* 03D0B4 8003C4B4 0C00030E */ jal func_80000C38 +/* 03D0B4 8003C4B4 0C00030E */ jal set_sndfx_player_voice_limit /* 03D0B8 8003C4B8 24040006 */ li $a0, 6 .L8003C4BC: /* 03D0BC 8003C4BC 8602000C */ lh $v0, 0xc($s0) diff --git a/asm/non_matchings/unknown_06B2B0/load_level.s b/asm/non_matchings/unknown_06B2B0/load_level.s index 95e4e7f4..91e3bd55 100644 --- a/asm/non_matchings/unknown_06B2B0/load_level.s +++ b/asm/non_matchings/unknown_06B2B0/load_level.s @@ -397,7 +397,7 @@ glabel load_level /* 06C400 8006B800 00000000 */ nop .L8006B804: /* 06C404 8006B804 906400B3 */ lbu $a0, 0xb3($v1) -/* 06C408 8006B808 0C0002F8 */ jal func_80000BE0 +/* 06C408 8006B808 0C0002F8 */ jal set_music_player_voice_limit /* 06C40C 8006B80C 00000000 */ nop /* 06C410 8006B810 0C00032F */ jal func_80000CBC /* 06C414 8006B814 00000000 */ nop diff --git a/asm/non_matchings/unknown_09F8F0/func_800A497C.s b/asm/non_matchings/unknown_09F8F0/func_800A497C.s index d61936d4..5a488f2a 100644 --- a/asm/non_matchings/unknown_09F8F0/func_800A497C.s +++ b/asm/non_matchings/unknown_09F8F0/func_800A497C.s @@ -22,7 +22,7 @@ glabel func_800A497C /* 0A55CC 800A49CC 10000074 */ b .L800A4BA0 /* 0A55D0 800A49D0 83AD0027 */ lb $t5, 0x27($sp) .L800A49D4: -/* 0A55D4 800A49D4 0C0002F8 */ jal func_80000BE0 +/* 0A55D4 800A49D4 0C0002F8 */ jal set_music_player_voice_limit /* 0A55D8 800A49D8 AFA7002C */ sw $a3, 0x2c($sp) /* 0A55DC 800A49DC 0C0002CD */ jal play_music /* 0A55E0 800A49E0 24040019 */ li $a0, 25 diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h index 1179c933..153d3eb9 100644 --- a/include/PR/libaudio.h +++ b/include/PR/libaudio.h @@ -218,6 +218,7 @@ typedef struct { ALSound *soundArray[1]; } ALInstrument; +/* Size: 0x10 bytes */ typedef struct ALBank_s { s16 instCount; /* number of programs in this bank */ u8 flags; @@ -268,6 +269,7 @@ typedef struct { s32 *params; } ALSynConfig; +/* Size: 0x14 bytes */ typedef struct ALPlayer_s { struct ALPlayer_s *next; void *clientData; /* storage for client callback */ @@ -293,6 +295,7 @@ typedef struct ALVoiceConfig_s { u8 unityPitch; /* unity pitch flag */ } ALVoiceConfig; +/* Size: 0x4C bytes */ typedef struct { ALPlayer *head; /* client list head */ ALLink pFreeList; /* list of free physical voices */ @@ -522,6 +525,7 @@ typedef struct { u8 chan; } ALOscEvent; +/* Size: 0x10 bytes */ typedef struct { s16 type; union { @@ -545,6 +549,7 @@ typedef struct { ALEvent evt; } ALEventListItem; +/* Size: 0x14 bytes */ typedef struct { ALLink freeList; ALLink allocList; @@ -603,6 +608,7 @@ typedef struct { u8 unk10; } ALChanState_Custom; +/* Size: 0x1C bytes */ typedef struct ALSeq_s { u8 *base; /* ptr to start of sequence file */ u8 *trackStart; /* ptr to first MIDI event */ @@ -667,62 +673,67 @@ typedef ALMicroTime (*ALOscInit)(void **oscState,f32 *initVal, u8 oscType, typedef ALMicroTime (*ALOscUpdate)(void *oscState, f32 *updateVal); typedef void (*ALOscStop)(void *oscState); +/* Size: 0x8C bytes */ typedef struct { - ALPlayer node; /* note: must be first in structure */ - ALSynth *drvr; /* reference to the client driver */ - ALSeq *target; /* current sequence */ - ALMicroTime curTime; - ALBank *bank; /* current ALBank */ - s32 uspt; /* microseconds per tick */ - s32 nextDelta; /* microseconds to next callback */ - s32 state; - u16 chanMask; /* active channels */ - s16 vol; /* overall sequence volume */ - u8 maxChannels; /* number of MIDI channels */ - u8 debugFlags; /* control which error get reported */ - ALEvent nextEvent; - ALEventQueue evtq; - ALMicroTime frameTime; - ALChanState *chanState; /* 16 channels for MIDI */ - ALVoiceState *vAllocHead; /* list head for allocated voices */ - ALVoiceState *vAllocTail; /* list tail for allocated voices */ - ALVoiceState *vFreeList; /* list of free voice state structs */ - u8 unk70; - u8 unk71; - u8 unk72; // Might just be padding? - u8 unk73; // Might just be padding? - ALOscInit initOsc; - ALOscUpdate updateOsc; - ALOscStop stopOsc; - ALSeqMarker *loopStart; - ALSeqMarker *loopEnd; - s32 loopCount; /* -1 = loop forever, 0 = no loop */ + /* 0x00 */ ALPlayer node; /* note: must be first in structure */ + /* 0x14 */ ALSynth *drvr; /* reference to the client driver */ + /* 0x18 */ ALSeq *target; /* current sequence */ + /* 0x1C */ ALMicroTime curTime; + /* 0x20 */ ALBank *bank; /* current ALBank */ + /* 0x24 */ s32 uspt; /* microseconds per tick */ + /* 0x28 */ s32 nextDelta; /* microseconds to next callback */ + /* 0x2C */ s32 state; + /* 0x30 */ u16 chanMask; /* active channels */ + /* 0x32 */ s16 vol; /* overall sequence volume */ + /* 0x34 */ u8 maxChannels; /* number of MIDI channels */ + /* 0x35 */ u8 debugFlags; /* control which error get reported */ + /* 0x36 */ ALEvent nextEvent; + /* 0x48 */ ALEventQueue evtq; + /* 0x5C */ ALMicroTime frameTime; + /* 0x60 */ ALChanState *chanState; /* 16 channels for MIDI */ + /* 0x64 */ ALVoiceState *vAllocHead; /* list head for allocated voices */ + /* 0x68 */ ALVoiceState *vAllocTail; /* list tail for allocated voices */ + /* 0x6C */ ALVoiceState *vFreeList; /* list of free voice state structs */ + /* 0x70 */ u8 voiceLimit; + /* 0x71 */ u8 mappedVoices; + /* 0x72 */ u8 unk72; // Might just be padding? + /* 0x73 */ u8 unk73; // Might just be padding? + /* 0x74 */ ALOscInit initOsc; + /* 0x78 */ ALOscUpdate updateOsc; + /* 0x7C */ ALOscStop stopOsc; + /* 0x80 */ ALSeqMarker *loopStart; + /* 0x84 */ ALSeqMarker *loopEnd; + /* 0x88 */ s32 loopCount; /* -1 = loop forever, 0 = no loop */ } ALSeqPlayer; +/* Size: 0x80 bytes */ typedef struct { - ALPlayer node; /* note: must be first in structure */ - ALSynth *drvr; /* reference to the client driver */ - ALCSeq *target; /* current sequence */ - ALMicroTime curTime; - ALBank *bank; /* current ALBank */ - s32 uspt; /* microseconds per tick */ - s32 nextDelta; /* microseconds to next callback */ - s32 state; - u16 chanMask; /* active channels */ - s16 vol; /* overall sequence volume */ - u8 maxChannels; /* number of MIDI channels */ - u8 debugFlags; /* control which error get reported */ - ALEvent nextEvent; - ALEventQueue evtq; - ALMicroTime frameTime; - ALChanState *chanState; /* 16 channels for MIDI */ - ALVoiceState *vAllocHead; /* list head for allocated voices */ - ALVoiceState *vAllocTail; /* list tail for allocated voices */ - ALVoiceState *vFreeList; /* list of free voice state structs */ - ALOscInit initOsc; - ALOscUpdate updateOsc; - ALOscStop stopOsc; - s32 unk7C; + /* 0x00 */ ALPlayer node; /* note: must be first in structure */ + /* 0x14 */ ALSynth *drvr; /* reference to the client driver */ + /* 0x18 */ ALCSeq *target; /* current sequence */ + /* 0x1C */ ALMicroTime curTime; + /* 0x20 */ ALBank *bank; /* current ALBank */ + /* 0x24 */ s32 uspt; /* microseconds per tick */ + /* 0x28 */ s32 nextDelta; /* microseconds to next callback */ + /* 0x2C */ s32 state; + /* 0x30 */ u16 chanMask; /* active channels */ + /* 0x32 */ s16 vol; /* overall sequence volume */ + /* 0x34 */ u8 maxChannels; /* number of MIDI channels */ + /* 0x35 */ u8 debugFlags; /* control which error get reported */ + /* 0x36 */ u8 unk36; + /* 0x37 */ u8 unk37; + /* 0x38 */ u8 unk38; // Might just be padding? + /* 0x39 */ u8 unk39; // Might just be padding? + /* 0x40 */ ALEvent nextEvent; + /* 0x4C */ ALEventQueue evtq; + /* 0x60 */ ALMicroTime frameTime; + /* 0x64 */ ALChanState *chanState; /* 16 channels for MIDI */ + /* 0x68 */ ALVoiceState *vAllocHead; /* list head for allocated voices */ + /* 0x6C */ ALVoiceState *vAllocTail; /* list tail for allocated voices */ + /* 0x70 */ ALVoiceState *vFreeList; /* list of free voice state structs */ + /* 0x74 */ ALOscInit initOsc; + /* 0x78 */ ALOscUpdate updateOsc; + /* 0x7C */ ALOscStop stopOsc; } ALCSPlayer; /* Maintain backwards compatibility with old routine names. */ diff --git a/include/structs.h b/include/structs.h index 7b0c32c0..2a71d095 100644 --- a/include/structs.h +++ b/include/structs.h @@ -272,7 +272,7 @@ typedef struct LevelHeader { /* 0xB0 */ s16 unkB0; /* 0xB2 */ u8 unkB2; - /* 0xB3 */ u8 unkB3; + /* 0xB3 */ u8 voiceLimit; /* 0xB3 */ u8 unkB4; /* 0xB3 */ u8 unkB5; /* 0xB3 */ u8 unkB6; @@ -921,7 +921,7 @@ typedef struct unk80120AC0 { f32 unk28; f32 unk2C; f32 unk30; - s16 unk34; + s16 levelSegmentIndex; s16 pad36; s16 unk38; s8 pad3A; diff --git a/lib/src/al/alCSPGetChlVol.c b/lib/src/al/alCSPGetChlVol.c index 1289f492..d385d0b4 100644 --- a/lib/src/al/alCSPGetChlVol.c +++ b/lib/src/al/alCSPGetChlVol.c @@ -3,6 +3,6 @@ #include "audio_internal.h" -u8 alCSPGetChlVol(ALCSPlayer *seqp, u8 chan){ +u8 alCSPGetChlVol(ALCSPlayer *seqp, u8 chan) { return seqp->chanState[chan].vol; } \ No newline at end of file diff --git a/lib/src/al/alHeapInit.c b/lib/src/al/alHeapInit.c index af4734d6..2aa43af8 100644 --- a/lib/src/al/alHeapInit.c +++ b/lib/src/al/alHeapInit.c @@ -3,7 +3,7 @@ #include "audio_internal.h" -void alHeapInit(ALHeap *hp, u8 *base, s32 len){ +void alHeapInit(ALHeap *hp, u8 *base, s32 len) { s32 extraAlign = (AL_CACHE_ALIGN+1) - ((s32) base & AL_CACHE_ALIGN); if (extraAlign != AL_CACHE_ALIGN+1) diff --git a/lib/src/mips1/al/seqplayer.c b/lib/src/mips1/al/seqplayer.c index 189b257b..c9c2d0fa 100644 --- a/lib/src/mips1/al/seqplayer.c +++ b/lib/src/mips1/al/seqplayer.c @@ -15,8 +15,8 @@ ALVoiceState *__mapVoice(ALSeqPlayer *seqp, u8 key, u8 vel, u8 channel) { ALVoiceState *vs = seqp->vFreeList; - if(seqp->unk70 < seqp->unk71) { - stubbed_printf("Exceeded voice limit of %d (%d)\n", seqp->unk70, seqp->unk71); + if(seqp->voiceLimit < seqp->mappedVoices) { + stubbed_printf("Exceeded voice limit of %d (%d)\n", seqp->voiceLimit, seqp->mappedVoices); return NULL; } @@ -37,7 +37,7 @@ ALVoiceState *__mapVoice(ALSeqPlayer *seqp, u8 key, u8 vel, u8 channel) vs->key = key; vs->velocity = vel; vs->voice.clientPrivate = vs; - seqp->unk71++; + seqp->mappedVoices++; } return vs; @@ -61,7 +61,7 @@ void __unmapVoice(ALSeqPlayer *seqp, ALVoice *voice) vs->next = seqp->vFreeList; seqp->vFreeList = vs; - seqp->unk71--; + seqp->mappedVoices--; return; } @@ -305,7 +305,9 @@ void __seqpStopOsc(ALSeqPlayer *seqp, ALVoiceState *vs) } } -void func_8000B010(ALCSPlayer *arg0, s8 arg1) { - //TODO: This doesn't seem to be the write way to do this, but it works for now. - (s8) arg0->initOsc = arg1; +/** + * The voice limit bytes seem to be unique to this game. + */ +void set_voice_limit(ALSeqPlayer *seqp, s8 voiceLimit) { + seqp->voiceLimit = voiceLimit; } diff --git a/src/audio.c b/src/audio.c index 05f2cf7b..571280a4 100644 --- a/src/audio.c +++ b/src/audio.c @@ -11,17 +11,10 @@ #include "audio_internal.h" #include "unknown_003260.h" -/* Size: 0x08 bytes */ -typedef struct unk80115D48 { - /* 0x00 */ u16 unk0; - /* 0x02 */ s16 unk2; - /* 0x04 */ s32 unk4; -} unk80115D48; - /************ .data ************/ -ALCSPlayer *gMusicPlayer = NULL; -ALCSPlayer *gSndFxPlayer = NULL; +ALSeqPlayer *gMusicPlayer = NULL; +ALSeqPlayer *gSndFxPlayer = NULL; u8 musicRelativeVolume = 0x7F; u8 sfxRelativeVolume = 0x7F; u8 D_800DC640 = 1; @@ -162,7 +155,7 @@ void audio_init(u32 arg0) { synth_config.heap = &gALHeap; audioNewThread(&synth_config, 12, arg0); gMusicPlayer = func_80002224(24, 120); - func_8000B010(gMusicPlayer, 18); + set_voice_limit(gMusicPlayer, 18); gSndFxPlayer = func_80002224(16, 50); D_80115CFC = allocate_from_main_pool_safe( seq_max_len, COLOR_TAG_CYAN); D_80115D00 = allocate_from_main_pool_safe( seq_max_len, COLOR_TAG_CYAN); @@ -255,9 +248,9 @@ void play_music(u8 arg0) { } } -void func_80000BE0(u8 arg0) { +void set_music_player_voice_limit(u8 voiceLimit) { if (D_800DC670 == 0) { - func_8000B010(gMusicPlayer, arg0); + set_voice_limit(gMusicPlayer, voiceLimit); } } @@ -269,8 +262,8 @@ void func_80000C2C(void) { D_800DC670 = 0; } -void func_80000C38(u8 arg0) { - func_8000B010(gSndFxPlayer, arg0); +void set_sndfx_player_voice_limit(u8 voiceLimit) { + set_voice_limit(gSndFxPlayer, voiceLimit); } /* Unused? */ @@ -750,7 +743,7 @@ u8 ALBankFile_80115D14_GetSoundDecayTime(u16 sndIndx) { return ((u32)(1+ ALBankFile_80115D14->bankArray[0]->instArray[0]->soundArray[sndIndx-1]->envelope->decayTime) == 0); } -ALCSPlayer *func_80002224(s32 _max_voices, s32 _max_events) { +ALSeqPlayer *func_80002224(s32 _max_voices, s32 _max_events) { ALCSPlayer *cseqp; ALSeqpConfig config; @@ -763,15 +756,15 @@ ALCSPlayer *func_80002224(s32 _max_voices, s32 _max_events) { config.updateOsc = NULL; config.stopOsc = NULL; - - cseqp = (ALCSPlayer *) alHeapDBAlloc(NULL, 0, &gALHeap, 1, 128); + cseqp = (ALCSPlayer *) alHeapDBAlloc(NULL, 0, &gALHeap, 1, sizeof(ALCSPlayer)); alCSPNew(cseqp, &config); alCSPSetBank(cseqp, ALBankFile_80115D10->bankArray[0]); - ((u8*) cseqp)[0x36]= 0x7F; //this member doesn't exist in ALCSPlayer + cseqp->unk36 = 0x7F; + return cseqp; } -void func_800022BC(u8 arg0, ALCSPlayer *arg1) { +void func_800022BC(u8 arg0, ALSeqPlayer *arg1) { func_80002570(arg1); if (arg0 < ALSeqFile_80115CF8->seqCount) { if (arg1 == gMusicPlayer) { @@ -785,7 +778,7 @@ void func_800022BC(u8 arg0, ALCSPlayer *arg1) { #if 1 GLOBAL_ASM("asm/non_matchings/audio/func_8000232C.s") #else -void func_8000232C(ALCSPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq){ +void func_8000232C(ALSeqPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq){ if(alCSPGetState(seqp) == AL_STOPPED && *arg2){ /*load_asset_to_address(ASSET_AUDIO, ptr, (u32)((ALSeqFile_80115CF8->seqArray)[*arg2]) - get_rom_offset_of_asset(ASSET_AUDIO,0), @@ -802,7 +795,7 @@ void func_8000232C(ALCSPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq){ } #endif -void func_80002570(ALCSPlayer *seqp) { +void func_80002570(ALSeqPlayer *seqp) { if(gMusicPlayer == seqp && D_80115D40 != 0){ alCSPStop(seqp); D_80115D40 = 0; diff --git a/src/audio.h b/src/audio.h index bcdbc0b0..4dd272ce 100644 --- a/src/audio.h +++ b/src/audio.h @@ -4,8 +4,8 @@ #include "types.h" #include "audio_internal.h" -extern ALCSPlayer* gMusicPlayer; -extern ALCSPlayer* gSndFxPlayer; +extern ALSeqPlayer* gMusicPlayer; +extern ALSeqPlayer* gSndFxPlayer; extern u8 musicRelativeVolume; extern u8 sfxRelativeVolume; extern u8 D_800DC640; @@ -30,38 +30,48 @@ typedef struct unk80115D18 { u8 pad8[2]; } unk80115D18; -/* Size: 3 bytes */ +/* Size: 0x03 bytes */ typedef struct unk80115D1C { u8 unk0; u8 unk1; u8 unk2; } unk80115D1C; +/* Size: 0x08 bytes */ +typedef struct unk80115D48 { + /* 0x00 */ u16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ s32 unk4; +} unk80115D48; + void alCSPNew(ALCSPlayer *seqp, ALSeqpConfig *config); //lib/src/al/csplayer.c void alCSPSetBank(ALCSPlayer *seqp, ALBank *b); //lib/src/unknown_0C8660.c -void func_8000B010(ALCSPlayer *, u8); //lib/src/mips1/alseqplayer.c +void set_voice_limit(ALCSPlayer *seqp, u8 voiceLimit); //lib/src/mips1/alseqplayer.c void *alHeapDBAlloc(u8 *file, s32 line, ALHeap *hp, s32 num, s32 size); //lib/src/al/alHeapDBAlloc.c s32 alCSPSetChlPan(ALCSPlayer *seqp, u8 chan, ALPan pan); //lib/src/unknown_0C84E0.c void alCSPSetChlVol(ALCSPlayer *, u8 chan, u8 vol); //lib/src/unknown_0C84E0.c -s32 alCSPGetChlVol(ALCSPlayer *seqp, u8 chan); //lib/src/al +u8 alCSPGetChlVol(ALCSPlayer *seqp, u8 chan); //lib/src/al void func_80063BA0(ALCSPlayer *seqp, u8 arg1, u8 arg2); //lib/src/unknown_0647A0.c u8 func_80063C00(ALCSPlayer *seqp, u8 arg1); //lib/src/mips1/al/unknown_064800.c u8 alSeqpGetChlFXMix(ALSeqPlayer *seqp, u8 chan); //lib/src/al/alSeqpGetChlFXMix.c void func_8006492C(u8 arg0); //lib/src/mips1/al/reverb.c +void alHeapInit(ALHeap *hp, u8 *base, s32 len); //lib/src/al/alHeapInit.c +void alBnkfNew(ALBankFile *ctl, u8 *tbl); //lib/src/al/global_asm.c +void alCSPSetVol(ALCSPlayer *seqp, s16 vol); //lib/src/al/alCSPSetVol.c +void alCSPStop(ALCSPlayer *seqp); //lib/src/al/unknown_0C91A0.c +void func_80063B44(u32 arg0, u8 arg1); //lib/src/al/unknown_0646F0.c +s32 alCSPGetState(ALCSPlayer *seqp); //lib/src/unknown_0C8650.c -ALCSPlayer *func_80002224(s32 _max_voices, s32 _max_events); void audio_init(u32 arg0); -void set_relative_volume_for_music(u8 vol); void func_80000890(u8 arg0); void func_80000968(s32 arg0); void func_80000B18(void); void func_80000B28(void); -void func_800022BC(u8 arg0, ALCSPlayer *arg1); void play_music(u8 arg0); -void func_80000BE0(u8 arg0); +void set_music_player_voice_limit(u8 voiceLimit); void func_80000C1C(void); void func_80000C2C(void); -void func_80000C38(u8 arg0); +void set_sndfx_player_voice_limit(u8 voiceLimit); void func_80000C68(u8 arg0); void func_80000C98(s32 arg0); void func_80000CBC(void); @@ -112,17 +122,16 @@ u8 ALSeqFile_80115CF8_GetSeqCount(void); void func_80002128(unk80115D18 **arg0, s32 *arg1, s32 *arg2); void func_8000216C(unk80115D1C **arg0, s32 *arg1, s32 *arg2); u8 ALBankFile_80115D14_GetSoundDecayTime(u16 sndIndx); -ALCSPlayer *func_80002224(s32 _max_voices, s32 _max_events); -void func_800022BC(u8 arg0, ALCSPlayer *arg1); -void func_80002570(ALCSPlayer *seqp); +ALSeqPlayer *func_80002224(s32 _max_voices, s32 _max_events); +void func_800022BC(u8 arg0, ALSeqPlayer *arg1); +void func_80002570(ALSeqPlayer *seqp); void func_80002608(u8 arg0); u8 func_80002630(void); void func_80001D04(u16, s32*); //Non matching. -void func_8000232C(ALCSPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq); //Non Matching +void func_8000232C(ALSeqPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq); //Non Matching f32 func_800015F8(void); //Non Matching void func_80001FB8(u16 arg0); //Non Matching -void func_8000232C(ALCSPlayer *seqp, void *ptr, u8 *arg2, ALCSeq *seq); // Non Matching void func_80009B7C(s32 *arg0, f32 x, f32 y, f32 z); // Non Matching #endif diff --git a/src/camera.c b/src/camera.c index 110b1daa..2c1016f3 100644 --- a/src/camera.c +++ b/src/camera.c @@ -139,7 +139,6 @@ u8 D_80121150[16]; /******************************/ #ifdef NON_MATCHING -void func_800663DC(s32 x_pos, s32 y_pos, s32 z_pos, s32 arg3, s32 arg4, s32 arg5); extern s32 D_A4600010; extern s32 D_B0000578; @@ -166,8 +165,8 @@ void func_80065EA0(void) { if ((D_B0000578 & 0xFFFF) != 0x8965) { D_800DD060 = 1; } - guPerspectiveF(&D_80120EE0, &perspNorm[5], CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); - func_8006F870(&D_80120EE0, &D_80120FE0); + guPerspectiveF(D_80120EE0, perspNorm[5], CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); + func_8006F870(D_80120EE0, D_80120FE0); gCurCamFOV = CAMERA_DEFAULT_FOV; } #else @@ -305,7 +304,7 @@ void func_80066488(s32 arg0, f32 xPos, f32 yPos, f32 zPos, s16 arg4, s16 arg5, s D_80120AC0[arg0].unk0 = arg4; D_80120AC0[arg0].unk2 = arg5; D_80120AC0[arg0].unk4 = arg6; - D_80120AC0[arg0].unk34 = get_level_segment_index_from_position(xPos, yPos, zPos); + D_80120AC0[arg0].levelSegmentIndex = get_level_segment_index_from_position(xPos, yPos, zPos); D_80120D14 = 1; } @@ -464,30 +463,30 @@ void func_80066940(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { phi_a2 = arg2; } if ((phi_a1 >= width) || (phi_a3 < 0) || (arg2 >= height) || (phi_a2 < 0)) { - gScreenViewports[viewPortIndex].unk20 = 0; - gScreenViewports[viewPortIndex].unk24 = 0; - gScreenViewports[viewPortIndex].unk28 = 0; - gScreenViewports[viewPortIndex].unk2C = 0; + gScreenViewports[viewPortIndex].upperLeftX = 0; + gScreenViewports[viewPortIndex].upperLeftY = 0; + gScreenViewports[viewPortIndex].lowerRightX = 0; + gScreenViewports[viewPortIndex].lowerRightY = 0; } else { if (phi_a1 < 0) { - gScreenViewports[viewPortIndex].unk20 = 0; + gScreenViewports[viewPortIndex].upperLeftX = 0; } else { - gScreenViewports[viewPortIndex].unk20 = phi_a1; + gScreenViewports[viewPortIndex].upperLeftX = phi_a1; } if (arg2 < 0) { - gScreenViewports[viewPortIndex].unk24 = 0; + gScreenViewports[viewPortIndex].upperLeftY = 0; } else { - gScreenViewports[viewPortIndex].unk24 = arg2; + gScreenViewports[viewPortIndex].upperLeftY = arg2; } if (phi_a3 >= width) { - gScreenViewports[viewPortIndex].unk28 = width - 1; + gScreenViewports[viewPortIndex].lowerRightX = width - 1; } else { - gScreenViewports[viewPortIndex].unk28 = phi_a3; + gScreenViewports[viewPortIndex].lowerRightX = phi_a3; } if (phi_a2 >= height) { - gScreenViewports[viewPortIndex].unk2C = height - 1; + gScreenViewports[viewPortIndex].lowerRightY = height - 1; } else { - gScreenViewports[viewPortIndex].unk2C = phi_a2; + gScreenViewports[viewPortIndex].lowerRightY = phi_a2; } } gScreenViewports[viewPortIndex].unk4 = arg2; @@ -526,12 +525,13 @@ void func_80066AA8(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { gScreenViewports[viewPortIndex].flags &= ~0x40; } -s32 func_80066BA8(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4) { - *arg1 = gScreenViewports[viewPortIndex].unk20; - *arg3 = gScreenViewports[viewPortIndex].unk28; - *arg2 = gScreenViewports[viewPortIndex].unk24; - *arg4 = gScreenViewports[viewPortIndex].unk2C; - if ((*arg1 | *arg3 | *arg2 | *arg4) == 0) { +s32 func_80066BA8(s32 viewPortIndex, s32 *upperLeftX, s32 *upperLeftY, s32 *lowerRightX, s32 *lowerRightY) { + //gDPFillRectangle values + *upperLeftX = gScreenViewports[viewPortIndex].upperLeftX; + *lowerRightX = gScreenViewports[viewPortIndex].lowerRightX; + *upperLeftY = gScreenViewports[viewPortIndex].upperLeftY; + *lowerRightY = gScreenViewports[viewPortIndex].lowerRightY; + if ((*upperLeftX | *lowerRightX | *upperLeftY | *lowerRightY) == 0) { return 0; } return 1; @@ -553,7 +553,6 @@ void func_80066C80(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3) { *arg3 = (u32) (temp_v0 >> 0x10); } - #ifdef NON_MATCHING // Still a work-in-progress but it doesn't seem to cause any problems, @@ -584,10 +583,10 @@ void func_80066CDC(Gfx **dlist, s32 arg1) { temp_a3 = temp_t0 >> 1; if (gScreenViewports[D_80120CE4].flags & 1) { gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, - gScreenViewports[D_80120CE4].unk20, - gScreenViewports[D_80120CE4].unk24, - gScreenViewports[D_80120CE4].unk28, - gScreenViewports[D_80120CE4].unk2C + gScreenViewports[D_80120CE4].upperLeftX, + gScreenViewports[D_80120CE4].upperLeftY, + gScreenViewports[D_80120CE4].lowerRightX, + gScreenViewports[D_80120CE4].lowerRightY ) func_80068158(dlist, 0, 0, 0, 0); if (arg1 != 0) { diff --git a/src/camera.h b/src/camera.h index abeeef0e..0777e289 100644 --- a/src/camera.h +++ b/src/camera.h @@ -35,19 +35,19 @@ extern s8 D_800DD060; /* Size: 0x34 bytes. */ typedef struct ScreenViewport { - s32 unk0; - s32 unk4; - s32 unk8; - s32 unkC; - s32 unk10; - s32 unk14; - s32 unk18; - s32 unk1C; - s32 unk20; - s32 unk24; - s32 unk28; - s32 unk2C; - s32 flags; + /* 0x00 */ s32 unk0; + /* 0x04 */ s32 unk4; + /* 0x08 */ s32 unk8; + /* 0x0C */ s32 unkC; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ s32 unk18; + /* 0x1C */ s32 unk1C; + /* 0x20 */ s32 upperLeftX; //gDPFillRectangle values + /* 0x24 */ s32 upperLeftY; + /* 0x28 */ s32 lowerRightX; + /* 0x2C */ s32 lowerRightY; + /* 0x30 */ s32 flags; } ScreenViewport; /* Size: 6 bytes */ @@ -115,7 +115,7 @@ void func_80066894(s32 viewPortIndex, s32 arg1); s32 func_80066910(s32 viewPortIndex); void func_80066940(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void func_80066AA8(s32 viewPortIndex, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -s32 func_80066BA8(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); +s32 func_80066BA8(s32 viewPortIndex, s32 *upperLeftX, s32 *upperLeftY, s32 *lowerRightX, s32 *lowerRightY); void func_80066C2C(s32 viewPortIndex, s32 *arg1, s32 *arg2, s32 *arg3, s32 *arg4); void func_80066C80(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); void func_80066CDC(Gfx **dlist, s32 arg1); diff --git a/src/menu.c b/src/menu.c index 20069f08..3878aaac 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2316,7 +2316,7 @@ void menu_title_screen_init(void) { for(i = 0; i < 11; i++) { D_800DF7DC[i].texture = D_80126550[D_800DF7C4[i]]; } - func_80000BE0(0x1B); + set_music_player_voice_limit(0x1B); func_800660C0(); set_text_font(0); func_800C4170(2); @@ -2344,7 +2344,7 @@ GLOBAL_ASM("asm/non_matchings/menu/menu_title_screen_loop.s") void func_80084118(void) { func_8009C4A8(D_800DF7C4); - func_80000BE0(0x10); + set_music_player_voice_limit(0x10); func_800660D0(); func_800C422C(2); func_80000890(1); @@ -2356,7 +2356,7 @@ void menu_options_init(void) { func_800C01D8(&D_800DF77C); func_800C4170(2); set_text_font(2); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000B18(); } @@ -2533,7 +2533,7 @@ void menu_audio_options_init(void) { if (gActiveMagicCodes & CHEAT_MUSIC_MENU) { // Check if "JUKEBOX" cheat is active gAudioMenuStrings[6].unkC = gMusicTestString; gAudioMenuStrings[3].unk2 = 0xD4; - func_80000BE0(0x20); + set_music_player_voice_limit(0x20); D_801263E0 = 5; } else { gAudioMenuStrings[6].unkC = NULL; @@ -2646,7 +2646,7 @@ s32 menu_audio_options_loop(s32 arg0) { play_music((u8)D_800DFABC); } else { func_80000B28(); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000B18(); } @@ -2662,7 +2662,7 @@ s32 menu_audio_options_loop(s32 arg0) { } if (buttonInputs & (A_BUTTON | START_BUTTON)) { func_80000B28(); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music((u8)D_800DFABC); D_801263D8 = D_800DFABC; } @@ -2699,7 +2699,7 @@ void func_800851FC(void) { func_8000488C(D_801269FC); } if (D_801263D8 >= 0) { - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000C98(0x100); func_80000B18(); @@ -4723,7 +4723,7 @@ void menu_5_init(void) { if (temp != -1) { func_80000FDC(temp, 0, 0.5f); } - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000B18(); D_801263E0 = 0; @@ -4922,7 +4922,7 @@ void func_80094C14(s32 arg0) { break; case 1: if (func_8000C8B4(0x12C) < D_801263D8) { - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000C98(0x100); } @@ -5028,7 +5028,7 @@ void menu_11_init(void) { func_80094604(); func_800C4170(2); func_800C01D8(&D_800DF77C); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000C98(0x80); } @@ -5199,7 +5199,7 @@ void menu_trophy_race_round_init(void) { gMenuDelay = 0; D_800E0980 = 10; func_800C4170(2); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); play_music(0x18); func_80000C98(0x100); } @@ -5545,7 +5545,7 @@ void menu_credits_init(void) { func_8009C8A4(D_800E17F0); func_80094604(); func_800C4170(2); - func_80000BE0(0x18); + set_music_player_voice_limit(0x18); D_800E18F8 = (u16)0x1000; if (gViewingCreditsFromCheat) { play_music(8); @@ -5603,7 +5603,7 @@ void func_8009B1E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { GLOBAL_ASM("asm/non_matchings/menu/menu_credits_loop.s") void func_8009BCF0(void) { - func_80000BE0(0x12); + set_music_player_voice_limit(0x12); func_800C0180(); func_80066894(0, 0); func_80066AA8(0, 0x8000, 0x8000, 0x8000, 0x8000); diff --git a/src/unknown_005740.h b/src/unknown_005740.h index 98edf833..0b0fad73 100644 --- a/src/unknown_005740.h +++ b/src/unknown_005740.h @@ -9,4 +9,4 @@ extern s32 D_800DC6D8; extern s32 D_800DC6DC; extern s32 D_800DC6E0; -#endif \ No newline at end of file +#endif diff --git a/src/unknown_05CEF0.h b/src/unknown_05CEF0.h index 60cda2b1..75fdab77 100644 --- a/src/unknown_05CEF0.h +++ b/src/unknown_05CEF0.h @@ -28,4 +28,4 @@ void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3); void func_8005CB04(s32 arg0); void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2); -#endif \ No newline at end of file +#endif diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 8d91bd7a..efa8ad91 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -484,7 +484,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId, if (noPlayers && gCurrentLevelHeader->race_type != RACE_TYPE_CUTSCENE_2) { gCurrentLevelHeader->race_type = RACE_TYPE_CUTSCENE_1; } - func_80000BE0(gCurrentLevelHeader->unkB3); + set_music_player_voice_limit(gCurrentLevelHeader->voiceLimit); func_80000CBC(); func_80031BB8(0x20); vehicle = VEHICLE_CAR;