diff --git a/src/audio/external.c b/src/audio/external.c index 7b554b1a..bd189ee9 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -7,6 +7,7 @@ #include "external.h" #include "playback.h" #include "synthesis.h" +#include "game/debug.h" #include "game/main.h" #include "game/level_update.h" #include "game/object_list_processor.h" @@ -696,6 +697,7 @@ struct SPTask *create_next_audio_frame_task(void) { * Called from threads: thread5_game_loop */ void play_sound(s32 soundBits, f32 *pos) { + assert(((soundBits & SOUNDARGS_MASK_SOUNDID) >> SOUNDARGS_SHIFT_SOUNDID) != 0xff, "Sfx tables do not support a sound id of 0xff!"); sSoundRequests[sSoundRequestCount].soundBits = soundBits; sSoundRequests[sSoundRequestCount].position = pos; sSoundRequestCount++; diff --git a/src/audio/seqplayer.c b/src/audio/seqplayer.c index b64b8b9c..d4e9a546 100644 --- a/src/audio/seqplayer.c +++ b/src/audio/seqplayer.c @@ -1620,11 +1620,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xc5: // chan_dynsetdyntable if (value != -1) { #if defined(VERSION_EU) || defined(VERSION_SH) - seqData = (*seqChannel->dynTable)[value]; + seqData = (*seqChannel->dynTable)[(u8) value]; sp38 = (u16)((seqData[0] << 8) + seqData[1]); seqChannel->dynTable = (void *) (seqPlayer->seqData + sp38); #else - sp5A = (u16)((((*seqChannel->dynTable)[value])[0] << 8) + (((*seqChannel->dynTable)[value])[1])); + sp5A = (u16)((((*seqChannel->dynTable)[(u8) value])[0] << 8) + (((*seqChannel->dynTable)[(u8) value])[1])); seqChannel->dynTable = (void *) (seqPlayer->seqData + sp5A); #endif } @@ -1893,7 +1893,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { eu_stubbed_printf_0("Audio:Track: CTBLCALL Macro Level Over Error!\n"); } #endif - seqData = (*seqChannel->dynTable)[value]; + seqData = (*seqChannel->dynTable)[(u8) value]; #if defined(VERSION_EU) || defined(VERSION_SH) state->stack[state->depth++] = state->pc; sp38 = (u16)((seqData[0] << 8) + seqData[1]); @@ -2011,11 +2011,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { break; case 0xb5: - seqChannel->unkC8 = *(u16 *) (*seqChannel->dynTable)[value]; + seqChannel->unkC8 = *(u16 *) (*seqChannel->dynTable)[(u8) value]; break; case 0xb6: - value = (*seqChannel->dynTable)[0][value]; + value = (*seqChannel->dynTable)[0][(u8) value]; break; #endif } @@ -2045,7 +2045,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0x98: if (value != -1 && seq_channel_set_layer(seqChannel, loBits) != -1) { - seqData = (*seqChannel->dynTable)[value]; + seqData = (*seqChannel->dynTable)[(u8) value]; sp5A = ((seqData[0] << 8) + seqData[1]); seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A; } @@ -2121,7 +2121,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xb0: // chan_dynsetlayer if (value != -1 && seq_channel_set_layer(seqChannel, loBits) != -1) { - seqData = (*seqChannel->dynTable)[value]; + seqData = (*seqChannel->dynTable)[(u8) value]; sp5A = ((seqData[0] << 8) + seqData[1]); seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A; }