Sound effect tables now support up to 255 sounds instead of 128 (#465)

This commit is contained in:
Gregory Heskett
2022-09-21 19:51:31 -04:00
committed by GitHub
parent 1af9f2b94a
commit c0e00beaf7
2 changed files with 9 additions and 7 deletions

View File

@@ -7,6 +7,7 @@
#include "external.h" #include "external.h"
#include "playback.h" #include "playback.h"
#include "synthesis.h" #include "synthesis.h"
#include "game/debug.h"
#include "game/main.h" #include "game/main.h"
#include "game/level_update.h" #include "game/level_update.h"
#include "game/object_list_processor.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 * Called from threads: thread5_game_loop
*/ */
void play_sound(s32 soundBits, f32 *pos) { 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].soundBits = soundBits;
sSoundRequests[sSoundRequestCount].position = pos; sSoundRequests[sSoundRequestCount].position = pos;
sSoundRequestCount++; sSoundRequestCount++;

View File

@@ -1620,11 +1620,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) {
case 0xc5: // chan_dynsetdyntable case 0xc5: // chan_dynsetdyntable
if (value != -1) { if (value != -1) {
#if defined(VERSION_EU) || defined(VERSION_SH) #if defined(VERSION_EU) || defined(VERSION_SH)
seqData = (*seqChannel->dynTable)[value]; seqData = (*seqChannel->dynTable)[(u8) value];
sp38 = (u16)((seqData[0] << 8) + seqData[1]); sp38 = (u16)((seqData[0] << 8) + seqData[1]);
seqChannel->dynTable = (void *) (seqPlayer->seqData + sp38); seqChannel->dynTable = (void *) (seqPlayer->seqData + sp38);
#else #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); seqChannel->dynTable = (void *) (seqPlayer->seqData + sp5A);
#endif #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"); eu_stubbed_printf_0("Audio:Track: CTBLCALL Macro Level Over Error!\n");
} }
#endif #endif
seqData = (*seqChannel->dynTable)[value]; seqData = (*seqChannel->dynTable)[(u8) value];
#if defined(VERSION_EU) || defined(VERSION_SH) #if defined(VERSION_EU) || defined(VERSION_SH)
state->stack[state->depth++] = state->pc; state->stack[state->depth++] = state->pc;
sp38 = (u16)((seqData[0] << 8) + seqData[1]); sp38 = (u16)((seqData[0] << 8) + seqData[1]);
@@ -2011,11 +2011,11 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) {
break; break;
case 0xb5: case 0xb5:
seqChannel->unkC8 = *(u16 *) (*seqChannel->dynTable)[value]; seqChannel->unkC8 = *(u16 *) (*seqChannel->dynTable)[(u8) value];
break; break;
case 0xb6: case 0xb6:
value = (*seqChannel->dynTable)[0][value]; value = (*seqChannel->dynTable)[0][(u8) value];
break; break;
#endif #endif
} }
@@ -2045,7 +2045,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) {
case 0x98: case 0x98:
if (value != -1 && seq_channel_set_layer(seqChannel, loBits) != -1) { 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]); sp5A = ((seqData[0] << 8) + seqData[1]);
seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A; seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A;
} }
@@ -2121,7 +2121,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) {
case 0xb0: // chan_dynsetlayer case 0xb0: // chan_dynsetlayer
if (value != -1 && seq_channel_set_layer(seqChannel, loBits) != -1) { 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]); sp5A = ((seqData[0] << 8) + seqData[1]);
seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A; seqChannel->layers[loBits]->scriptState.pc = seqPlayer->seqData + sp5A;
} }