Add SurfaceFlags, and more formatting :)
Build libsm64 / Build libsm64 for linux (push) Successful in 32s
Build libsm64 / Build libsm64 for web (push) Successful in 39s
Build libsm64 / Build libsm64 for windows (push) Successful in 25s

This commit is contained in:
2026-05-24 18:03:08 -05:00
parent d3ea4e5e99
commit bd3dd8f523
38 changed files with 716 additions and 1295 deletions
+8 -18
View File
@@ -63,21 +63,16 @@ seqChannel->changes.as_u8=0;
#else
static void sequence_channel_process_sound(struct SequenceChannel *seqChannel)
{
f32 channelVolume;
f32 panLayerWeight;
f32 panFromChannel;
s32 i;
channelVolume = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume;
f32 channelVolume = seqChannel->volume * seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume;
if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0)
{
channelVolume *= seqChannel->seqPlayer->muteVolumeScale;
}
panFromChannel = seqChannel->pan * seqChannel->panChannelWeight;
panLayerWeight = US_FLOAT(1.0) - seqChannel->panChannelWeight;
f32 panFromChannel = seqChannel->pan * seqChannel->panChannelWeight;
f32 panLayerWeight = US_FLOAT(1.0) - seqChannel->panChannelWeight;
for (i = 0; i < 4; i++)
for (s32 i = 0; i < 4; i++)
{
struct SequenceChannelLayer *layer = seqChannel->layers[i];
if (layer != NULL && layer->enabled && layer->note != NULL)
@@ -92,8 +87,6 @@ static void sequence_channel_process_sound(struct SequenceChannel *seqChannel)
void sequence_player_process_sound(struct SequencePlayer *seqPlayer)
{
s32 i;
if (seqPlayer->fadeRemainingFrames != 0)
{
seqPlayer->fadeVolume += seqPlayer->fadeVelocity;
@@ -145,7 +138,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer)
#endif
// Process channels
for (i = 0; i < CHANNELS_MAX; i++)
for (s32 i = 0; i < CHANNELS_MAX; i++)
{
if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[i]) == TRUE
&& seqPlayer->channels[i]->enabled == TRUE)
@@ -205,10 +198,9 @@ s16 get_vibrato_pitch_change(struct VibratoState *vib)
#else
s8 get_vibrato_pitch_change(struct VibratoState *vib)
{
s32 index;
vib->time += vib->rate;
index = vib->time >> 10 & 0x3F;
s32 index = vib->time >> 10 & 0x3F;
switch (index & 0x30)
{
@@ -233,8 +225,6 @@ s8 get_vibrato_pitch_change(struct VibratoState *vib)
f32 get_vibrato_freq_scale(struct VibratoState *vib)
{
s32 pitchChange;
f32 extent;
f32 result;
if (vib->delay != 0)
@@ -291,8 +281,8 @@ f32 get_vibrato_freq_scale(struct VibratoState *vib)
return 1.0f;
}
pitchChange = get_vibrato_pitch_change(vib);
extent = (f32)vib->extent / US_FLOAT(4096.0);
s32 pitchChange = get_vibrato_pitch_change(vib);
f32 extent = (f32)vib->extent / US_FLOAT(4096.0);
#if defined(VERSION_EU) || defined(VERSION_SH)
result = US_FLOAT(1.0) + extent * (gPitchBendFrequencyScale[pitchChange + 128] - US_FLOAT(1.0));
+36 -80
View File
@@ -864,15 +864,11 @@ void create_next_audio_buffer(s16 *samples, u32 num_samples)
*/
static void process_sound_request(u32 bits, f32 *pos)
{
u8 bank;
u8 soundIndex;
u8 counter = 0;
u8 soundId;
f32 dist;
const f32 one = 1.0f;
bank = (bits & SOUNDARGS_MASK_BANK) >> SOUNDARGS_SHIFT_BANK;
soundId = (bits & SOUNDARGS_MASK_SOUNDID) >> SOUNDARGS_SHIFT_SOUNDID;
u8 bank = (bits & SOUNDARGS_MASK_BANK) >> SOUNDARGS_SHIFT_BANK;
u8 soundId = (bits & SOUNDARGS_MASK_SOUNDID) >> SOUNDARGS_SHIFT_SOUNDID;
if (soundId >= sNumSoundsPerBank[bank] || sSoundBankDisabled[bank])
{
@@ -880,7 +876,7 @@ static void process_sound_request(u32 bits, f32 *pos)
return;
}
soundIndex = sSoundBanks[bank][0].next;
u8 soundIndex = sSoundBanks[bank][0].next;
while (soundIndex != 0xff && soundIndex != 0)
{
//DEBUG_PRINT("process_sound_request: soundIndex %d\n", soundIndex);
@@ -938,7 +934,7 @@ static void process_sound_request(u32 bits, f32 *pos)
// Allocate from free list
soundIndex = sSoundBankFreeListFront[bank];
dist = sqrtf(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]) * one;
f32 dist = sqrtf(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]) * one;
sSoundBanks[bank][soundIndex].x = &pos[0];
sSoundBanks[bank][soundIndex].y = &pos[1];
sSoundBanks[bank][soundIndex].z = &pos[2];
@@ -965,11 +961,9 @@ static void process_sound_request(u32 bits, f32 *pos)
*/
static void process_all_sound_requests(void)
{
struct Sound *sound;
while (sSoundRequestCount != sNumProcessedSoundRequests)
{
sound = &sSoundRequests[sNumProcessedSoundRequests];
struct Sound *sound = &sSoundRequests[sNumProcessedSoundRequests];
process_sound_request(sound->soundBits, sound->position);
sNumProcessedSoundRequests++;
//DEBUG_PRINT("processed sounds: %d\n", sNumProcessedSoundRequests);
@@ -1019,11 +1013,7 @@ static void update_background_music_after_sound(u8 bank, u8 soundIndex)
*/
static void select_current_sounds(u8 bank)
{
u32 isDiscreteAndStatus;
u8 latestSoundIndex;
u8 i;
u8 j;
u8 soundIndex;
u32 liveSoundPriorities[16] = {
0x10000000, 0x10000000, 0x10000000, 0x10000000,
0x10000000, 0x10000000, 0x10000000, 0x10000000,
@@ -1039,15 +1029,14 @@ static void select_current_sounds(u8 bank)
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
u8 numSoundsInBank = 0;
u8 requestedPriority;
//
// Delete stale sounds and prioritize remaining sounds into the liveSound arrays
//
soundIndex = sSoundBanks[bank][0].next;
u8 soundIndex = sSoundBanks[bank][0].next;
while (soundIndex != 0xff)
{
latestSoundIndex = soundIndex;
u8 latestSoundIndex = soundIndex;
// If a discrete sound goes 10 frames without being played (because it is too low
// priority), then mark it for deletion
@@ -1093,8 +1082,8 @@ static void select_current_sounds(u8 bank)
+ *sSoundBanks[bank][soundIndex].z * *sSoundBanks[bank][soundIndex].z)
* 1;
requestedPriority = (sSoundBanks[bank][soundIndex].soundBits & SOUNDARGS_MASK_PRIORITY)
>> SOUNDARGS_SHIFT_PRIORITY;
u8 requestedPriority = (sSoundBanks[bank][soundIndex].soundBits & SOUNDARGS_MASK_PRIORITY)
>> SOUNDARGS_SHIFT_PRIORITY;
// Recompute priority, possibly based on the sound's source position relative to the
// camera.
@@ -1127,7 +1116,7 @@ static void select_current_sounds(u8 bank)
if (liveSoundPriorities[i] >= sSoundBanks[bank][soundIndex].priority)
{
// Shift remaining sounds to the right
for (j = sMaxChannelsForSoundBank[bank] - 1; j > i; j--)
for (u8 j = sMaxChannelsForSoundBank[bank] - 1; j > i; j--)
{
liveSoundPriorities[j] = liveSoundPriorities[j - 1];
liveSoundIndices[j] = liveSoundIndices[j - 1];
@@ -1185,8 +1174,8 @@ static void select_current_sounds(u8 bank)
}
// If the sound is discrete and is playing, then delete it
isDiscreteAndStatus = sSoundBanks[bank][sCurrentSound[bank][i]].soundBits
& (SOUND_DISCRETE | SOUNDARGS_MASK_STATUS);
u32 isDiscreteAndStatus = sSoundBanks[bank][sCurrentSound[bank][i]].soundBits
& (SOUND_DISCRETE | SOUNDARGS_MASK_STATUS);
if (isDiscreteAndStatus >= (SOUND_DISCRETE | SOUND_STATUS_PLAYING)
&& sSoundBanks[bank][sCurrentSound[bank][i]].soundStatus != SOUND_STATUS_STOPPED)
{
@@ -1259,17 +1248,15 @@ static void select_current_sounds(u8 bank)
*/
static f32 get_sound_pan(f32 x, f32 z)
{
f32 absX;
f32 absZ;
f32 pan;
absX = x < 0 ? -x : x;
f32 absX = x < 0 ? -x : x;
if (absX > AUDIO_MAX_DISTANCE)
{
absX = AUDIO_MAX_DISTANCE;
}
absZ = z < 0 ? -z : z;
f32 absZ = z < 0 ? -z : z;
if (absZ > AUDIO_MAX_DISTANCE)
{
absZ = AUDIO_MAX_DISTANCE;
@@ -1476,9 +1463,7 @@ void audio_signal_game_loop_tick(void)
void update_game_sound(void)
{
u8 soundStatus;
u8 i;
u8 soundId;
u8 bank;
u8 channelIndex = 0;
u8 soundIndex;
#if defined(VERSION_JP) || defined(VERSION_US)
@@ -1493,11 +1478,11 @@ void update_game_sound(void)
return;
}
for (bank = 0; bank < SOUND_BANK_COUNT; bank++)
for (u8 bank = 0; bank < SOUND_BANK_COUNT; bank++)
{
select_current_sounds(bank);
for (i = 0; i < MAX_CHANNELS_PER_SOUND_BANK; i++)
for (u8 i = 0; i < MAX_CHANNELS_PER_SOUND_BANK; i++)
{
soundIndex = sCurrentSound[bank][i];
@@ -1890,7 +1875,6 @@ void update_game_sound(void)
void seq_player_play_sequence(u8 player, u8 seqId, u16 arg2)
{
u8 targetVolume;
u8 i;
if (player == SEQ_PLAYER_LEVEL)
{
@@ -1900,7 +1884,7 @@ void seq_player_play_sequence(u8 player, u8 seqId, u16 arg2)
sMusicDynamicDelay = 2;
}
for (i = 0; i < CHANNELS_MAX; i++)
for (u8 i = 0; i < CHANNELS_MAX; i++)
{
D_80360928[player][i].remainingFrames = 0;
}
@@ -1968,8 +1952,7 @@ void seq_player_fade_out(u8 player, u16 fadeDuration)
*/
void fade_volume_scale(u8 player, u8 targetScale, u16 fadeDuration)
{
u8 i;
for (i = 0; i < CHANNELS_MAX; i++)
for (u8 i = 0; i < CHANNELS_MAX; i++)
{
fade_channel_volume_scale(player, i, targetScale, fadeDuration);
}
@@ -1980,11 +1963,9 @@ void fade_volume_scale(u8 player, u8 targetScale, u16 fadeDuration)
*/
static void fade_channel_volume_scale(u8 player, u8 channelIndex, u8 targetScale, u16 fadeDuration)
{
struct ChannelVolumeScaleFade *temp;
if (gSequencePlayers[player].channels[channelIndex] != &gSequenceChannelNone)
{
temp = &D_80360928[player][channelIndex];
struct ChannelVolumeScaleFade *temp = &D_80360928[player][channelIndex];
temp->remainingFrames = fadeDuration;
temp->velocity = (targetScale / US_FLOAT(127.0)
- gSequencePlayers[player].channels[channelIndex]->volumeScale)
@@ -1999,10 +1980,8 @@ static void fade_channel_volume_scale(u8 player, u8 channelIndex, u8 targetScale
*/
static void func_8031F96C(u8 player)
{
u8 i;
// Loop over channels
for (i = 0; i < CHANNELS_MAX; i++)
for (u8 i = 0; i < CHANNELS_MAX; i++)
{
if (gSequencePlayers[player].channels[i] != &gSequenceChannelNone
&& D_80360928[player][i].remainingFrames != 0)
@@ -2037,18 +2016,12 @@ static void func_8031F96C(u8 player)
*/
void process_level_music_dynamics(void)
{
u32 conditionBits;
u16 tempBits;
UNUSED u16 pad;
u8 musicDynIndex;
u8 condIndex;
u8 i;
u8 j;
s16 conditionValues[8];
u8 conditionTypes[8];
s16 dur1;
s16 dur2;
u16 bit;
func_8031F96C(0);
func_8031F96C(2);
@@ -2067,14 +2040,14 @@ void process_level_music_dynamics(void)
return;
}
conditionBits = sLevelDynamics[gCurrLevelNum][1] & 0xff00;
musicDynIndex = (u8)sLevelDynamics[gCurrLevelNum][1] & 0xff;
i = 2;
u32 conditionBits = sLevelDynamics[gCurrLevelNum][1] & 0xff00;
u8 musicDynIndex = (u8)sLevelDynamics[gCurrLevelNum][1] & 0xff;
u8 i = 2;
while (conditionBits & 0xff00)
{
j = 0;
condIndex = 0;
bit = 0x8000;
u8 j = 0;
u8 condIndex = 0;
u16 bit = 0x8000;
while (j < 8)
{
if (conditionBits & bit)
@@ -2163,14 +2136,12 @@ void process_level_music_dynamics(void)
void unused_8031FED0(u8 player, u32 bits, s8 arg2)
{
u8 i;
if (arg2 < 0)
{
arg2 = -arg2;
}
for (i = 0; i < CHANNELS_MAX; i++)
for (u8 i = 0; i < CHANNELS_MAX; i++)
{
if (gSequencePlayers[player].channels[i] != &gSequenceChannelNone)
{
@@ -2311,9 +2282,7 @@ static u8 begin_background_music_fade(u16 fadeDuration)
*/
void set_audio_muted(u8 muted)
{
u8 i;
for (i = 0; i < SEQUENCE_PLAYERS; i++)
for (u8 i = 0; i < SEQUENCE_PLAYERS; i++)
{
#if defined(VERSION_EU) || defined(VERSION_SH)
if (muted)
@@ -2402,10 +2371,9 @@ void sound_init(void)
// (unused)
void get_currently_playing_sound(u8 bank, u8 *numPlayingSounds, u8 *numSoundsInBank, u8 *soundId)
{
u8 i;
u8 count = 0;
for (i = 0; i < sMaxChannelsForSoundBank[bank]; i++)
for (u8 i = 0; i < sMaxChannelsForSoundBank[bank]; i++)
{
if (sCurrentSound[bank][i] != 0xff)
{
@@ -2458,12 +2426,9 @@ void stop_sound(u32 soundBits, f32 *pos)
*/
void stop_sounds_from_source(f32 *pos)
{
u8 bank;
u8 soundIndex;
for (bank = 0; bank < SOUND_BANK_COUNT; bank++)
for (u8 bank = 0; bank < SOUND_BANK_COUNT; bank++)
{
soundIndex = sSoundBanks[bank][0].next;
u8 soundIndex = sSoundBanks[bank][0].next;
while (soundIndex != 0xff)
{
if (sSoundBanks[bank][soundIndex].x == pos)
@@ -2510,9 +2475,7 @@ void stop_sounds_in_continuous_banks(void)
*/
void sound_banks_disable(UNUSED u8 player, u16 bankMask)
{
u8 i;
for (i = 0; i < SOUND_BANK_COUNT; i++)
for (u8 i = 0; i < SOUND_BANK_COUNT; i++)
{
if (bankMask & 1)
{
@@ -2527,9 +2490,7 @@ void sound_banks_disable(UNUSED u8 player, u16 bankMask)
*/
static void disable_all_sequence_players(void)
{
u8 i;
for (i = 0; i < SEQUENCE_PLAYERS; i++)
for (u8 i = 0; i < SEQUENCE_PLAYERS; i++)
{
sequence_player_disable(&gSequencePlayers[i]);
}
@@ -2540,9 +2501,7 @@ static void disable_all_sequence_players(void)
*/
void sound_banks_enable(UNUSED u8 player, u16 bankMask)
{
u8 i;
for (i = 0; i < SOUND_BANK_COUNT; i++)
for (u8 i = 0; i < SOUND_BANK_COUNT; i++)
{
if (bankMask & 1)
{
@@ -2658,7 +2617,6 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer)
*/
void stop_background_music(u16 seqId)
{
u8 foundIndex;
u8 i;
if (sBackgroundMusicQueueSize == 0)
@@ -2668,7 +2626,7 @@ void stop_background_music(u16 seqId)
// If sequence is not found, remove an empty queue item (the next empty
// queue slot).
foundIndex = sBackgroundMusicQueueSize;
u8 foundIndex = sBackgroundMusicQueueSize;
// Search for the sequence.
for (i = 0; i < sBackgroundMusicQueueSize; i++)
@@ -2829,8 +2787,6 @@ void func_80321080(u16 fadeTimer)
*/
void func_803210D4(u16 fadeDuration)
{
u8 i;
if (sHasStartedFadeOut)
{
return;
@@ -2854,7 +2810,7 @@ void func_803210D4(u16 fadeDuration)
#endif
}
for (i = 0; i < SOUND_BANK_COUNT; i++)
for (u8 i = 0; i < SOUND_BANK_COUNT; i++)
{
if (i != SOUND_BANK_MENU)
{
+8 -16
View File
@@ -236,9 +236,7 @@ void reset_bank_and_seq_load_status(void)
void discard_bank(s32 bankId)
{
s32 i;
for (i = 0; i < gMaxSimultaneousNotes; i++)
for (s32 i = 0; i < gMaxSimultaneousNotes; i++)
{
struct Note *note = &gNotes[i];
@@ -271,9 +269,7 @@ void discard_bank(s32 bankId)
void discard_sequence(s32 seqId)
{
s32 i;
for (i = 0; i < SEQUENCE_PLAYERS; i++)
for (s32 i = 0; i < SEQUENCE_PLAYERS; i++)
{
if (gSequencePlayers[i].enabled && gSequencePlayers[i].seqId == seqId)
{
@@ -289,15 +285,13 @@ void discard_sequence(s32 seqId)
void *soundAlloc(struct SoundAllocPool *pool, u32 size)
{
u8 *start;
s32 last;
s32 i;
if (pool->cur + ALIGN16(size) <= pool->size + pool->start)
{
start = pool->cur;
pool->cur += ALIGN16(size);
last = pool->cur - start - 1;
for (i = 0; i <= last; i++)
s32 last = pool->cur - start - 1;
for (s32 i = 0; i <= last; i++)
{
start[i] = 0;
}
@@ -993,9 +987,8 @@ void *get_bank_or_seq_inner(s32 poolIdx, s32 arg1, s32 bankId)
#ifndef VERSION_SH
void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id)
{
u32 i;
UNUSED
void *ret;
void *ret;
struct TemporaryPool *temporary = &arg0->temporary;
if (arg1 == 0)
@@ -1017,7 +1010,7 @@ void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id)
else
{
struct PersistentPool *persistent = &arg0->persistent;
for (i = 0; i < persistent->numEntries; i++)
for (u32 i = 0; i < persistent->numEntries; i++)
{
if (id == persistent->entries[i].id)
{
@@ -1302,8 +1295,7 @@ void audio_reset_session(void)
#if defined(VERSION_JP) || defined(VERSION_US)
s8 updatesPerFrame;
s32 reverbWindowSize;
s32 k;
#endif
#endif
s32 i;
s32 j;
s32 persistentMem;
@@ -1379,7 +1371,7 @@ void audio_reset_session(void)
for (j = 0; j < NUMAIBUFFERS; j++)
{
for (k = 0; k < (s32)(AIBUFFER_LEN / sizeof(s16)); k++)
for (s32 k = 0; k < (s32)(AIBUFFER_LEN / sizeof(s16)); k++)
{
gAiBuffers[j][k] = 0;
}
+28 -51
View File
@@ -228,16 +228,13 @@ void *dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8 *dmaIndexRef)
{
s32 hasDma = FALSE;
struct SharedDma *dma;
uintptr_t dmaDevAddr;
u32 transfer;
u32 i;
u32 dmaIndex;
ssize_t bufferPos;
UNUSED u32 pad;
if (arg2 != 0 || *dmaIndexRef >= sSampleDmaListSize1)
{
for (i = sSampleDmaListSize1; i < gSampleDmaNumListItems; i++)
for (u32 i = sSampleDmaListSize1; i < gSampleDmaNumListItems; i++)
{
#if defined(VERSION_EU)
dma = &sSampleDmas[i];
@@ -329,8 +326,8 @@ void *dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8 *dmaIndexRef)
hasDma = TRUE;
}
transfer = dma->bufSize;
dmaDevAddr = devAddr & ~0xF;
u32 transfer = dma->bufSize;
uintptr_t dmaDevAddr = devAddr & ~0xF;
dma->ttl = 2;
dma->source = dmaDevAddr;
dma->sizeUnused = transfer;
@@ -461,7 +458,6 @@ UNUSED static
#endif
void patch_sound(UNUSED struct AudioBankSound *sound, UNUSED u8 *memBase, UNUSED u8 *offsetBase)
{
struct AudioBankSample *sample;
void *patched;
UNUSED u8 *mem; // unused on US
@@ -469,7 +465,7 @@ void patch_sound(UNUSED struct AudioBankSound *sound, UNUSED u8 *memBase, UNUSED
if (sound->sample != NULL)
{
sample = sound->sample = PATCH(sound->sample, memBase);
struct AudioBankSample *sample = sound->sample = PATCH(sound->sample, memBase);
if (sample->loaded == 0)
{
sample->sampleAddr = PATCH(sample->sampleAddr, offsetBase);
@@ -537,7 +533,6 @@ void patch_audio_bank(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32
struct Instrument **itInstrs;
struct Instrument **end;
struct AudioBank *temp;
u32 i;
void *patched;
struct Drum *drum;
struct Drum **drums;
@@ -561,7 +556,7 @@ void patch_audio_bank(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32
{
mem->drums = (void *)((uintptr_t)drums + (uintptr_t)mem);
if (numDrums > 0) //! unneeded when -sopt is enabled
for (i = 0; i < numDrums; i++)
for (u32 i = 0; i < numDrums; i++)
{
#else
numDrums2 = numDrums;
@@ -603,9 +598,8 @@ void patch_audio_bank(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32
if (numInstruments > 0)
{
//! Doesn't affect EU, but required for US/JP
struct Instrument **tempInst;
itInstrs = temp->instruments;
tempInst = temp->instruments;
struct Instrument **tempInst = temp->instruments;
end = numInstruments + tempInst;
#if defined(VERSION_JP) || defined(VERSION_US)
@@ -656,22 +650,18 @@ struct AudioBank *bank_load_immediate(s32 bankId, s32 arg1)
UNUSED u32 pad1[4];
u32 buf[4];
u32 numInstruments, numDrums;
struct AudioBank *ret;
u8 *ctlData;
s32 alloc;
// (This is broken if the length is 1 (mod 16), but that never happens --
// it's always divisible by 4.)
DEBUG_PRINT("- getting alloc");
alloc = gAlCtlHeader->seqArray[bankId].len + 0xf;
s32 alloc = gAlCtlHeader->seqArray[bankId].len + 0xf;
DEBUG_PRINT("- aligning");
alloc = ALIGN16(alloc);
alloc -= 0x10;
DEBUG_PRINT("- getting ctl data for bank %d", bankId);
ctlData = gAlCtlHeader->seqArray[bankId].offset;
u8 *ctlData = gAlCtlHeader->seqArray[bankId].offset;
DEBUG_PRINT("- alloc bank or seq");
ret = alloc_bank_or_seq(&gBankLoadedPool, 1, alloc, arg1, bankId);
struct AudioBank *ret = alloc_bank_or_seq(&gBankLoadedPool, 1, alloc, arg1, bankId);
if (ret == NULL)
{
return NULL;
@@ -681,8 +671,8 @@ struct AudioBank *bank_load_immediate(s32 bankId, s32 arg1)
DEBUG_PRINT("- ctlData: %x", ctlData);
audio_dma_copy_immediate((uintptr_t)ctlData, buf, 0x10);
DEBUG_PRINT("- getting nums");
numInstruments = buf[0];
numDrums = buf[1];
u32 numInstruments = buf[0];
u32 numDrums = buf[1];
DEBUG_PRINT("- copying dma immediate 2");
audio_dma_copy_immediate((uintptr_t)(ctlData + 0x10), ret, alloc);
DEBUG_PRINT("- patching bank");
@@ -757,14 +747,10 @@ struct AudioBank *bank_load_async(s32 bankId, s32 arg1, struct SequencePlayer *s
void *sequence_dma_immediate(s32 seqId, s32 arg1)
{
s32 seqLength;
void *ptr;
u8 *seqData;
seqLength = gSeqFileHeader->seqArray[seqId].len + 0xf;
s32 seqLength = gSeqFileHeader->seqArray[seqId].len + 0xf;
seqLength = ALIGN16(seqLength);
seqData = gSeqFileHeader->seqArray[seqId].offset;
ptr = alloc_bank_or_seq(&gSeqLoadedPool, 1, seqLength, arg1, seqId);
u8 *seqData = gSeqFileHeader->seqArray[seqId].offset;
void *ptr = alloc_bank_or_seq(&gSeqLoadedPool, 1, seqLength, arg1, seqId);
if (ptr == NULL)
{
return NULL;
@@ -777,16 +763,11 @@ void *sequence_dma_immediate(s32 seqId, s32 arg1)
void *sequence_dma_async(s32 seqId, s32 arg1, struct SequencePlayer *seqPlayer)
{
s32 seqLength;
void *ptr;
u8 *seqData;
OSMesgQueue *mesgQueue;
eu_stubbed_printf_1("Seq %d Loading Start\n", seqId);
seqLength = gSeqFileHeader->seqArray[seqId].len + 0xf;
s32 seqLength = gSeqFileHeader->seqArray[seqId].len + 0xf;
seqLength = ALIGN16(seqLength);
seqData = gSeqFileHeader->seqArray[seqId].offset;
ptr = alloc_bank_or_seq(&gSeqLoadedPool, 1, seqLength, arg1, seqId);
u8 *seqData = gSeqFileHeader->seqArray[seqId].offset;
void *ptr = alloc_bank_or_seq(&gSeqLoadedPool, 1, seqLength, arg1, seqId);
if (ptr == NULL)
{
eu_stubbed_printf_0("Heap Overflow Error\n");
@@ -805,7 +786,7 @@ void *sequence_dma_async(s32 seqId, s32 arg1, struct SequencePlayer *seqPlayer)
else
{
audio_dma_copy_immediate((uintptr_t)seqData, ptr, 0x40);
mesgQueue = &seqPlayer->seqDmaMesgQueue;
OSMesgQueue *mesgQueue = &seqPlayer->seqDmaMesgQueue;
osCreateMesgQueue(mesgQueue, &seqPlayer->seqDmaMesg, 1);
#if defined(VERSION_JP) || defined(VERSION_US)
seqPlayer->seqDmaMesg = NULL;
@@ -873,11 +854,10 @@ struct AudioBank *load_banks_immediate(s32 seqId, u8 *outDefaultBank)
DEBUG_PRINT("load_banks_immediate()");
void *ret;
u32 bankId;
u16 offset;
u8 i;
DEBUG_PRINT("- getting offset");
offset = ((u16 *)gAlBankSets)[seqId];
u16 offset = ((u16 *)gAlBankSets)[seqId];
#ifdef VERSION_EU
for (i = gAlBankSets[offset++]; i != 0; i--)
{
@@ -977,7 +957,6 @@ void load_sequence(u32 player, u32 seqId, s32 loadAsync)
void load_sequence_internal(u32 player, u32 seqId, s32 loadAsync)
{
void *sequenceData;
struct SequencePlayer *seqPlayer = &gSequencePlayers[player];
UNUSED u32 padding[2];
@@ -1022,7 +1001,7 @@ void load_sequence_internal(u32 player, u32 seqId, s32 loadAsync)
eu_stubbed_printf_0("Seq Loading Start\n");
seqPlayer->seqId = seqId;
sequenceData = get_bank_or_seq(&gSeqLoadedPool, 2, seqId);
void *sequenceData = get_bank_or_seq(&gSeqLoadedPool, 2, seqId);
if (sequenceData == NULL)
{
if (seqPlayer->seqDmaInProgress)
@@ -1061,18 +1040,16 @@ void audio_init()
DEBUG_PRINT("audio_init()");
UNUSED s8 pad[32];
u8 buf[0x10];
s32 i, j, UNUSED k;
UNUSED s32 lim1; // lim1 unused in EU
s32 lim2, UNUSED lim3;
UNUSED u32 size;
s32 i, UNUSED k;
// lim1 unused in EU
s32 UNUSED lim3;
UNUSED u64 *ptr64;
void *data;
UNUSED s32 pad2;
gAudioLoadLock = AUDIO_LOCK_UNINITIALIZED;
DEBUG_PRINT("- setting values in unused");
lim1 = gUnusedCount80333EE8;
s32 lim1 = gUnusedCount80333EE8;
for (i = 0; i < lim1; i++)
{
gUnused80226E58[i] = 0;
@@ -1080,7 +1057,7 @@ void audio_init()
}
DEBUG_PRINT("- clearing audio heap");
lim2 = gAudioHeapSize;
s32 lim2 = gAudioHeapSize;
for (i = 0; i <= lim2 / 8 - 1; i++)
{
((u64 *)gAudioHeap)[i] = 0;
@@ -1113,7 +1090,7 @@ void audio_init()
{
gAiBuffers[i] = soundAlloc(&gAudioInitPool, AIBUFFER_LEN);
for (j = 0; j < (s32)(AIBUFFER_LEN / sizeof(s16)); j++)
for (s32 j = 0; j < (s32)(AIBUFFER_LEN / sizeof(s16)); j++)
{
gAiBuffers[i][j] = 0;
}
@@ -1128,10 +1105,10 @@ void audio_init()
// Load headers for sounds and sequences
gSeqFileHeader = (ALSeqFile *)buf;
data = gMusicData;
void *data = gMusicData;
audio_dma_copy_immediate((uintptr_t)data, gSeqFileHeader, 0x10);
gSequenceCount = gSeqFileHeader->seqCount;
size = ALIGN16(gSequenceCount * sizeof(ALSeqData) + 4);
u32 size = ALIGN16(gSequenceCount * sizeof(ALSeqData) + 4);
gSeqFileHeader = soundAlloc(&gAudioInitPool, size);
audio_dma_copy_immediate((uintptr_t)data, gSeqFileHeader, size);
alSeqFileNew(gSeqFileHeader, data);
+11 -25
View File
@@ -400,7 +400,6 @@ void process_notes(void)
#if defined(VERSION_JP) || defined(VERSION_US)
struct AudioListItem *it;
#endif
s32 i;
// Macro versions of audio_list_push_front and audio_list_remove.
// Should ideally be changed to use copt.
@@ -414,7 +413,7 @@ void process_notes(void)
? it \
: (it->prev->next = it->next, it->next->prev = it->prev, it->prev = NULL, it))
for (i = 0; i < gMaxSimultaneousNotes; i++)
for (s32 i = 0; i < gMaxSimultaneousNotes; i++)
{
note = &gNotes[i];
#if defined(VERSION_EU) || defined(VERSION_SH)
@@ -980,8 +979,6 @@ void build_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLay
s32 j;
s32 pos;
s32 stepSize;
s32 offset;
u8 lim;
u8 origSampleCount = note->sampleCount;
if (seqLayer->freqScale < US_FLOAT(1.0))
@@ -1023,9 +1020,9 @@ void build_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLay
}
// Repeat sample
for (offset = note->sampleCount; offset < 0x40; offset += note->sampleCount)
for (s32 offset = note->sampleCount; offset < 0x40; offset += note->sampleCount)
{
lim = note->sampleCount;
u8 lim = note->sampleCount;
if (offset < 0 || offset > 0)
{
for (j = 0; j < lim; j++)
@@ -1098,10 +1095,8 @@ void init_note_lists(struct NotePool *pool)
void init_note_free_list(void)
{
s32 i;
init_note_lists(&gNoteFreeLists);
for (i = 0; i < gMaxSimultaneousNotes; i++)
for (s32 i = 0; i < gMaxSimultaneousNotes; i++)
{
gNotes[i].listItem.u.value = &gNotes[i];
gNotes[i].listItem.prev = NULL;
@@ -1111,13 +1106,12 @@ void init_note_free_list(void)
void note_pool_clear(struct NotePool *pool)
{
s32 i;
struct AudioListItem *source;
struct AudioListItem *cur;
struct AudioListItem *dest;
UNUSED s32 j; // unused in EU
for (i = 0; i < 4; i++)
for (s32 i = 0; i < 4; i++)
{
switch (i)
{
@@ -1180,7 +1174,6 @@ void note_pool_fill(struct NotePool *pool, s32 count)
{
s32 i;
s32 j;
struct Note *note;
struct AudioListItem *source;
struct AudioListItem *dest;
@@ -1219,7 +1212,7 @@ void note_pool_fill(struct NotePool *pool, s32 count)
while (j < count)
{
note = audio_list_pop_back(source);
struct Note *note = audio_list_pop_back(source);
if (note == NULL)
{
break;
@@ -1593,16 +1586,12 @@ null_return: seqLayer->status = SOUND_LOAD_STATUS_NOT_LOADED;
#if defined(VERSION_JP) || defined(VERSION_US)
void reclaim_notes(void)
{
struct Note *note;
s32 i;
s32 cond;
for (i = 0; i < gMaxSimultaneousNotes; i++)
for (s32 i = 0; i < gMaxSimultaneousNotes; i++)
{
note = &gNotes[i];
struct Note *note = &gNotes[i];
if (note->parentLayer != NO_LAYER)
{
cond = FALSE;
s32 cond = FALSE;
if (!note->parentLayer->enabled && note->priority >= NOTE_PRIORITY_MIN)
{
cond = TRUE;
@@ -1645,12 +1634,9 @@ void reclaim_notes(void)
void note_init_all(void)
{
struct Note *note;
s32 i;
for (i = 0; i < gMaxSimultaneousNotes; i++)
for (s32 i = 0; i < gMaxSimultaneousNotes; i++)
{
note = &gNotes[i];
struct Note *note = &gNotes[i];
#if defined(VERSION_EU) || defined(VERSION_SH)
note->noteSubEu = gZeroNoteSub;
#else
+15 -34
View File
@@ -33,8 +33,6 @@ u8 get_instrument(
void sequence_channel_init(struct SequenceChannel *seqChannel)
{
s32 i;
seqChannel->enabled = FALSE;
seqChannel->finished = FALSE;
seqChannel->stopScript = FALSE;
@@ -91,7 +89,7 @@ void sequence_channel_init(struct SequenceChannel *seqChannel)
seqChannel->freqScale = 1.0f;
#endif
for (i = 0; i < 8; i++)
for (s32 i = 0; i < 8; i++)
{
seqChannel->soundScriptIO[i] = -1;
}
@@ -200,8 +198,7 @@ void seq_channel_layer_free(struct SequenceChannel *seqChannel, s32 layerIndex)
void sequence_channel_disable(struct SequenceChannel *seqChannel)
{
s32 i;
for (i = 0; i < LAYERS_MAX; i++)
for (s32 i = 0; i < LAYERS_MAX; i++)
{
seq_channel_layer_free(seqChannel, i);
}
@@ -213,8 +210,7 @@ void sequence_channel_disable(struct SequenceChannel *seqChannel)
struct SequenceChannel *allocate_sequence_channel(void)
{
s32 i;
for (i = 0; i < ARRAY_COUNT(gSequenceChannels); i++)
for (s32 i = 0; i < ARRAY_COUNT(gSequenceChannels); i++)
{
if (gSequenceChannels[i].seqPlayer == NULL)
{
@@ -230,14 +226,11 @@ struct SequenceChannel *allocate_sequence_channel(void)
void sequence_player_init_channels(struct SequencePlayer *seqPlayer, u16 channelBits)
{
struct SequenceChannel *seqChannel;
s32 i;
for (i = 0; i < CHANNELS_MAX; i++)
for (s32 i = 0; i < CHANNELS_MAX; i++)
{
if (channelBits & 1)
{
seqChannel = seqPlayer->channels[i];
struct SequenceChannel *seqChannel = seqPlayer->channels[i];
if (IS_SEQUENCE_CHANNEL_VALID(seqChannel) == TRUE && seqChannel->seqPlayer == seqPlayer)
{
sequence_channel_disable(seqChannel);
@@ -270,15 +263,12 @@ void sequence_player_init_channels(struct SequencePlayer *seqPlayer, u16 channel
void sequence_player_disable_channels(struct SequencePlayer *seqPlayer, u16 channelBits)
{
struct SequenceChannel *seqChannel;
s32 i;
eu_stubbed_printf_0("SUBTRACK DIM\n");
for (i = 0; i < CHANNELS_MAX; i++)
for (s32 i = 0; i < CHANNELS_MAX; i++)
{
if (channelBits & 1)
{
seqChannel = seqPlayer->channels[i];
struct SequenceChannel *seqChannel = seqPlayer->channels[i];
if (IS_SEQUENCE_CHANNEL_VALID(seqChannel) == TRUE)
{
if (seqChannel->seqPlayer == seqPlayer)
@@ -307,7 +297,6 @@ void sequence_player_disable_channels(struct SequencePlayer *seqPlayer, u16 chan
void sequence_channel_enable(struct SequencePlayer *seqPlayer, u8 channelIndex, void *script)
{
struct SequenceChannel *seqChannel = seqPlayer->channels[channelIndex];
s32 i;
if (IS_SEQUENCE_CHANNEL_VALID(seqChannel) == FALSE)
{
#ifdef VERSION_EU
@@ -337,7 +326,7 @@ void sequence_channel_enable(struct SequencePlayer *seqPlayer, u8 channelIndex,
seqChannel->scriptState.depth = 0;
seqChannel->scriptState.pc = script;
seqChannel->delay = 0;
for (i = 0; i < LAYERS_MAX; i++)
for (s32 i = 0; i < LAYERS_MAX; i++)
{
if (seqChannel->layers[i] != NULL)
{
@@ -439,14 +428,12 @@ void *audio_list_pop_back(struct AudioListItem *list)
void init_layer_freelist(void)
{
s32 i;
gLayerFreeList.prev = &gLayerFreeList;
gLayerFreeList.next = &gLayerFreeList;
gLayerFreeList.u.count = 0;
gLayerFreeList.pool = NULL;
for (i = 0; i < ARRAY_COUNT(gSequenceLayers); i++)
for (s32 i = 0; i < ARRAY_COUNT(gSequenceLayers); i++)
{
#if defined(VERSION_EU) || defined(VERSION_SH)
gSequenceLayers[i].listItem.u.value = &gSequenceLayers[i];
@@ -1673,9 +1660,6 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel)
{
DEBUG_PRINT("sequence_channel_process_script()");
struct M64ScriptState *state;
struct SequencePlayer *seqPlayer;
u8 cmd;
s8 temp;
u8 loBits;
u16 sp5A;
@@ -1701,7 +1685,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel)
return;
}
seqPlayer = seqChannel->seqPlayer;
struct SequencePlayer *seqPlayer = seqChannel->seqPlayer;
if (seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_STOP_SCRIPT) != 0)
{
return;
@@ -1712,12 +1696,12 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel)
seqChannel->delay--;
}
state = &seqChannel->scriptState;
struct M64ScriptState *state = &seqChannel->scriptState;
if (seqChannel->delay == 0)
{
for (;;)
{
cmd = m64_read_u8(state);
u8 cmd = m64_read_u8(state);
DEBUG_PRINT("- handling command: %x", cmd);
#if !defined(VERSION_EU) && !defined(VERSION_SH)
@@ -2073,11 +2057,10 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel)
case 0xc7: // chan_writeseq; write to sequence data (!)
{
#if !defined(VERSION_EU) && !defined(VERSION_SH)
u8 *seqData;
#endif
cmd = m64_read_u8(state);
sp5A = m64_read_s16(state);
seqData = seqPlayer->seqData + sp5A;
u8 *seqData = seqPlayer->seqData + sp5A;
*seqData = (u8)value + cmd;
}
break;
@@ -2489,7 +2472,6 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer)
u8 loBits;
u8 temp;
s32 value;
s32 i;
u16 u16v;
u8 *seqData;
struct M64ScriptState *state;
@@ -3029,7 +3011,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer)
}
}
for (i = 0; i < CHANNELS_MAX; i++)
for (s32 i = 0; i < CHANNELS_MAX; i++)
{
#if defined(VERSION_EU) || defined(VERSION_SH)
if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[i]) == TRUE)
@@ -3048,8 +3030,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer)
// This runs 240 times per second.
void process_sequences(UNUSED s32 iterationsRemaining)
{
s32 i;
for (i = 0; i < SEQUENCE_PLAYERS; i++)
for (s32 i = 0; i < SEQUENCE_PLAYERS; i++)
{
if (gSequencePlayers[i].enabled == TRUE)
{
+12 -25
View File
@@ -171,9 +171,6 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex)
struct ReverbRingBufferItem *item;
s32 srcPos;
s32 dstPos;
s32 nSamples;
s32 numSamplesAfterDownsampling;
s32 excessiveSamples;
if (gReverbDownsampleRate != 1)
{
if (gSynthesisReverb.framesLeftToIgnore == 0)
@@ -202,7 +199,7 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex)
}
item = &gSynthesisReverb.items[gSynthesisReverb.curFrame][updateIndex];
numSamplesAfterDownsampling = chunkLen / gReverbDownsampleRate;
s32 numSamplesAfterDownsampling = chunkLen / gReverbDownsampleRate;
if (numSamplesAfterDownsampling + gSynthesisReverb.nextRingBufferPos - gSynthesisReverb.bufSizePerChannel < 0)
{
// There is space in the ring buffer before it wraps around
@@ -214,9 +211,8 @@ void prepare_reverb_ring_buffer(s32 chunkLen, u32 updateIndex)
else
{
// Ring buffer wrapped around
excessiveSamples =
numSamplesAfterDownsampling + gSynthesisReverb.nextRingBufferPos - gSynthesisReverb.bufSizePerChannel;
nSamples = numSamplesAfterDownsampling - excessiveSamples;
s32 excessiveSamples = numSamplesAfterDownsampling + gSynthesisReverb.nextRingBufferPos - gSynthesisReverb.bufSizePerChannel;
s32 nSamples = numSamplesAfterDownsampling - excessiveSamples;
item->lengthA = nSamples * 2;
item->lengthB = excessiveSamples * 2;
item->startPos = gSynthesisReverb.nextRingBufferPos;
@@ -368,14 +364,12 @@ u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, s16 *aiBuf, s32 bufLen)
{
DEBUG_PRINT("synthesis_execute()");
s32 chunkLen;
s32 i;
u32 *aiBufPtr = (u32 *)aiBuf;
u64 *cmd = cmdBuf + 1;
s32 v0;
aSegment(cmdBuf, 0, 0);
for (i = gAudioUpdatesPerFrame; i > 0; i--)
for (s32 i = gAudioUpdatesPerFrame; i > 0; i--)
{
if (i == 1)
{
@@ -384,7 +378,7 @@ u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, s16 *aiBuf, s32 bufLen)
}
else
{
v0 = bufLen / i;
s32 v0 = bufLen / i;
// chunkLen = v0 rounded to nearest multiple of 8
chunkLen = v0 - (v0 & 7);
@@ -592,17 +586,14 @@ u64 *synthesis_do_one_audio_update(s16 *aiBuf, s32 bufLen, u64 *cmd, s32 updateI
DEBUG_PRINT("synthesis_do_one_audio_update()");
UNUSED s32 pad1[1];
s16 ra;
s16 t4;
UNUSED s32 pad[2];
struct ReverbRingBufferItem *v1;
UNUSED s32 pad2[1];
s16 temp;
DEBUG_PRINT("- curFrame: %d", gSynthesisReverb.curFrame);
DEBUG_PRINT("- updateIndex: %d", updateIndex);
v1 = &gSynthesisReverb.items[gSynthesisReverb.curFrame][updateIndex];
struct ReverbRingBufferItem *v1 = &gSynthesisReverb.items[gSynthesisReverb.curFrame][updateIndex];
DEBUG_PRINT("- v1: %x", v1);
if (gSynthesisReverb.useReverb == 0)
@@ -649,8 +640,8 @@ u64 *synthesis_do_one_audio_update(s16 *aiBuf, s32 bufLen, u64 *cmd, s32 updateI
// Same as above but upsample the previously downsampled samples used for reverb first
temp = 0; //! jesus christ
t4 = (v1->startPos & 7) * 2;
ra = ALIGN(v1->lengthA + t4, 4);
s16 t4 = (v1->startPos & 7) * 2;
s16 ra = ALIGN(v1->lengthA + t4, 4);
DEBUG_PRINT("- set load buffer pair");
aSetLoadBufferPair(cmd++, 0, v1->startPos - t4 / 2);
if (v1->lengthB != 0)
@@ -1126,16 +1117,14 @@ u64 *synthesis_process_notes(s16 *aiBuf, s32 bufLen, u64 *cmd)
u64 *load_wave_samples(u64 *cmd, struct Note *note, s32 nSamplesToLoad)
{
s32 a3;
s32 i;
aSetBuffer(cmd++, /*flags*/ 0, /*dmemin*/ DMEM_ADDR_UNCOMPRESSED_NOTE, /*dmemout*/ 0,
/*count*/ sizeof(note->synthesisBuffers->samples));
aLoadBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->synthesisBuffers->samples));
note->samplePosInt &= note->sampleCount - 1;
a3 = 64 - note->samplePosInt;
s32 a3 = 64 - note->samplePosInt;
if (a3 < nSamplesToLoad)
{
for (i = 0; i <= (nSamplesToLoad - a3 + 63) / 64 - 1; i++)
for (s32 i = 0; i <= (nSamplesToLoad - a3 + 63) / 64 - 1; i++)
{
aDMEMMove(cmd++, /*dmemin*/ DMEM_ADDR_UNCOMPRESSED_NOTE, /*dmemout*/ DMEM_ADDR_UNCOMPRESSED_NOTE + (1 + i) * sizeof(note->synthesisBuffers->samples), /*count*/ sizeof(note->synthesisBuffers->samples));
}
@@ -1522,10 +1511,8 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, f32 pan, u8 reverb
}
else if (note->stereoHeadsetEffects && gSoundMode == SOUND_MODE_STEREO)
{
u8 strongLeft;
u8 strongRight;
strongLeft = FALSE;
strongRight = FALSE;
u8 strongLeft = FALSE;
u8 strongRight = FALSE;
note->headsetPanLeft = 0;
note->headsetPanRight = 0;
note->usesHeadsetPanEffects = FALSE;