mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Audio struct fixes, and other random documenting things (#491)
* Migrade rodata for thread3_main, fix game.c not having a defined rodata in the splat yaml files, and run the formatter. * func_80066CDC NON_MATCHING * Minor stuff * Small docs * Fix some audio stuff * Undo some var moving.
This commit is contained in:
@@ -734,7 +734,7 @@ typedef struct {
|
||||
u8 maxChannels; /* max MIDI channels to support (16)*/
|
||||
u8 debugFlags; /* control which error get reported */
|
||||
ALHeap *heap; /* ptr to initialized heap */
|
||||
u8 unknown_0x10;
|
||||
u8 voiceLimit;
|
||||
void *initOsc;
|
||||
void *updateOsc;
|
||||
void *stopOsc;
|
||||
@@ -798,10 +798,8 @@ typedef struct {
|
||||
ALVoiceState *vAllocHead; /* list head for allocated voices */
|
||||
ALVoiceState *vAllocTail; /* list tail for allocated voices */
|
||||
ALVoiceState *vFreeList; /* list of free voice state structs */
|
||||
s8 unk70;
|
||||
s8 unk71;
|
||||
s8 unk72;
|
||||
s8 unk73;
|
||||
u8 voiceLimit;
|
||||
u8 mappedVoices;
|
||||
ALOscInit initOsc;
|
||||
ALOscUpdate updateOsc;
|
||||
ALOscStop stopOsc;
|
||||
@@ -832,10 +830,8 @@ typedef struct {
|
||||
/* 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 */ s8 unk70;
|
||||
/* 0x71 */ s8 unk71;
|
||||
/* 0x72 */ s8 unk72;
|
||||
/* 0x73 */ s8 unk73;
|
||||
/* 0x70 */ u8 voiceLimit;
|
||||
/* 0x71 */ u8 mappedVoices;
|
||||
/* 0x74 */ ALOscInit initOsc;
|
||||
/* 0x78 */ ALOscUpdate updateOsc;
|
||||
/* 0x7C */ ALOscStop stopOsc;
|
||||
|
||||
@@ -87,8 +87,8 @@ void alCSPNew(ALCSPlayer *seqp, ALSeqpConfig *c)
|
||||
seqp->initOsc = c->initOsc;
|
||||
seqp->updateOsc = c->updateOsc;
|
||||
seqp->stopOsc = c->stopOsc;
|
||||
seqp->unk71 = 0;
|
||||
seqp->unk70 = c->unknown_0x10;
|
||||
seqp->mappedVoices = 0;
|
||||
seqp->voiceLimit = c->voiceLimit;
|
||||
|
||||
seqp->nextEvent.type = AL_SEQP_API_EVT; /* this will start the voice handler "spinning" */
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <libaudio.h>
|
||||
|
||||
void alCSPSetFadeIn(ALSeqPlayer *seqp, u8 chan, ALPan pan) {
|
||||
void alCSPSetFadeIn(ALCSPlayer *seqp, u8 chan, ALPan pan) {
|
||||
ALEvent evt;
|
||||
|
||||
evt.type = AL_SEQP_MIDI_EVT;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <libaudio.h>
|
||||
|
||||
void alSeqChOff(ALSeqPlayer *seqp, u8 chan) {
|
||||
void alSeqChOff(ALCSPlayer *seqp, u8 chan) {
|
||||
ALEvent evt;
|
||||
|
||||
evt.type = AL_SEQP_MIDI_EVT;
|
||||
@@ -11,7 +11,7 @@ void alSeqChOff(ALSeqPlayer *seqp, u8 chan) {
|
||||
alEvtqPostEvent(&seqp->evtq, &evt, 0);
|
||||
}
|
||||
|
||||
void alSeqChOn(ALSeqPlayer *seqp, u8 chan) {
|
||||
void alSeqChOn(ALCSPlayer *seqp, u8 chan) {
|
||||
ALEvent evt;
|
||||
|
||||
evt.type = AL_SEQP_MIDI_EVT;
|
||||
|
||||
@@ -458,6 +458,6 @@ void __seqpStopOsc(ALSeqPlayer *seqp, ALVoiceState *vs)
|
||||
/**
|
||||
* The voice limit bytes seem to be unique to this game.
|
||||
*/
|
||||
void set_voice_limit(ALSeqPlayer *seqp, s8 voiceLimit) {
|
||||
void set_voice_limit(ALCSPlayer *seqp, s8 voiceLimit) {
|
||||
seqp->voiceLimit = voiceLimit;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <libaudio.h>
|
||||
|
||||
void func_80063A90(ALSeqPlayer *seqp, u8 chan) {
|
||||
void func_80063A90(ALCSPlayer *seqp, u8 chan) {
|
||||
ALEvent evt;
|
||||
|
||||
evt.type = AL_SEQP_MIDI_EVT;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "types.h"
|
||||
#include "audio_internal.h"
|
||||
|
||||
void alSeqChOff(ALSeqPlayer *seqp, u8 chan);
|
||||
void alSeqChOn(ALSeqPlayer *seqp, u8 chan);
|
||||
void alSeqChOff(ALCSPlayer *seqp, u8 chan);
|
||||
void alSeqChOn(ALCSPlayer *seqp, u8 chan);
|
||||
|
||||
#endif
|
||||
|
||||
+35
-35
@@ -13,8 +13,8 @@
|
||||
|
||||
/************ .data ************/
|
||||
|
||||
ALSeqPlayer *gMusicPlayer = NULL;
|
||||
ALSeqPlayer *gJinglePlayer = NULL;
|
||||
ALCSPlayer *gMusicPlayer = NULL;
|
||||
ALCSPlayer *gJinglePlayer = NULL;
|
||||
u8 gMusicBaseVolume = 127;
|
||||
u8 sfxRelativeVolume = 127;
|
||||
u8 gCanPlayMusic = TRUE;
|
||||
@@ -190,8 +190,8 @@ void sound_volume_change(s32 behaviour) {
|
||||
set_sound_channel_volume(1, 32767);
|
||||
set_sound_channel_volume(2, 0);
|
||||
set_sound_channel_volume(4, 0);
|
||||
alCSPSetVol((ALCSPlayer *) gMusicPlayer, (s16) (gMusicBaseVolume * gMusicSliderVolume >> 2));
|
||||
alCSPSetVol((ALCSPlayer *) gJinglePlayer, 0);
|
||||
alCSPSetVol(gMusicPlayer, (s16) (gMusicBaseVolume * gMusicSliderVolume >> 2));
|
||||
alCSPSetVol(gJinglePlayer, 0);
|
||||
break;
|
||||
case VOLUME_LOWER_AMBIENT: // Mute the ambient channel, making course elements stop making noise.
|
||||
set_sound_channel_volume(0, 0);
|
||||
@@ -210,8 +210,8 @@ void sound_volume_change(s32 behaviour) {
|
||||
set_sound_channel_volume(1, 32767);
|
||||
set_sound_channel_volume(2, 32767);
|
||||
set_sound_channel_volume(4, 32767);
|
||||
alCSPSetVol((ALCSPlayer *) gMusicPlayer, (s16) (gMusicBaseVolume * gMusicSliderVolume));
|
||||
alCSPSetVol((ALCSPlayer *) gJinglePlayer, (s16) (get_sfx_volume_slider() * sfxRelativeVolume));
|
||||
alCSPSetVol(gMusicPlayer, (s16) (gMusicBaseVolume * gMusicSliderVolume));
|
||||
alCSPSetVol(gJinglePlayer, (s16) (get_sfx_volume_slider() * sfxRelativeVolume));
|
||||
break;
|
||||
}
|
||||
gAudioVolumeSetting = behaviour;
|
||||
@@ -242,7 +242,7 @@ void music_play(u8 seqID) {
|
||||
if (gCanPlayMusic) {
|
||||
music_sequence_start(gCurrentSequenceID, gMusicPlayer);
|
||||
}
|
||||
gMusicTempo = alCSPGetTempo((ALCSPlayer *) gMusicPlayer);
|
||||
gMusicTempo = alCSPGetTempo(gMusicPlayer);
|
||||
audioPrevCount = osGetCount();
|
||||
gMusicPlaying = TRUE;
|
||||
gDynamicMusicChannelMask = MUSIC_CHAN_MASK_NONE;
|
||||
@@ -355,7 +355,7 @@ void sound_update_queue(u8 updateRate) {
|
||||
music_sequence_init(gMusicPlayer, gMusicSequenceData, &gMusicNextSeqID, &gMusicSequence);
|
||||
music_sequence_init(gJinglePlayer, gJingleSequenceData, &gJingleNextSeqID, &gJingleSequence);
|
||||
if (sMusicTempo == -1 && gMusicPlayer->target) {
|
||||
sMusicTempo = 60000000 / alCSPGetTempo((ALCSPlayer *) gMusicPlayer);
|
||||
sMusicTempo = 60000000 / alCSPGetTempo(gMusicPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ void music_channel_on(u8 channel) {
|
||||
*/
|
||||
void music_channel_pan_set(u8 channel, ALPan pan) {
|
||||
if (channel < AUDIO_CHANNELS) {
|
||||
alCSPSetChlPan((ALCSPlayer *) gMusicPlayer, channel, pan);
|
||||
alCSPSetChlPan(gMusicPlayer, channel, pan);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,7 +448,7 @@ void music_channel_pan_set(u8 channel, ALPan pan) {
|
||||
*/
|
||||
void music_channel_volume_set(u8 channel, u8 volume) {
|
||||
if (channel < AUDIO_CHANNELS) {
|
||||
alCSPSetChlVol((ALCSPlayer *) gMusicPlayer, channel, volume);
|
||||
alCSPSetChlVol(gMusicPlayer, channel, volume);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,7 +460,7 @@ UNUSED u8 music_channel_volume(u8 channel) {
|
||||
if (channel >= AUDIO_CHANNELS) {
|
||||
return 0;
|
||||
} else {
|
||||
return alCSPGetChlVol((ALCSPlayer *) gMusicPlayer, channel);
|
||||
return alCSPGetChlVol(gMusicPlayer, channel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ u8 music_channel_fade(u8 channel) {
|
||||
if (channel >= AUDIO_CHANNELS) {
|
||||
return 0;
|
||||
}
|
||||
return alCSPGetFadeIn((ALCSPlayer *) gMusicPlayer, channel);
|
||||
return alCSPGetFadeIn(gMusicPlayer, channel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -505,17 +505,17 @@ UNUSED u8 func_80001358(u8 arg0, u8 arg1, s32 arg2) {
|
||||
|
||||
// u8 fadeIn_chan = arg0;
|
||||
if (!(arg0 == 100)) {
|
||||
val_1f = arg2 + alCSPGetChlVol((ALCSPlayer *) gMusicPlayer, arg0);
|
||||
val_1f = arg2 + alCSPGetChlVol(gMusicPlayer, arg0);
|
||||
if (val_1f > 127) {
|
||||
val_1f = 127;
|
||||
}
|
||||
alCSPSetChlVol((ALCSPlayer *) gMusicPlayer, arg0, val_1f);
|
||||
alCSPSetChlVol(gMusicPlayer, arg0, val_1f);
|
||||
}
|
||||
|
||||
if (arg1 != 100) {
|
||||
updatedVol = alCSPGetChlVol((ALCSPlayer *) gMusicPlayer, arg1);
|
||||
updatedVol = alCSPGetChlVol(gMusicPlayer, arg1);
|
||||
val_1e = (updatedVol > arg2) ? updatedVol - arg2 : 0;
|
||||
alCSPSetChlVol((ALCSPlayer *) gMusicPlayer, arg1, val_1e);
|
||||
alCSPSetChlVol(gMusicPlayer, arg1, val_1e);
|
||||
return val_1e;
|
||||
} else {
|
||||
return 127 - val_1f;
|
||||
@@ -526,7 +526,7 @@ UNUSED void func_80001440(u8 *arg0) {
|
||||
s32 s0 = 0;
|
||||
if (gMusicPlayer->maxChannels > 0) {
|
||||
do {
|
||||
arg0[s0] = alSeqpGetChlFXMix(gMusicPlayer, s0);
|
||||
arg0[s0] = alSeqpGetChlFXMix((ALSeqPlayer *) gMusicPlayer, s0);
|
||||
s0++;
|
||||
} while (s0 < gMusicPlayer->maxChannels);
|
||||
}
|
||||
@@ -548,7 +548,7 @@ void music_tempo_set_relative(f32 tempo) {
|
||||
void music_tempo_set(s32 tempo) {
|
||||
if (tempo != 0) {
|
||||
f32 inv_tempo = (1.0f / tempo);
|
||||
alCSPSetTempo((ALCSPlayer *) gMusicPlayer, (s32) (inv_tempo * 60000000.0f));
|
||||
alCSPSetTempo(gMusicPlayer, (s32) (inv_tempo * 60000000.0f));
|
||||
sMusicTempo = tempo;
|
||||
}
|
||||
}
|
||||
@@ -565,7 +565,7 @@ s16 music_tempo(void) {
|
||||
* Returns true if background music is currently playing.
|
||||
*/
|
||||
u8 music_is_playing(void) {
|
||||
return (alCSPGetState((ALCSPlayer *) gMusicPlayer) == AL_PLAYING);
|
||||
return (alCSPGetState(gMusicPlayer) == AL_PLAYING);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -614,7 +614,7 @@ void music_jingle_play_safe(u8 jingleID) {
|
||||
*/
|
||||
void sound_jingle_tempo_set(s32 tempo) {
|
||||
f32 inv_tempo = (1.0f / tempo);
|
||||
alCSPSetTempo((ALCSPlayer *) gJinglePlayer, (s32) (inv_tempo * 60000000.0f));
|
||||
alCSPSetTempo(gJinglePlayer, (s32) (inv_tempo * 60000000.0f));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -697,7 +697,7 @@ void music_volume_set(u8 volume) {
|
||||
|
||||
gMusicBaseVolume = volume;
|
||||
normalized_vol = gMusicSliderVolume * gMusicBaseVolume * sMusicFadeVolume;
|
||||
alCSPSetVol((ALCSPlayer *) gMusicPlayer, (s16) ((s32) (gGlobalMusicVolume * normalized_vol) >> 8));
|
||||
alCSPSetVol(gMusicPlayer, (s16) ((s32) (gGlobalMusicVolume * normalized_vol) >> 8));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -710,7 +710,7 @@ void music_volume_config_set(u32 slider_val) {
|
||||
slider_val = (slider_val <= 256) ? slider_val : 256;
|
||||
gMusicSliderVolume = slider_val;
|
||||
normalized_vol = gMusicSliderVolume * gMusicBaseVolume * sMusicFadeVolume;
|
||||
alCSPSetVol((ALCSPlayer *) gMusicPlayer, (s16) ((s32) (gGlobalMusicVolume * normalized_vol) >> 8));
|
||||
alCSPSetVol(gMusicPlayer, (s16) ((s32) (gGlobalMusicVolume * normalized_vol) >> 8));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -733,7 +733,7 @@ s32 music_volume_config(void) {
|
||||
*/
|
||||
void music_jingle_volume_set(u8 arg0) {
|
||||
sfxRelativeVolume = arg0;
|
||||
alCSPSetVol((ALCSPlayer *) gJinglePlayer, (s16) (get_sfx_volume_slider() * sfxRelativeVolume));
|
||||
alCSPSetVol(gJinglePlayer, (s16) (get_sfx_volume_slider() * sfxRelativeVolume));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -742,7 +742,7 @@ void music_jingle_volume_set(u8 arg0) {
|
||||
void music_jingle_pan_set(ALPan pan) {
|
||||
u32 iChan;
|
||||
for (iChan = 0; iChan < AUDIO_CHANNELS; iChan++) {
|
||||
alCSPSetChlPan((ALCSPlayer *) gJinglePlayer, iChan, pan);
|
||||
alCSPSetChlPan(gJinglePlayer, iChan, pan);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,13 +944,13 @@ u8 gSoundBank_GetSoundDecayTime(u16 soundID) {
|
||||
/**
|
||||
* Allocate space, then initialise a sequence player for audio playback.
|
||||
*/
|
||||
ALSeqPlayer *sound_seqplayer_init(s32 maxVoices, s32 maxEvents) {
|
||||
ALCSPlayer *sound_seqplayer_init(s32 maxVoices, s32 maxEvents) {
|
||||
ALCSPlayer *cseqp;
|
||||
ALSeqpConfig config;
|
||||
|
||||
config.maxVoices = maxVoices;
|
||||
config.maxEvents = maxEvents;
|
||||
config.unknown_0x10 = maxVoices; // this member doesn't exist in other versions of ALSeqpConfig
|
||||
config.voiceLimit = maxVoices; // this member doesn't exist in other versions of ALSeqpConfig
|
||||
config.maxChannels = AUDIO_CHANNELS;
|
||||
config.heap = &gALHeap;
|
||||
config.initOsc = NULL;
|
||||
@@ -962,13 +962,13 @@ ALSeqPlayer *sound_seqplayer_init(s32 maxVoices, s32 maxEvents) {
|
||||
alCSPSetBank(cseqp, gSequenceBank->bankArray[0]);
|
||||
cseqp->unk36 = 127;
|
||||
|
||||
return (ALSeqPlayer *) cseqp;
|
||||
return cseqp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop the current sequence then set the parameters for the next sequence.
|
||||
*/
|
||||
void music_sequence_start(u8 seqID, ALSeqPlayer *seqPlayer) {
|
||||
void music_sequence_start(u8 seqID, ALCSPlayer *seqPlayer) {
|
||||
music_sequence_stop(seqPlayer);
|
||||
if (seqID < gSequenceTable->seqCount) {
|
||||
if (seqPlayer == gMusicPlayer) {
|
||||
@@ -984,16 +984,16 @@ void music_sequence_start(u8 seqID, ALSeqPlayer *seqPlayer) {
|
||||
/**
|
||||
* If the sequence player is currently inactive, start a new sequence with the current properties.
|
||||
*/
|
||||
void music_sequence_init(ALSeqPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq) {
|
||||
void music_sequence_init(ALCSPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq) {
|
||||
s32 i;
|
||||
|
||||
if ((alCSPGetState((ALCSPlayer *) seqp) == AL_STOPPED) && (*seqID != 0)) {
|
||||
if ((alCSPGetState(seqp) == AL_STOPPED) && (*seqID != 0)) {
|
||||
load_asset_to_address(ASSET_AUDIO, (u32) sequence,
|
||||
gSequenceTable->seqArray[*seqID].offset - get_rom_offset_of_asset(ASSET_AUDIO, 0),
|
||||
(s32) gSeqLengthTable[*seqID]);
|
||||
alCSeqNew(seq, sequence);
|
||||
alCSPSetSeq((ALCSPlayer *) seqp, seq);
|
||||
alCSPPlay((ALCSPlayer *) seqp);
|
||||
alCSPSetSeq(seqp, seq);
|
||||
alCSPPlay(seqp);
|
||||
if (seqp == gMusicPlayer) {
|
||||
music_volume_set(gSeqSoundTable[*seqID].volume);
|
||||
if (gSeqSoundTable[*seqID].tempo != 0) {
|
||||
@@ -1026,14 +1026,14 @@ void music_sequence_init(ALSeqPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *s
|
||||
/**
|
||||
* Stops the current playing sequence for the given sequence player.
|
||||
*/
|
||||
void music_sequence_stop(ALSeqPlayer *seqPlayer) {
|
||||
void music_sequence_stop(ALCSPlayer *seqPlayer) {
|
||||
if (gMusicPlayer == seqPlayer && gMusicPlaying) {
|
||||
alCSPStop((ALCSPlayer *) seqPlayer);
|
||||
alCSPStop(seqPlayer);
|
||||
gMusicPlaying = FALSE;
|
||||
gCurrentSequenceID = SEQUENCE_NONE;
|
||||
gMusicNextSeqID = SEQUENCE_NONE;
|
||||
} else if (gJinglePlayer == seqPlayer && gJinglePlaying) {
|
||||
alCSPStop((ALCSPlayer *) seqPlayer);
|
||||
alCSPStop(seqPlayer);
|
||||
gJinglePlaying = FALSE;
|
||||
gJingleNextSeqID = SEQUENCE_NONE;
|
||||
}
|
||||
|
||||
+7
-7
@@ -45,12 +45,12 @@ typedef struct DelayedSound {
|
||||
|
||||
void alCSPNew(ALCSPlayer *seqp, ALSeqpConfig *config); //lib/src/al/csplayer.c
|
||||
void alCSPSetBank(ALCSPlayer *seqp, ALBank *b); //lib/src/unknown_0C8660.c
|
||||
void set_voice_limit(ALSeqPlayer *seqp, u8 voiceLimit); //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
|
||||
void alCSPSetChlPan(ALCSPlayer *seqp, u8 channel, ALPan pan); //lib/src/unknown_0C84E0.c
|
||||
void alCSPSetChlVol(ALCSPlayer *, u8 channel, u8 volume); //lib/src/unknown_0C84E0.c
|
||||
u8 alCSPGetChlVol(ALCSPlayer *seqp, u8 channel); //lib/src/al
|
||||
void alCSPSetFadeIn(ALSeqPlayer *seqp, u8 channel, ALPan pan); //lib/src/unknown_0647A0.c
|
||||
void alCSPSetFadeIn(ALCSPlayer *seqp, u8 channel, ALPan pan); //lib/src/unknown_0647A0.c
|
||||
u8 alCSPGetFadeIn(ALCSPlayer *seqp, u8 channel); //lib/src/mips1/al/unknown_064800.c
|
||||
u8 alSeqpGetChlFXMix(ALSeqPlayer *seqp, u8 channel); //lib/src/al/alSeqpGetChlFXMix.c
|
||||
void alFxReverbSet(u8 arg0); //lib/src/mips1/al/reverb.c
|
||||
@@ -112,14 +112,14 @@ u16 sound_count(void);
|
||||
u8 music_sequence_count(void);
|
||||
void sound_table_properties(SoundData **table, s32 *size, s32 *count);
|
||||
u8 gSoundBank_GetSoundDecayTime(u16 soundID);
|
||||
ALSeqPlayer *sound_seqplayer_init(s32 maxVoices, s32 maxEvents);
|
||||
void music_sequence_start(u8 seqID, ALSeqPlayer *seqPlayer);
|
||||
void music_sequence_stop(ALSeqPlayer *seqPlayer);
|
||||
ALCSPlayer *sound_seqplayer_init(s32 maxVoices, s32 maxEvents);
|
||||
void music_sequence_start(u8 seqID, ALCSPlayer *seqPlayer);
|
||||
void music_sequence_stop(ALCSPlayer *seqPlayer);
|
||||
void sound_reverb_set(u8 setting);
|
||||
void alSeqFileNew(ALSeqFile *file, u8 *base);
|
||||
void func_80063A90(ALSeqPlayer *seqp, u8 channel);
|
||||
void func_80063A90(ALCSPlayer *seqp, u8 channel);
|
||||
void sound_volume_set_relative(u16 soundID, void *soundState, u8 volume);
|
||||
void music_sequence_init(ALSeqPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq);
|
||||
void music_sequence_init(ALCSPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq);
|
||||
void sound_play(u16 soundID, s32* soundMask);
|
||||
f32 music_animation_fraction(void);
|
||||
void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z);
|
||||
|
||||
+60
-45
@@ -604,30 +604,27 @@ UNUSED void copy_framebuffer_size_to_coords(s32 *x1, s32 *y1, s32 *x2, s32 *y2)
|
||||
*y2 = GET_VIDEO_HEIGHT(widthAndHeight);
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
// viewport_main
|
||||
// Alternative attempt: https://decomp.me/scratch/rcJYo
|
||||
// Still a work-in-progress but it doesn't seem to cause any problems,
|
||||
// which is why it is labeled under NON_EQUIVALENT
|
||||
#ifdef NON_MATCHING
|
||||
|
||||
#define SCISSOR_INTERLACE G_SC_NON_INTERLACE
|
||||
|
||||
// viewport_main
|
||||
void func_80066CDC(Gfx **dlist, MatrixS **mats) {
|
||||
u32 sp58_y;
|
||||
u32 sp54_x;
|
||||
u32 sp50_altPosY;
|
||||
u32 sp4C_altPosX;
|
||||
u32 posX;
|
||||
u32 posY;
|
||||
u32 x;
|
||||
u32 y;
|
||||
u32 x;
|
||||
u32 pad0;
|
||||
u32 sp58_height;
|
||||
u32 sp54_width;
|
||||
u32 posY;
|
||||
u32 posX; // sp4C
|
||||
u32 pad1;
|
||||
u32 videoHeight;
|
||||
u32 videoWidth;
|
||||
u32 widthAndHeight;
|
||||
s32 savedCameraID;
|
||||
s32 originalCameraID;
|
||||
s32 tempCameraID;
|
||||
s32 viewports;
|
||||
s32 originalCameraID; // sp34
|
||||
s32 savedCameraID; // sp30
|
||||
s32 tempCameraID; // sp2C
|
||||
|
||||
originalCameraID = gActiveCameraID;
|
||||
savedCameraID = gActiveCameraID;
|
||||
@@ -647,77 +644,95 @@ void func_80066CDC(Gfx **dlist, MatrixS **mats) {
|
||||
gScreenViewports[gActiveCameraID].scissorY2);
|
||||
viewport_rsp_set(dlist, 0, 0, 0, 0);
|
||||
gActiveCameraID = tempCameraID;
|
||||
if (mats != 0) {
|
||||
if (mats != NULL) {
|
||||
func_80067D3C(dlist, mats);
|
||||
}
|
||||
gActiveCameraID = originalCameraID;
|
||||
return;
|
||||
}
|
||||
|
||||
viewports = gNumberOfViewports;
|
||||
if (viewports == VIEWPORTS_COUNT_3_PLAYERS) {
|
||||
viewports = VIEWPORTS_COUNT_4_PLAYERS;
|
||||
// Fake match
|
||||
if ((x && x) && x) {}
|
||||
}
|
||||
y = videoHeight >> 1;
|
||||
y = (videoHeight >> 1) & 0xFFFFFFFFFFFFFFFF;
|
||||
x = videoWidth >> 1;
|
||||
sp54_x = x;
|
||||
sp58_y = y;
|
||||
sp54_width = x;
|
||||
sp58_height = y;
|
||||
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
sp58_y = 145;
|
||||
sp58_height = 145;
|
||||
}
|
||||
|
||||
switch (viewports) {
|
||||
switch (viewports ^ 0) {
|
||||
case VIEWPORTS_COUNT_1_PLAYER:
|
||||
posY = sp58_y;
|
||||
posY = sp58_height;
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
posY -= 18;
|
||||
// Fake match
|
||||
if (!gScreenViewports[gActiveCameraID].scissorX2) {}
|
||||
}
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, 0, videoWidth, videoHeight);
|
||||
posX = x;
|
||||
break;
|
||||
case VIEWPORTS_COUNT_2_PLAYERS:
|
||||
// 2 players = split screen horizontally
|
||||
// first player has top half
|
||||
if (gActiveCameraID == 0) {
|
||||
posY = videoHeight >> 2;
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
posY -= 12;
|
||||
}
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, 0, videoWidth, (y - (videoHeight >> 7)));
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, 0, videoWidth, y - (videoHeight >> 7));
|
||||
} else {
|
||||
posY = y;
|
||||
// second player has bottom half
|
||||
posY = sp58_height;
|
||||
posY += videoHeight >> 2;
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, (y + (videoHeight >> 7)), videoWidth,
|
||||
(videoHeight - (videoHeight >> 7)));
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, y + (videoHeight >> 7), videoWidth,
|
||||
videoHeight - (videoHeight >> 7));
|
||||
}
|
||||
posX = x;
|
||||
break;
|
||||
// this is probably never reached because of an if above that sets the viewport to 4 players if its currently 3
|
||||
// players
|
||||
case VIEWPORTS_COUNT_3_PLAYERS:
|
||||
posY = sp58_height;
|
||||
// 3 player splits screen in 4 parts, first player = top left, second = top right, third = bottom left and
|
||||
// bottom right has map of race track
|
||||
if (gActiveCameraID == 0) {
|
||||
posY = sp58_y;
|
||||
posX = videoWidth >> 2;
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, 0, 0, x - (videoWidth >> 8), videoHeight);
|
||||
} else {
|
||||
posY = sp58_y;
|
||||
// posX = x;
|
||||
posX = x + (videoWidth >> 2);
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, x + (videoWidth >> 8), 0, videoWidth - (videoWidth >> 8),
|
||||
videoHeight);
|
||||
}
|
||||
break;
|
||||
case VIEWPORTS_COUNT_4_PLAYERS:
|
||||
sp58_y >>= 1;
|
||||
sp54_x = x >> 1;
|
||||
posY = 0;
|
||||
sp58_height >>= 1;
|
||||
sp54_width >>= 1;
|
||||
posX = 0;
|
||||
posY = 0;
|
||||
switch (gActiveCameraID) {
|
||||
case 0:
|
||||
// Using posX and posY here is not smart since IDO can't optimize out the zero now.
|
||||
// Why here of all places did they do this instead of just setting zero like everywhere else?
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, posX, posY, (x - (videoWidth >> 8)),
|
||||
(y - (videoHeight >> 7)));
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, posX, posY, x - (videoWidth >> 8),
|
||||
y - (videoHeight >> 7));
|
||||
break;
|
||||
case 1:
|
||||
posX = x;
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, (sp54_x + (videoWidth >> 8)), 0,
|
||||
((sp54_x + sp54_x) - (videoWidth >> 8)), (y - (videoHeight >> 7)));
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, x + (videoWidth >> 8), 0, (x + x) - (videoWidth >> 8),
|
||||
y - (videoHeight >> 7));
|
||||
|
||||
// Fake
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
|
||||
break;
|
||||
case 2:
|
||||
posY = y;
|
||||
@@ -725,16 +740,17 @@ void func_80066CDC(Gfx **dlist, MatrixS **mats) {
|
||||
(y + y) - (videoHeight >> 7));
|
||||
break;
|
||||
case 3:
|
||||
posY = y;
|
||||
posX = x;
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, (sp54_x + (videoWidth >> 8)), y + (videoHeight >> 7),
|
||||
posY = y;
|
||||
gDPSetScissor((*dlist)++, SCISSOR_INTERLACE, x + (videoWidth >> 8), y + (videoHeight >> 7),
|
||||
(x + x) - (videoWidth >> 8), (y + y) - (videoHeight >> 7));
|
||||
break;
|
||||
}
|
||||
posY += sp58_y;
|
||||
posX += sp54_x;
|
||||
// This should probably assign to a temp variable first?
|
||||
posY += sp58_height;
|
||||
posX += sp54_width;
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
if (gActiveCameraID <= VIEWPORTS_COUNT_2_PLAYERS) {
|
||||
if (gActiveCameraID <= 3) {
|
||||
posY -= 20;
|
||||
} else {
|
||||
posY -= 6;
|
||||
@@ -742,16 +758,15 @@ void func_80066CDC(Gfx **dlist, MatrixS **mats) {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
//@bug These values are unset!
|
||||
posY = sp50_altPosY;
|
||||
posX = sp4C_altPosX;
|
||||
posY = sp58_height;
|
||||
posX = x;
|
||||
break;
|
||||
}
|
||||
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
posX -= 4;
|
||||
}
|
||||
viewport_rsp_set(dlist, sp54_x, sp58_y, posX, posY);
|
||||
viewport_rsp_set(dlist, sp54_width, sp58_height, posX, posY);
|
||||
if (mats != NULL) {
|
||||
func_80067D3C(dlist, mats);
|
||||
}
|
||||
|
||||
+4
-5
@@ -426,9 +426,8 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *obj, s3
|
||||
gHudIndicatorTimer = 0;
|
||||
}
|
||||
}
|
||||
} else if (input_pressed(D_80126D10) & D_CBUTTONS &&
|
||||
racer->raceFinished == FALSE && !(gHudLevelHeader->race_type & RACETYPE_CHALLENGE) &&
|
||||
gHudRaceStart) {
|
||||
} else if (input_pressed(D_80126D10) & D_CBUTTONS && racer->raceFinished == FALSE &&
|
||||
!(gHudLevelHeader->race_type & RACETYPE_CHALLENGE) && gHudRaceStart) {
|
||||
if (D_800E2794[gHUDNumPlayers][racer->playerIndex] < PLAYER_FOUR) {
|
||||
D_800E2794[gHUDNumPlayers][racer->playerIndex]++;
|
||||
} else {
|
||||
@@ -436,8 +435,8 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *obj, s3
|
||||
}
|
||||
sound_play((SOUND_TING_HIGHEST - (D_800E2794[gHUDNumPlayers][racer->playerIndex] == 0)), NULL);
|
||||
}
|
||||
if (input_pressed(D_80126D10) & R_CBUTTONS && racer->raceFinished == FALSE &&
|
||||
gHudRaceStart && gMinimapOpacity == 0) {
|
||||
if (input_pressed(D_80126D10) & R_CBUTTONS && racer->raceFinished == FALSE && gHudRaceStart &&
|
||||
gMinimapOpacity == 0) {
|
||||
gHudToggleSettings[gHUDNumPlayers] = 1 - gHudToggleSettings[gHUDNumPlayers];
|
||||
if (gHudToggleSettings[gHUDNumPlayers] == 0) {
|
||||
sound_play(SOUND_TING_LOW, NULL);
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ OSThread gThread3; // OSThread for thread 3
|
||||
void mainproc(void) {
|
||||
osInitialize();
|
||||
#ifdef AVOID_UB
|
||||
bzero(&gMainMemoryPool, RAM_END - (s32)(&gMainMemoryPool));
|
||||
bzero(&gMainMemoryPool, RAM_END - (s32) (&gMainMemoryPool));
|
||||
#endif
|
||||
osCreateThread(&gThread1, 1, &thread1_main, 0, &gThread1Stack[STACKSIZE(STACK_IDLE)], OS_PRIORITY_IDLE);
|
||||
osStartThread(&gThread1);
|
||||
|
||||
+1
-1
@@ -401,7 +401,7 @@ s32 mempool_locked_set(u8 *address) {
|
||||
/**
|
||||
* Search the memory pool for the current address.
|
||||
* Check if the slot is marked with 0x02.
|
||||
* Unset that flag and return 1 if so, otherise 0.
|
||||
* Unset that flag and return 1 if so, otherwise 0.
|
||||
*/
|
||||
s32 mempool_locked_unset(u8 *address) {
|
||||
s32 slotIndex;
|
||||
|
||||
+14
-16
@@ -783,8 +783,7 @@ char **gContPakStrings[11] = { NULL,
|
||||
gContPakCorruptDataStrings,
|
||||
gContPakNeed2ndAdvStrings };
|
||||
|
||||
s32 unused_800DFC08 = 0;
|
||||
s32 unused_800DFC0C = 0xFFFF;
|
||||
UNUSED DrawTexture unused_800DFC08[] = { { NULL, 0, -1 } };
|
||||
|
||||
/*** Icons in the save options menu. ***/
|
||||
DrawTexture gDrawTexN64Icon[2] = { { NULL, 0, 0 }, { NULL, 0, 0 } };
|
||||
@@ -794,13 +793,13 @@ DrawTexture gDrawTexFileIcon[2] = { { NULL, 0, 0 }, { NULL, 0, 0 } };
|
||||
DrawTexture gDrawTexContPakIcon[2] = { { NULL, 0, 0 }, { NULL, 0, 0 } };
|
||||
DrawTexture gDrawTexTrashIcon[2] = { { NULL, 0, 0 }, { NULL, 0, 0 } };
|
||||
|
||||
u8 unused_800DFC70[8] = { 0x40, 0x40, 0x04, 0x04, 0xFF, 0, 0, 0 };
|
||||
UNUSED s8 unused_800DFC70[] = { 0x40, 0x40, 0x04, 0x04, -1 };
|
||||
|
||||
s16 gSaveMenuObjectIndices[26] = { 0x0024, 0x0025, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x003D,
|
||||
0x003F, 0x003E, 0x003C, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
|
||||
0x0049, 0x004A, 0x004B, 0x0040, 0x0041, 0x0002, 0xFFFF, 0x0000 };
|
||||
s16 gSaveMenuObjectIndices[] = { 0x0024, 0x0025, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x003D,
|
||||
0x003F, 0x003E, 0x003C, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
|
||||
0x0049, 0x004A, 0x004B, 0x0040, 0x0041, 0x0002, -1 };
|
||||
|
||||
s16 gSaveMenuImageIndices[4] = { 0x000B, 0x000C, 0x0002, 0xFFFF };
|
||||
s16 gSaveMenuImageIndices[] = { 0x000B, 0x000C, 0x0002, -1 };
|
||||
|
||||
MenuElement gControllerPakMenuElement[7] = {
|
||||
{ 161, 32, 161, 33, 161, 32, 0, 0, 0, 255, 128, ASSET_FONTS_BIGFONT, 12, 0, { NULL }, { { 0, 0, 0, 0 } } },
|
||||
@@ -2093,14 +2092,14 @@ void load_menu_text(s32 language) {
|
||||
|
||||
for (langIndex = 0; sCorruptDataMenuText[langIndex] != NULL; langIndex++) {}
|
||||
|
||||
sCorruptDataMenuText[langIndex] = menuText[ASSET_MENU_TEXT_CORRUPTDATA_1]; // "TRY AGAIN!"
|
||||
sInsertControllerPakMenuText[0] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_3]; // "If you wish to use"
|
||||
sInsertControllerPakMenuText[1] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_4]; // "the Controller Pak"
|
||||
sCorruptDataMenuText[langIndex] = menuText[ASSET_MENU_TEXT_CORRUPTDATA_1]; // "TRY AGAIN!"
|
||||
sInsertControllerPakMenuText[0] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_3]; // "If you wish to use"
|
||||
sInsertControllerPakMenuText[1] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_4]; // "the Controller Pak"
|
||||
#if VERSION == VERSION_77
|
||||
sInsertControllerPakMenuText[2] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_6]; // "insert it now!"
|
||||
sInsertRumblePakMenuText[0] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_3]; // "If you wish to use"
|
||||
sInsertRumblePakMenuText[1] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_5]; // "the Rumble Pak"
|
||||
sInsertRumblePakMenuText[2] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_6]; // "insert it now!"
|
||||
sInsertControllerPakMenuText[2] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_6]; // "insert it now!"
|
||||
sInsertRumblePakMenuText[0] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_3]; // "If you wish to use"
|
||||
sInsertRumblePakMenuText[1] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_5]; // "the Rumble Pak"
|
||||
sInsertRumblePakMenuText[2] = menuText[ASSET_MENU_TEXT_INSERTDEVICE_6]; // "insert it now!"
|
||||
#else
|
||||
// TODO: Figure out what these text values are for these versions.
|
||||
sInsertControllerPakMenuText[2] = menuText[161];
|
||||
@@ -7235,8 +7234,7 @@ void menu_caution_init(void) {
|
||||
s32 menu_caution_loop(s32 updateRate) {
|
||||
if (gMenuDelay) {
|
||||
gMenuDelay += updateRate;
|
||||
} else if (gIgnorePlayerInputTime <= 0 &&
|
||||
(input_pressed(PLAYER_ONE) & (A_BUTTON | B_BUTTON | START_BUTTON))) {
|
||||
} else if (gIgnorePlayerInputTime <= 0 && (input_pressed(PLAYER_ONE) & (A_BUTTON | B_BUTTON | START_BUTTON))) {
|
||||
sound_play(SOUND_SELECT2, NULL);
|
||||
gMenuDelay = 1;
|
||||
transition_begin(&sMenuTransitionFadeIn);
|
||||
|
||||
@@ -6144,7 +6144,6 @@ void obj_init_midifade(Object *obj, LevelObjectEntry_MidiFade *entry) {
|
||||
f32 tempF2;
|
||||
s32 i;
|
||||
|
||||
|
||||
obj->segment.trans.rotation.y_rotation = entry->angleY << 8 << 2; // Two shifts needed to skip a register.
|
||||
obj64 = obj->unk64;
|
||||
scaleF = (f32) (((s32) entry->scale) & 0xFFFF);
|
||||
|
||||
@@ -457,7 +457,7 @@ TextureHeader *load_texture(s32 arg0) {
|
||||
numberOfTextures = (gTempTextureHeader->header.numOfTextures >> 8) & 0xFFFF;
|
||||
|
||||
if (!gTempTextureHeader->header.isCompressed) {
|
||||
tex = (TextureHeader * )mempool_alloc((numberOfTextures * 0x60) + assetSize, gTexColourTag);
|
||||
tex = (TextureHeader *) mempool_alloc((numberOfTextures * 0x60) + assetSize, gTexColourTag);
|
||||
if (tex == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+8
-12
@@ -68,7 +68,7 @@ UNUSED char gBuildString[] = "Version 7.9 14/10/97 19.40 L.Schuneman";
|
||||
UNUSED char gBuildString[] = "Version 7.7 29/09/97 15.00 L.Schuneman";
|
||||
#endif
|
||||
|
||||
s8 sAntiPiracyTriggered = 0;
|
||||
s8 sAntiPiracyTriggered = FALSE;
|
||||
UNUSED s32 D_800DD378 = 1;
|
||||
s32 gSaveDataFlags = 0; // Official Name: load_save_flags
|
||||
s32 gScreenStatus = OSMESG_SWAP_BUFFER;
|
||||
@@ -80,13 +80,11 @@ s16 gLevelLoadTimer = 0;
|
||||
s8 gPauseLockTimer = 0; // If this is above zero, the player cannot pause the game.
|
||||
s8 gFutureFunLandLevelTarget = FALSE;
|
||||
s8 gDmemInvalid = FALSE;
|
||||
UNUSED s32 D_800DD3A4 = 0;
|
||||
UNUSED s32 D_800DD3A8 = 0;
|
||||
UNUSED s32 D_800DD3AC = 0;
|
||||
s32 gNumF3dCmdsPerPlayer[4] = { 4500, 7000, 11000, 11000 };
|
||||
s32 gNumHudVertsPerPlayer[4] = { 300, 600, 850, 900 };
|
||||
s32 gNumHudMatPerPlayer[4] = { 300, 400, 550, 600 };
|
||||
s32 gNumHudTrisPerPlayer[4] = { 20, 30, 40, 50 };
|
||||
UNUSED s32 D_800DD3A4[] = { 0, 0, 0 };
|
||||
s32 gNumF3dCmdsPerPlayer[MAXCONTROLLERS] = { 4500, 7000, 11000, 11000 };
|
||||
s32 gNumHudVertsPerPlayer[MAXCONTROLLERS] = { 300, 600, 850, 900 };
|
||||
s32 gNumHudMatPerPlayer[MAXCONTROLLERS] = { 300, 400, 550, 600 };
|
||||
s32 gNumHudTrisPerPlayer[MAXCONTROLLERS] = { 20, 30, 40, 50 };
|
||||
s8 gDrawFrameTimer = 0;
|
||||
FadeTransition D_800DD3F4 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_OUT, FADE_COLOR_BLACK, 20, 0);
|
||||
UNUSED FadeTransition D_800DD3FC = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_WHITE, 20, -1);
|
||||
@@ -1439,14 +1437,12 @@ void default_alloc_displaylist_heap(void) {
|
||||
gDisplayLists[0] = (Gfx *) mempool_alloc_safe(totalSize, COLOUR_TAG_RED);
|
||||
gMatrixHeap[0] = (MatrixS *) ((u8 *) gDisplayLists[0] + (gNumF3dCmdsPerPlayer[numberOfPlayers] * sizeof(Gwords)));
|
||||
gVertexHeap[0] = (Vertex *) ((u8 *) gMatrixHeap[0] + (gNumHudMatPerPlayer[numberOfPlayers] * sizeof(Matrix)));
|
||||
gTriangleHeap[0] =
|
||||
(Triangle *) ((u8 *) gVertexHeap[0] + (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex)));
|
||||
gTriangleHeap[0] = (Triangle *) ((u8 *) gVertexHeap[0] + (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex)));
|
||||
|
||||
gDisplayLists[1] = (Gfx *) mempool_alloc_safe(totalSize, COLOUR_TAG_YELLOW);
|
||||
gMatrixHeap[1] = (MatrixS *) ((u8 *) gDisplayLists[1] + (gNumF3dCmdsPerPlayer[numberOfPlayers] * sizeof(Gwords)));
|
||||
gVertexHeap[1] = (Vertex *) ((u8 *) gMatrixHeap[1] + (gNumHudMatPerPlayer[numberOfPlayers] * sizeof(Matrix)));
|
||||
gTriangleHeap[1] =
|
||||
(Triangle *) ((u8 *) gVertexHeap[1] + (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex)));
|
||||
gTriangleHeap[1] = (Triangle *) ((u8 *) gVertexHeap[1] + (gNumHudVertsPerPlayer[numberOfPlayers] * sizeof(Vertex)));
|
||||
|
||||
gCurrNumF3dCmdsPerPlayer = gNumF3dCmdsPerPlayer[numberOfPlayers];
|
||||
gCurrNumHudMatPerPlayer = gNumHudMatPerPlayer[numberOfPlayers];
|
||||
|
||||
+3
-3
@@ -19,7 +19,7 @@ VideoModeResolution gVideoModeResolutions[] = {
|
||||
};
|
||||
|
||||
// This value exists in order to make sure there are no out of bounds accesses of gVideoModeResolutions
|
||||
#define NUM_RESOLUTION_MODES ((sizeof(gVideoModeResolutions) / sizeof(VideoModeResolution)) - 1)
|
||||
#define NUM_RESOLUTION_MODES ((s32) (sizeof(gVideoModeResolutions) / sizeof(VideoModeResolution)) - 1)
|
||||
|
||||
/*******************************/
|
||||
|
||||
@@ -71,7 +71,7 @@ void video_init(s32 videoModeIndex, OSSched *sc) {
|
||||
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i <= NUM_RESOLUTION_MODES; i++) {
|
||||
gVideoModeResolutions[i].height += PAL_HEIGHT_DIFFERENCE;
|
||||
}
|
||||
}
|
||||
@@ -148,7 +148,7 @@ void fb_init_vi(void) {
|
||||
osViSetMode(&osViModeTable[viModeTableIndex]);
|
||||
break;
|
||||
case VIDEO_MODE_LOWRES_LPN:
|
||||
//@bug: The video mode being set here is Point sampled
|
||||
//!@bug: The video mode being set here is Point sampled
|
||||
// but the printf implies it was intended to be Anti-aliased.
|
||||
// By my understanding, this is the case we will always hit in code,
|
||||
// So maybe it was swapped out late in development?
|
||||
|
||||
@@ -344,7 +344,8 @@ segments:
|
||||
- [0xE9620, .rodata, ../libultra/src/audio/mips1/synthesizer]
|
||||
- [0xE9630, .rodata, main]
|
||||
- [0xE9660, .rodata, camera]
|
||||
- [0xE9870, .rodata, thread3_main]
|
||||
- [0xE9870, .rodata, game]
|
||||
- [0xE98D0, .rodata, thread3_main]
|
||||
- [0xE9970, .rodata, memory]
|
||||
- [0xE9D90, .rodata, save_data]
|
||||
- [0xE9F60, .rodata, ../libultra/src/sc/sched]
|
||||
|
||||
@@ -344,7 +344,8 @@ segments:
|
||||
- [0xE7B50, .rodata, ../libultra/src/audio/mips1/synthesizer]
|
||||
- [0xE7B60, .rodata, main]
|
||||
- [0xE7B90, .rodata, camera]
|
||||
- [0xE7D40, .rodata, thread3_main]
|
||||
- [0xE7D40, .rodata, game]
|
||||
- [0xE7DA0, .rodata, thread3_main]
|
||||
- [0xE7EA0, .rodata, memory]
|
||||
- [0xE8220, .rodata, save_data]
|
||||
- [0xE8490, .rodata, ../libultra/src/sc/sched]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user