Refresh 2

This commit is contained in:
n64
2019-10-05 15:08:05 -04:00
parent 1ef98ec785
commit 52e605f075
316 changed files with 16346 additions and 16367 deletions

View File

@@ -112,17 +112,17 @@ u8 sDialogSpeaker[170] = {
#undef _
s32 sDialogSpeakerVoice[15] = {
SOUND_UKIKI_CHATTER_LONG,
SOUND_BIG_PENGUIN_YELL,
SOUND_OBJECT_BOWSERINTROLAUGH,
SOUND_OBJECT_KOOPA,
SOUND_OBJECT_KINGBOBOMB,
SOUND_BOO_LAUGH_LONG,
SOUND_OBJECT_BOBOMBBUDDY,
SOUND_OBJECT_BOWSERLAUGH,
SOUND_BOSS_DIALOG_GRUNT,
SOUND_WIGGLER_DIALOG,
SOUND_GENERAL_YOSHI,
SOUND_OBJ_UKIKI_CHATTER_LONG,
SOUND_OBJ_BIG_PENGUIN_YELL,
SOUND_OBJ_BOWSER_INTRO_LAUGH,
SOUND_OBJ_KOOPA_TALK,
SOUND_OBJ_KING_BOBOMB_TALK,
SOUND_OBJ_BOO_LAUGH_LONG,
SOUND_OBJ_BOBOMB_BUDDY_TALK,
SOUND_OBJ_BOWSER_LAUGH,
SOUND_OBJ2_BOSS_DIALOG_GRUNT,
SOUND_OBJ_WIGGLER_TALK,
SOUND_GENERAL_YOSHI_TALK,
NO_SOUND,
NO_SOUND,
NO_SOUND,
@@ -545,7 +545,7 @@ void unused_8031E568(void) {
/**
* Fade out a sequence player
*/
static void sequence_player_fade_out(s32 player, FadeT fadeOutTime) {
static void sequence_player_fade_out_internal(s32 player, FadeT fadeOutTime) {
struct SequencePlayer *seqPlayer = &gSequencePlayers[player];
#ifndef VERSION_JP
if (fadeOutTime == 0) {
@@ -694,9 +694,9 @@ struct SPTask *create_next_audio_frame_task(void) {
task->type = M_AUDTASK;
task->flags = flags;
task->ucode_boot = rspF3DBootStart;
task->ucode_boot_size = (u32) rspF3DBootEnd - (u32) rspF3DBootStart;
task->ucode_boot_size = (u8 *) rspF3DBootEnd - (u8 *) rspF3DBootStart;
task->ucode = rspAspMainStart;
task->ucode_size = 0x800;
task->ucode_size = 0x800; // (this size is ignored)
task->ucode_data = rspAspMainDataStart;
task->ucode_data_size = (rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64);
task->dram_stack = NULL;
@@ -1169,7 +1169,7 @@ void update_game_sound(void) {
*gSoundBanks[bankIndex][index].x, *gSoundBanks[bankIndex][index].z);
if ((gSoundBanks[bankIndex][index].soundBits & SOUNDARGS_MASK_SOUNDID)
== (SOUND_UNKNOWN_UNK1417 & SOUNDARGS_MASK_SOUNDID)) {
== (SOUND_MOVING_FLYING & SOUNDARGS_MASK_SOUNDID)) {
ret = get_sound_freq_scale(bankIndex, index);
gSequencePlayers[2].channels[channelIndex]->freqScale =
((f32) D_80363808[bankIndex] / US_FLOAT(80.0)) + ret;
@@ -1261,7 +1261,7 @@ void update_game_sound(void) {
*gSoundBanks[bankIndex][index].x, *gSoundBanks[bankIndex][index].z);
if ((gSoundBanks[bankIndex][index].soundBits & SOUNDARGS_MASK_SOUNDID)
== (SOUND_UNKNOWN_UNK1417 & SOUNDARGS_MASK_SOUNDID)) {
== (SOUND_MOVING_FLYING & SOUNDARGS_MASK_SOUNDID)) {
ret = get_sound_freq_scale(bankIndex, index);
gSequencePlayers[2].channels[channelIndex]->freqScale =
((f32) D_80363808[bankIndex] / US_FLOAT(80.0)) + ret;
@@ -1349,11 +1349,11 @@ void play_sequence(u8 player, u8 seqId, u16 fadeTimer) {
}
}
void func_8031F7CC(u8 player, u16 fadeTimer) {
void sequence_player_fade_out(u8 player, u16 fadeTimer) {
if (player == 0) {
gPlayer0CurSeqId = SEQUENCE_NONE;
}
sequence_player_fade_out(player, fadeTimer);
sequence_player_fade_out_internal(player, fadeTimer);
}
void fade_volume_scale(u8 player, u8 targetScale, u16 fadeTimer) {
@@ -1404,7 +1404,6 @@ void process_level_music_dynamics(void) {
s16 dur2; // sp38
u32 conditionBits; // s0
u32 tempBits; // v1
s32 numConditions; // v1
u16 bit; // a1
u8 condIndex; // a0 (same as numConditions?)
u8 i; // s1
@@ -1439,63 +1438,62 @@ void process_level_music_dynamics(void) {
}
}
numConditions = condIndex;
for (j = 0; j < numConditions; j++) {
for (j = 0; j < condIndex; j++) {
// (having all 'temp' share a single variable affects regalloc)
UNUSED s16 temp;
switch (conditionTypes[j]) {
case MARIO_X_GE: {
s16 temp = gMarioStates[0].pos[0];
if (temp < conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_Y_GE: {
s16 temp = gMarioStates[0].pos[1];
if (temp < conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_Z_GE: {
s16 temp = gMarioStates[0].pos[2];
if (temp < conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_X_LT: {
s16 temp = gMarioStates[0].pos[0];
if (temp >= conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_Y_LT: {
s16 temp = gMarioStates[0].pos[1];
if (temp >= conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_Z_LT: {
s16 temp = gMarioStates[0].pos[2];
if (temp >= conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_IS_IN_AREA: {
s16 temp = gCurrAreaIndex;
if (temp != conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
case MARIO_IS_IN_ROOM: {
s16 temp = gMarioCurrentRoom;
if (temp != conditionValues[j])
j = numConditions + 1;
j = condIndex + 1;
break;
}
}
}
if (j == numConditions) {
if (j == condIndex) {
// The area matches. Break out of the loop.
tempBits = 0;
} else {
@@ -1565,7 +1563,7 @@ void func_8031FFB4(u8 player, u16 fadeTimer, u8 arg2) {
}
}
void func_80320040(u8 player, u16 fadeTimer) {
void sequence_player_unlower(u8 player, u16 fadeTimer) {
sCapVolumeTo40 = FALSE;
if (player == 0) {
if (gSequencePlayers[player].state != SEQUENCE_PLAYER_STATE_FADE_OUT) {
@@ -1799,17 +1797,17 @@ void func_80320A4C(u8 bankIndex, u8 arg1) {
D_80363808[bankIndex] = arg1;
}
void play_dialog_sound(u8 dialogId) {
void play_dialog_sound(u8 dialogID) {
u8 speaker;
if (dialogId >= 170) {
dialogId = 0;
if (dialogID >= 170) {
dialogID = 0;
}
speaker = sDialogSpeaker[dialogId];
speaker = sDialogSpeaker[dialogID];
if (speaker != 0xff) {
play_sound(sDialogSpeakerVoice[speaker], gDefaultSoundArgs);
if (speaker == 2) // SOUND_OBJECT_BOWSERINTROLAUGH
if (speaker == 2) // SOUND_OBJ_BOWSER_INTRO_LAUGH
{
play_sequence(1, SEQ_EVENT_KOOPA_MESSAGE, 0);
}
@@ -1817,7 +1815,7 @@ void play_dialog_sound(u8 dialogId) {
#ifndef VERSION_JP
// "You've stepped on the (Wing|Metal|Vanish) Cap Switch"
if (dialogId == 10 || dialogId == 11 || dialogId == 12) {
if (dialogID == 10 || dialogID == 11 || dialogID == 12) {
play_puzzle_jingle();
}
#endif
@@ -1904,7 +1902,7 @@ void stop_background_music(u16 seqId) {
if (sBackgroundMusicQueueSize != 0) {
play_sequence(0, sBackgroundMusicQueue[1].seqId, 0);
} else {
func_8031F7CC(0, 20);
sequence_player_fade_out(0, 20);
}
}
foundIndex = i;
@@ -1925,7 +1923,7 @@ void stop_background_music(u16 seqId) {
void fadeout_background_music(u16 seqId, u16 fadeOut) {
if (sBackgroundMusicQueueSize != 0 && sBackgroundMusicQueue[0].seqId == (u8)(seqId & 0xff)) {
func_8031F7CC(0, fadeOut);
sequence_player_fade_out(0, fadeOut);
}
}
@@ -1990,7 +1988,7 @@ void func_80321080(u16 fadeTimer) {
D_80332120 = 0;
D_80332124 = 0;
func_803200E4(fadeTimer);
func_8031F7CC(1, fadeTimer);
sequence_player_fade_out(1, fadeTimer);
}
}
@@ -2002,10 +2000,10 @@ void func_803210D4(u16 fadeOutTime) {
}
if (gSequencePlayers[0].enabled == TRUE) {
sequence_player_fade_out(0, fadeOutTime);
sequence_player_fade_out_internal(0, fadeOutTime);
}
if (gSequencePlayers[1].enabled == TRUE) {
sequence_player_fade_out(1, fadeOutTime);
sequence_player_fade_out_internal(1, fadeOutTime);
}
for (i = 0; i < SOUND_BANK_COUNT; i++) {

View File

@@ -20,10 +20,10 @@ extern u8 gAudioSPTaskYieldBuffer[]; // ucode yield data ptr; only used in JP
struct SPTask *create_next_audio_frame_task(void);
void play_sound(s32 soundBits, f32 *pos);
void audio_signal_game_loop_tick(void);
void func_8031F7CC(u8 player, u16 fadeTimer);
void sequence_player_fade_out(u8 player, u16 fadeTimer);
void fade_volume_scale(u8 player, u8 targetScale, u16 fadeTimer);
void func_8031FFB4(u8 player, u16 fadeTimer, u8 arg2);
void func_80320040(u8 player, u16 fadeTimer);
void sequence_player_unlower(u8 player, u16 fadeTimer);
void set_sound_disabled(u8 disabled);
void sound_init(void);
void func_803205E8(u32 soundBits, f32 *vec);
@@ -32,7 +32,7 @@ void func_80320890(void);
void sound_banks_disable(u8 player, u16 bankMask);
void sound_banks_enable(u8 player, u16 bankMask);
void func_80320A4C(u8 bankIndex, u8 arg1);
void play_dialog_sound(u8 dialogId);
void play_dialog_sound(u8 dialogID);
void play_music(u8 player, u16 seqArgs, s16 fadeTimer);
void stop_background_music(u16 seqId);
void fadeout_background_music(u16 arg0, u16 fadeOut);

View File

@@ -220,8 +220,8 @@ struct SequencePlayer
/*0x11C*/ OSIoMesg bankDmaIoMesg;
/*0x130*/ u8 *bankDmaCurrMemAddr;
/*0x134*/ struct AudioBank *loadingBank;
/*0x138*/ u32 bankDmaCurrDevAddr;
/*0x13C*/ s32 bankDmaRemaining;
/*0x138*/ uintptr_t bankDmaCurrDevAddr;
/*0x13C*/ ssize_t bankDmaRemaining;
}; // size = 0x140
struct AdsrSettings

View File

@@ -9,9 +9,9 @@
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
struct SharedDma {
/*0x0*/ u8 *buffer; // target, points to pre-allocated buffer
/*0x4*/ u32 source; // device address
/*0x8*/ u16 sizeUnused; // set to bufSize, never read
/*0x0*/ u8 *buffer; // target, points to pre-allocated buffer
/*0x4*/ uintptr_t source; // device address
/*0x8*/ u16 sizeUnused; // set to bufSize, never read
/*0xA*/ u16 bufSize;
/*0xC*/ u8 unused2; // set to 0, never read
/*0xD*/ u8 reuseIndex; // position in sSampleDmaReuseQueue1/2, if ttl == 0
@@ -69,8 +69,8 @@ extern u8 gBankSetsData[]; // bank_sets.s
/**
* Performs an immediate DMA copy
*/
void audio_dma_copy_immediate(u32 devAddr, void *vAddr, u32 nbytes) {
osInvalDCache(vAddr, (s32) nbytes);
void audio_dma_copy_immediate(uintptr_t devAddr, void *vAddr, size_t nbytes) {
osInvalDCache(vAddr, nbytes);
osPiStartDma(&gAudioDmaIoMesg, OS_MESG_PRI_HIGH, OS_READ, devAddr, vAddr, nbytes,
&gAudioDmaMesgQueue);
osRecvMesg(&gAudioDmaMesgQueue, NULL, OS_MESG_BLOCK);
@@ -79,8 +79,8 @@ void audio_dma_copy_immediate(u32 devAddr, void *vAddr, u32 nbytes) {
/**
* Performs an asynchronus (normal priority) DMA copy
*/
void audio_dma_copy_async(u32 devAddr, void *vAddr, u32 nbytes, OSMesgQueue *queue, OSIoMesg *mesg) {
osInvalDCache(vAddr, (s32) nbytes);
void audio_dma_copy_async(uintptr_t devAddr, void *vAddr, size_t nbytes, OSMesgQueue *queue, OSIoMesg *mesg) {
osInvalDCache(vAddr, nbytes);
osPiStartDma(mesg, OS_MESG_PRI_NORMAL, OS_READ, devAddr, vAddr, nbytes, queue);
}
@@ -88,9 +88,9 @@ void audio_dma_copy_async(u32 devAddr, void *vAddr, u32 nbytes, OSMesgQueue *que
* Performs a partial asynchronous (normal priority) DMA copy. This is limited
* to 0x1000 bytes transfer at once.
*/
void audio_dma_partial_copy_async(u32 *devAddr, u8 **vAddr, s32 *remaining, OSMesgQueue *queue,
void audio_dma_partial_copy_async(uintptr_t *devAddr, u8 **vAddr, ssize_t *remaining, OSMesgQueue *queue,
OSIoMesg *mesg) {
s32 transfer = (*remaining < 0x1000 ? *remaining : 0x1000);
ssize_t transfer = (*remaining < 0x1000 ? *remaining : 0x1000);
*remaining -= transfer;
osInvalDCache(*vAddr, transfer);
osPiStartDma(mesg, OS_MESG_PRI_NORMAL, OS_READ, *devAddr, *vAddr, transfer, queue);
@@ -129,7 +129,7 @@ void decrease_sample_dma_ttls() {
#ifdef NON_MATCHING
void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
s32 bufferPos; // v0
ssize_t bufferPos; // v0
struct SharedDma *dma; // sp58, v1, t0
u32 transfer; // v0
u32 dmaDevAddr; // s0
@@ -141,8 +141,8 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
if (arg2 != 0 || *arg3 >= sSampleDmaListSize1) {
for (i = sSampleDmaListSize1; i < gSampleDmaNumListItems; i++) {
dma = sSampleDmas + i;
bufferPos = (u32) devAddr - dma->source;
if (0 <= bufferPos && (u32) bufferPos <= dma->bufSize - size) {
bufferPos = (uintptr_t) devAddr - dma->source;
if (0 <= bufferPos && (size_t) bufferPos <= dma->bufSize - size) {
// We already have a DMA request for this memory range.
if (dma->ttl == 0 && sSampleDmaReuseQueueHead2 != sSampleDmaReuseQueueTail2) {
// Move the DMA out of the reuse queue, by swapping it with the
@@ -157,7 +157,7 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
}
dma->ttl = 60;
*arg3 = (u8) i;
bufferPos = (u32) devAddr - dma->source;
bufferPos = (uintptr_t) devAddr - dma->source;
return dma->buffer + bufferPos;
}
}
@@ -171,8 +171,8 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
}
} else {
dma = &sSampleDmas[*arg3];
bufferPos = (u32) devAddr - dma->source;
if (0 <= bufferPos && (u32) bufferPos <= dma->bufSize - size) {
bufferPos = (uintptr_t) devAddr - dma->source;
if (0 <= bufferPos && (size_t) bufferPos <= dma->bufSize - size) {
// We already have DMA for this memory range.
if (dma->ttl == 0) {
// Move the DMA out of the reuse queue, by swapping it with the
@@ -184,7 +184,7 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
dma->reuseIndex;
}
sSampleDmaReuseQueueTail1++;
bufferPos = (u32) devAddr - dma->source;
bufferPos = (uintptr_t) devAddr - dma->source;
}
dma->ttl = 2;
return dma->buffer + bufferPos;
@@ -200,7 +200,7 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
}
transfer = dma->bufSize;
dmaDevAddr = (u32) devAddr & ~0xF;
dmaDevAddr = (uintptr_t) devAddr & ~0xF;
dma->ttl = 2;
dma->source = dmaDevAddr;
dma->sizeUnused = transfer;
@@ -211,7 +211,7 @@ void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3) {
osPiStartDma(&gCurrAudioFrameDmaIoMesgBufs[gCurrAudioFrameDmaCount - 1], OS_MESG_PRI_NORMAL,
OS_READ, dmaDevAddr, dma->buffer, transfer, &gCurrAudioFrameDmaQueue);
*arg3 = dmaIndex;
return dma->buffer + (u32) devAddr - dmaDevAddr;
return dma->buffer + (uintptr_t) devAddr - dmaDevAddr;
}
#elif defined(VERSION_JP)
@@ -301,8 +301,8 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
struct Instrument *instrument;
struct Instrument **itInstrs;
u32 i;
u32 memBase = (u32) mem;
u32 offsetBase = (u32) offset;
uintptr_t memBase = (uintptr_t) mem;
uintptr_t offsetBase = (uintptr_t) offset;
#define INIT_SOUND(sound) \
{ \
@@ -315,16 +315,16 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
* Presumably sample and sample2 ought to have different types, \
* but that doesn't matter for codegen. */ \
volatile struct AudioBankSample *sample, *sample2; \
*itSample = (void *) (memBase + (u32)(*itSample)); \
*itSample = (void *) (memBase + (uintptr_t)(*itSample)); \
sample = *itSample; \
sample2 = *itSample; \
if (sample2->loaded == FALSE) { \
void *a = sample2->sampleAddr; \
void *b = sample->loop; \
void *c = sample->book; \
sample->sampleAddr = (void *) (offsetBase + (u32) a); \
sample->loop = (void *) (memBase + (u32) b); \
sample->book = (void *) (memBase + (u32) c); \
sample->sampleAddr = (void *) (offsetBase + (uintptr_t) a); \
sample->loop = (void *) (memBase + (uintptr_t) b); \
sample->book = (void *) (memBase + (uintptr_t) c); \
sample->loaded = TRUE; \
} \
} \
@@ -332,7 +332,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
if (mem->drums != NULL) {
if (numDrums != 0) {
mem->drums = (struct Drum **) (memBase + (u32) mem->drums);
mem->drums = (struct Drum **) (memBase + (uintptr_t) mem->drums);
if (numDrums != 0) {
for (i = 0; i < numDrums; i++) {
#if 0
@@ -342,7 +342,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
struct Drum **h = &mem->drums[i];
if (*h == 0) continue;
{
*h = (void *)(memBase + (u32)*h);
*h = (void *)(memBase + (uintptr_t)*h);
drum = *h;
drum2 = *h;
if (drum2->loaded == FALSE)
@@ -351,7 +351,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
INIT_SOUND(((struct Drum *)drum2)->sound);
d = drum2->envelope;
drum->loaded = TRUE;
drum->envelope = (void *) (memBase + (u32)d);
drum->envelope = (void *) (memBase + (uintptr_t)d);
}
}
#else
@@ -359,7 +359,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
// deduplicates it -- drum and drum2 end up in the same
// register.
struct Drum **drums = mem->drums;
u32 h = (u32) drums[i];
uintptr_t h = (uintptr_t) drums[i];
if (h != 0) {
volatile struct Drum *drum, *drum2;
drums[i] = (struct Drum *) (memBase + h);
@@ -370,7 +370,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
INIT_SOUND(((struct Drum *) drum)->sound);
d = drum->envelope;
drum2->loaded = TRUE;
drum2->envelope = (void *) (memBase + (u32) d);
drum2->envelope = (void *) (memBase + (uintptr_t) d);
}
}
#endif
@@ -383,7 +383,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
itInstrs = mem->instruments;
do {
if (*itInstrs) {
*itInstrs = (void *) (memBase + (u32) *itInstrs);
*itInstrs = (void *) (memBase + (uintptr_t) *itInstrs);
instrument = *itInstrs;
if (instrument->loaded == FALSE) {
@@ -392,7 +392,7 @@ void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 nu
INIT_SOUND(instrument->highNotesSound);
instrument->loaded = TRUE;
instrument->envelope = (void *) (memBase + (u32) instrument->envelope);
instrument->envelope = (void *) (memBase + (uintptr_t) instrument->envelope);
}
}
itInstrs++;
@@ -424,10 +424,10 @@ struct AudioBank *bank_load_immediate(s32 bankId, s32 arg1) {
return NULL;
}
audio_dma_copy_immediate((u32) ctlData, buf, 0x10);
audio_dma_copy_immediate((uintptr_t) ctlData, buf, 0x10);
numInstruments = buf[0];
numDrums = buf[1];
audio_dma_copy_immediate((u32)(ctlData + 0x10), ret, alloc);
audio_dma_copy_immediate((uintptr_t)(ctlData + 0x10), ret, alloc);
func_8031784C(ret, gAlTbl->seqArray[bankId].offset, numInstruments, numDrums);
gCtlEntries[bankId].numInstruments = (u8) numInstruments;
gCtlEntries[bankId].numDrums = (u8) numDrums;
@@ -442,7 +442,7 @@ struct AudioBank *bank_load_async(s32 bankId, s32 arg1, struct SequencePlayer *s
UNUSED u32 pad1[2];
u32 buf[4];
UNUSED u32 pad2;
s32 alloc;
size_t alloc;
struct AudioBank *ret;
u8 *ctlData;
OSMesgQueue *mesgQueue;
@@ -456,7 +456,7 @@ struct AudioBank *bank_load_async(s32 bankId, s32 arg1, struct SequencePlayer *s
return NULL;
}
audio_dma_copy_immediate((u32) ctlData, buf, 0x10);
audio_dma_copy_immediate((uintptr_t) ctlData, buf, 0x10);
numInstruments = buf[0];
numDrums = buf[1];
seqPlayer->loadingBankId = (u8) bankId;
@@ -464,7 +464,7 @@ struct AudioBank *bank_load_async(s32 bankId, s32 arg1, struct SequencePlayer *s
seqPlayer->loadingBankNumDrums = numDrums;
seqPlayer->bankDmaCurrMemAddr = (u8 *) ret;
seqPlayer->loadingBank = ret;
seqPlayer->bankDmaCurrDevAddr = (u32)(ctlData + 0x10);
seqPlayer->bankDmaCurrDevAddr = (uintptr_t)(ctlData + 0x10);
seqPlayer->bankDmaRemaining = alloc;
mesgQueue = &seqPlayer->bankDmaMesgQueue;
osCreateMesgQueue(mesgQueue, &seqPlayer->bankDmaMesg, 1);
@@ -489,7 +489,7 @@ void *sequence_dma_immediate(s32 seqId, s32 arg1) {
return NULL;
}
audio_dma_copy_immediate((u32) seqData, ptr, seqLength);
audio_dma_copy_immediate((uintptr_t) seqData, ptr, seqLength);
gSeqLoadStatus[seqId] = SOUND_LOAD_STATUS_COMPLETE;
return ptr;
}
@@ -510,15 +510,15 @@ void *sequence_dma_async(s32 seqId, s32 arg1, struct SequencePlayer *seqPlayer)
if (seqLength <= 0x40) {
// Immediately load short sequenece
audio_dma_copy_immediate((u32) seqData, ptr, seqLength);
audio_dma_copy_immediate((uintptr_t) seqData, ptr, seqLength);
gSeqLoadStatus[seqId] = SOUND_LOAD_STATUS_COMPLETE;
} else {
audio_dma_copy_immediate((u32) seqData, ptr, 0x40);
audio_dma_copy_immediate((uintptr_t) seqData, ptr, 0x40);
mesgQueue = &seqPlayer->seqDmaMesgQueue;
osCreateMesgQueue(mesgQueue, &seqPlayer->seqDmaMesg, 1);
seqPlayer->seqDmaMesg = NULL;
seqPlayer->seqDmaInProgress = TRUE;
audio_dma_copy_async((u32)(seqData + 0x40), (u8 *) ptr + 0x40, seqLength - 0x40, mesgQueue,
audio_dma_copy_async((uintptr_t)(seqData + 0x40), (u8 *) ptr + 0x40, seqLength - 0x40, mesgQueue,
&seqPlayer->seqDmaIoMesg);
gSeqLoadStatus[seqId] = SOUND_LOAD_STATUS_IN_PROGRESS;
}
@@ -702,7 +702,7 @@ void audio_init() {
}
i = 0;
lim3 = ((u32) &gAudioGlobalsEndMarker - (u32) &gAudioGlobalsStartMarker) / 8;
lim3 = ((uintptr_t) &gAudioGlobalsEndMarker - (uintptr_t) &gAudioGlobalsStartMarker) / 8;
ptr64 = &gAudioGlobalsStartMarker - 1;
for (k = lim3; k >= 0; k--) {
i++;
@@ -741,36 +741,36 @@ void audio_init() {
// Load header for sequence data (assets/music_data.sbk.s)
gSeqFileHeader = (ALSeqFile *) buf;
data = gMusicData;
audio_dma_copy_immediate((u32) data, gSeqFileHeader, 0x10);
audio_dma_copy_immediate((uintptr_t) data, gSeqFileHeader, 0x10);
gSequenceCount = gSeqFileHeader->seqCount;
size = ALIGN16(gSequenceCount * sizeof(ALSeqData) + 4);
gSeqFileHeader = soundAlloc(&gSoundPool, size);
audio_dma_copy_immediate((u32) data, gSeqFileHeader, size);
audio_dma_copy_immediate((uintptr_t) data, gSeqFileHeader, size);
alSeqFileNew(gSeqFileHeader, data);
// Load header for CTL (assets/sound_data.ctl.s, i.e. ADSR)
gAlCtlHeader = (ALSeqFile *) buf;
data = gSoundDataADSR;
audio_dma_copy_immediate((u32) data, gAlCtlHeader, 0x10);
audio_dma_copy_immediate((uintptr_t) data, gAlCtlHeader, 0x10);
size = gAlCtlHeader->seqCount * sizeof(ALSeqData) + 4;
size = ALIGN16(size);
gCtlEntries = soundAlloc(&gSoundPool, gAlCtlHeader->seqCount * sizeof(struct CtlEntry));
gAlCtlHeader = soundAlloc(&gSoundPool, size);
audio_dma_copy_immediate((u32) data, gAlCtlHeader, size);
audio_dma_copy_immediate((uintptr_t) data, gAlCtlHeader, size);
alSeqFileNew(gAlCtlHeader, data);
// Load header for TBL (assets/sound_data.tbl.s, i.e. raw data)
gAlTbl = (ALSeqFile *) buf;
audio_dma_copy_immediate((u32) data, gAlTbl, 0x10);
audio_dma_copy_immediate((uintptr_t) data, gAlTbl, 0x10);
size = gAlTbl->seqCount * sizeof(ALSeqData) + 4;
size = ALIGN16(size);
gAlTbl = soundAlloc(&gSoundPool, size);
audio_dma_copy_immediate((u32) gSoundDataRaw, gAlTbl, size);
audio_dma_copy_immediate((uintptr_t) gSoundDataRaw, gAlTbl, size);
alSeqFileNew(gAlTbl, gSoundDataRaw);
// Load bank sets for each sequence (assets/bank_sets.s)
gAlBankSets = soundAlloc(&gSoundPool, 0x100);
audio_dma_copy_immediate((u32) gBankSetsData, gAlBankSets, 0x100);
audio_dma_copy_immediate((uintptr_t) gBankSetsData, gAlBankSets, 0x100);
func_8031D4B8();
gAudioLoadLock = AUDIO_LOCK_NOT_LOADING;

View File

@@ -8,7 +8,7 @@
#define PRELOAD_BANKS 2
#define PRELOAD_SEQUENCE 1
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((u32)(ptr) != (u32)&gSequenceChannelNone)
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gSequenceChannelNone)
extern struct Note *gNotes;
@@ -36,11 +36,11 @@ extern u32 gSampleDmaNumListItems;
extern ALSeqFile *gAlTbl;
extern u8 *gAlBankSets;
void audio_dma_partial_copy_async(u32 *devAddr, u8 **vAddr, s32 *remaining, OSMesgQueue *queue, OSIoMesg *mesg);
void audio_dma_partial_copy_async(uintptr_t *devAddr, u8 **vAddr, ssize_t *remaining, OSMesgQueue *queue, OSIoMesg *mesg);
void decrease_sample_dma_ttls(void);
void *dma_sample_data(u8 *arg0, u32 arg1, s32 arg2, u8 *arg3);
void *dma_sample_data(u8 *devAddr, u32 size, s32 arg2, u8 *arg3);
void func_8031758C(s32 arg0);
void func_8031784C(struct AudioBank *arg0, u8 *offset, u32 arg2, u32 arg3);
void func_8031784C(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 numDrums);
void preload_sequence(u32 seqId, u8 preloadMask);
void load_sequence(u32 player, u32 seqId, s32 loadAsync);

View File

@@ -109,7 +109,7 @@ void *soundAlloc(struct SoundAllocPool *pool, u32 size) {
}
void func_80316094(struct SoundAllocPool *pool, void *arg1, u32 arg2) {
pool->cur = pool->start = (u8 *) (((u32) arg1 + 0xf) & -0x10);
pool->cur = pool->start = (u8 *) (((uintptr_t) arg1 + 0xf) & -0x10);
pool->size = arg2;
pool->unused = 0;
}
@@ -376,27 +376,24 @@ void func_803168CC(void) {
void wait_for_audio_frames(s32 frames) {
gActiveAudioFrames = 0;
// Sound thread will update gActiveAudioFrames
while (gActiveAudioFrames < frames) { /* spin */
while (gActiveAudioFrames < frames) {
// spin
}
}
#ifdef NON_MATCHING
#define frames s1
void func_80316928(struct Struct80332190 *arg0) {
// Wrong regalloc, and a lui which is too far up.
s32 sp2C;
s8 updatesPerFrame;
s16 *mem;
s32 i; // s0
s32 sp2C;
s32 i;
s32 j;
s32 k;
s32 persistentMem;
s32 temporaryMem;
s32 totalMem;
s32 wantMisc;
s32 s1;
s8 temp8;
s32 size;
UNUSED s32 temp;
s32 frames;
s32 remainingDmas;
if (gAudioLoadLock != AUDIO_LOCK_UNINITIALIZED) {
func_803168CC();
@@ -412,7 +409,7 @@ void func_80316928(struct Struct80332190 *arg0) {
for (;;) {
wait_for_audio_frames(1);
frames++;
if (frames > 8 * 30) {
if (frames > 4 * 60) {
// Break after 4 seconds
break;
}
@@ -433,11 +430,11 @@ void func_80316928(struct Struct80332190 *arg0) {
gAudioLoadLock = AUDIO_LOCK_LOADING;
wait_for_audio_frames(3);
s1 = gCurrAudioFrameDmaCount;
while (s1 > 0) {
remainingDmas = gCurrAudioFrameDmaCount;
while (remainingDmas > 0) {
for (i = 0; i < gCurrAudioFrameDmaCount; i++) {
if (osRecvMesg(&gCurrAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0)
s1--;
remainingDmas--;
}
}
gCurrAudioFrameDmaCount = 0;
@@ -453,8 +450,7 @@ void func_80316928(struct Struct80332190 *arg0) {
sp2C = arg0->unk6;
gAiFrequency = osAiSetFrequency(arg0->frequency);
gMaxSimultaneousNotes = arg0->maxSimultaneousNotes;
size = gAiFrequency / 60;
D_80226D74 = ALIGN16(size);
D_80226D74 = ALIGN16(gAiFrequency / 60);
D_802212A2 = arg0->unk5;
switch (D_802212A2) {
@@ -480,21 +476,22 @@ void func_80316928(struct Struct80332190 *arg0) {
D_802212A2 = arg0->unk5;
D_802212A0 = arg0->volume;
gMinAiBufferLength = D_80226D74 - 0x10;
temp8 = D_80226D74 / 160 + 1;
gAudioUpdatesPerFrame = temp8;
updatesPerFrame = D_80226D74 / 160 + 1;
gAudioUpdatesPerFrame = D_80226D74 / 160 + 1;
// Compute conversion ratio from the internal unit tatums/tick to the
// external beats/minute (JP) or tatums/minute (US). In practice this is
// 300 on JP and 14360 on US.
#ifdef VERSION_JP
gTempoInternalToExternal = temp8 * 3600 / gTatumsPerBeat;
gTempoInternalToExternal = updatesPerFrame * 3600 / gTatumsPerBeat;
#else
gTempoInternalToExternal = (u32)(temp8 * 2880000.0f / gTatumsPerBeat / 16.713f);
gTempoInternalToExternal = (u32)(updatesPerFrame * 2880000.0f / gTatumsPerBeat / 16.713f);
#endif
D_80226D6C = gMaxSimultaneousNotes * 20 * temp8 + 320;
D_80226D6C = gMaxSimultaneousNotes * 20 * updatesPerFrame + 320;
persistentMem = arg0->persistentBankMem + arg0->persistentSeqMem;
temporaryMem = arg0->temporaryBankMem + arg0->temporarySeqMem;
totalMem = persistentMem + temporaryMem;
// (the address of D_802212A8.size is lui'd too far up)
wantMisc = D_802212A8.size - totalMem - 0x100;
D_80221898.wantSeq = wantMisc;
D_80221898.wantCustom = totalMem;
@@ -556,9 +553,3 @@ void func_80316928(struct Struct80332190 *arg0) {
gAudioLoadLock = AUDIO_LOCK_NOT_LOADING;
}
}
#elif defined(VERSION_JP)
GLOBAL_ASM("asm/non_matchings/func_80316928_jp.s")
#else
GLOBAL_ASM("asm/non_matchings/func_80316928_us.s")
#endif

View File

@@ -491,11 +491,11 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) {
}
temp_v0_11 = &layer->adsr;
if (((u32) gBankLoadedPool.persistent.pool.start <= (u32) inst
&& (u32) inst <= (u32)(gBankLoadedPool.persistent.pool.start
if (((uintptr_t) gBankLoadedPool.persistent.pool.start <= (uintptr_t) inst
&& (uintptr_t) inst <= (uintptr_t)(gBankLoadedPool.persistent.pool.start
+ gBankLoadedPool.persistent.pool.size))
|| ((u32) gBankLoadedPool.temporary.pool.start <= (u32) inst
&& (u32) inst <= (u32)(gBankLoadedPool.temporary.pool.start
|| ((uintptr_t) gBankLoadedPool.temporary.pool.start <= (uintptr_t) inst
&& (uintptr_t) inst <= (uintptr_t)(gBankLoadedPool.temporary.pool.start
+ gBankLoadedPool.temporary.pool.size))) {
temp_v0_11->envelope = inst->envelope;
temp_v0_11->releaseRate = inst->releaseRate;
@@ -802,11 +802,11 @@ u8 get_instrument(struct SequenceChannel *seqChannel, u8 instId, struct Instrume
}
}
if (((u32) gBankLoadedPool.persistent.pool.start <= (u32) inst
&& (u32) inst
<= (u32)(gBankLoadedPool.persistent.pool.start + gBankLoadedPool.persistent.pool.size))
|| ((u32) gBankLoadedPool.temporary.pool.start <= (u32) inst
&& (u32) inst <= (u32)(gBankLoadedPool.temporary.pool.start
if (((uintptr_t) gBankLoadedPool.persistent.pool.start <= (uintptr_t) inst
&& (uintptr_t) inst <= (uintptr_t)(gBankLoadedPool.persistent.pool.start
+ gBankLoadedPool.persistent.pool.size))
|| ((uintptr_t) gBankLoadedPool.temporary.pool.start <= (uintptr_t) inst
&& (uintptr_t) inst <= (uintptr_t)(gBankLoadedPool.temporary.pool.start
+ gBankLoadedPool.temporary.pool.size))) {
adsr->envelope = inst->envelope;
adsr->releaseRate = inst->releaseRate;

View File

@@ -10,18 +10,17 @@
#define aSetLoadBufferPair(pkt, c, off) \
aSetBuffer(pkt, 0, c + 0x740, 0, 0x140 - c); \
aLoadBuffer(pkt, FIX(&D_802211B0.unk14.unk00[off])); \
aLoadBuffer(pkt, VIRTUAL_TO_PHYSICAL2(&D_802211B0.unk14.unk00[off])); \
aSetBuffer(pkt, 0, c + 0x880, 0, 0x140 - c); \
aLoadBuffer(pkt, FIX(&D_802211B0.unk14.unk04[off]));
aLoadBuffer(pkt, VIRTUAL_TO_PHYSICAL2(&D_802211B0.unk14.unk04[off]));
#define aSetSaveBufferPair(pkt, c, d, off) \
aSetBuffer(pkt, 0, 0, c + 0x740, d); \
aSaveBuffer(pkt, FIX(&D_802211B0.unk14.unk00[off])); \
aSaveBuffer(pkt, VIRTUAL_TO_PHYSICAL2(&D_802211B0.unk14.unk00[off])); \
aSetBuffer(pkt, 0, 0, c + 0x880, d); \
aSaveBuffer(pkt, FIX(&D_802211B0.unk14.unk04[off]));
aSaveBuffer(pkt, VIRTUAL_TO_PHYSICAL2(&D_802211B0.unk14.unk04[off]));
#define ALIGN(val, amnt) (((val) + (1 << amnt) - 1) & ~((1 << amnt) - 1))
#define FIX(a) (u16 *) ((u8 *) (a) + 0x80000000U)
struct Struct802211B0 D_802211B0;
u8 sAudioSynthesisPad[0x20];
@@ -174,9 +173,9 @@ u64 *func_80313E54(u16 *aiBuf, s32 bufLen, u64 *cmd, u32 updateIndex) {
aSetLoadBufferPair(cmd++, ra, 0);
}
aSetBuffer(cmd++, 0, t4 + 0x740, 0x4c0, bufLen << 1);
aResample(cmd++, D_802211B0.unk0, (u16) D_802211B0.unk6, FIX(D_802211B0.unk1C));
aResample(cmd++, D_802211B0.unk0, (u16) D_802211B0.unk6, VIRTUAL_TO_PHYSICAL2(D_802211B0.unk1C));
aSetBuffer(cmd++, 0, t4 + 0x880, 0x600, bufLen << 1);
aResample(cmd++, D_802211B0.unk0, (u16) D_802211B0.unk6, FIX(D_802211B0.unk20));
aResample(cmd++, D_802211B0.unk0, (u16) D_802211B0.unk6, VIRTUAL_TO_PHYSICAL2(D_802211B0.unk20));
aSetBuffer(cmd++, 0, 0, 0, 0x280);
aMix(cmd++, 0, /*gain*/ D_802211B0.unk4 + 32768, /*in*/ 0x4c0, /*out*/ 0x4c0);
aDMEMMove(cmd++, 0x4c0, 0x740, 0x280);
@@ -189,7 +188,7 @@ u64 *func_80313E54(u16 *aiBuf, s32 bufLen, u64 *cmd, u32 updateIndex) {
}
} else {
aSetBuffer(cmd++, 0, 0, 0x740, 0x280);
aSaveBuffer(cmd++, FIX(D_802211B0.unk2C[D_802211B0.unk3][updateIndex].unk4));
aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(D_802211B0.unk2C[D_802211B0.unk3][updateIndex].unk4));
D_802211B0.unk0 = 0;
}
}
@@ -324,7 +323,7 @@ u64 *func_80314480(u16 *aiBuf, s32 bufLen, u64 *cmd) {
u32 v1;
sp15C = sp164->book->book;
v1 = sp164->book->order * sp164->book->npredictors;
aLoadADPCM(cmd++, v1 * 16, FIX(sp15C));
aLoadADPCM(cmd++, v1 * 16, VIRTUAL_TO_PHYSICAL2(sp15C));
}
while (fp != t5) {
@@ -369,27 +368,27 @@ u64 *func_80314480(u16 *aiBuf, s32 bufLen, u64 *cmd) {
// maybe keep a var for t0 * 9?
v0_2 = dma_sample_data(sp120 + (s7->unk14 - s2 + 0x10) / 16 * 9, t0 * 9,
sp148, &s7->sampleDmaIndex);
a3 = (u32) v0_2 & 0xf;
a3 = (u32)((uintptr_t) v0_2 & 0xf);
aSetBuffer(cmd++, 0, 0x3f0, 0, t0 * 9 + a3);
aLoadBuffer(cmd++, FIX(v0_2 - a3));
aLoadBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(v0_2 - a3));
} else {
s0 = 0;
a3 = 0;
}
if (s7->unk0b20 != 0) {
aSetLoop(cmd++, FIX(sp164->loop->state));
aSetLoop(cmd++, VIRTUAL_TO_PHYSICAL2(sp164->loop->state));
sp148 = A_LOOP; // = 2
s7->unk0b20 = 0;
}
if (fp == 0) {
aSetBuffer(cmd++, 0, a3 + 0x3f0, 0x180, s0 * 2);
aADPCMdec(cmd++, sp148, FIX(s7->unk34->unk00));
aADPCMdec(cmd++, sp148, VIRTUAL_TO_PHYSICAL2(s7->unk34->unk00));
sp130 = s2 * 2;
} else {
aSetBuffer(cmd++, 0, a3 + 0x3f0, ALIGN(s5, 5) + 0x180, s0 * 2);
aADPCMdec(cmd++, sp148, FIX(s7->unk34->unk00));
aADPCMdec(cmd++, sp148, VIRTUAL_TO_PHYSICAL2(s7->unk34->unk00));
aDMEMMove(cmd++, ALIGN(s5, 5) + (s2 * 2) + 0x180, s5 + 0x180,
(s0 + s6_2 - s3) * 2);
}
@@ -440,7 +439,7 @@ u64 *func_80314480(u16 *aiBuf, s32 bufLen, u64 *cmd) {
switch (spE4) {
case 0:
aSetBuffer(cmd++, 0, sp130 + 0x180, 0x20, t5 + 4);
aResample(cmd++, 0x1, 0xff60, FIX(s7->unk34->unkF0));
aResample(cmd++, 0x1, 0xff60, VIRTUAL_TO_PHYSICAL2(s7->unk34->unkF0));
spD8 = t5 + 4;
spD6 = 36;
if (s7->unk0b10 != 0) {
@@ -450,7 +449,7 @@ u64 *func_80314480(u16 *aiBuf, s32 bufLen, u64 *cmd) {
case 1:
aSetBuffer(cmd++, 0, sp130 + 0x180, 0x160, t5 + 8);
aResample(cmd++, 0x1, 0xff60, FIX(s7->unk34->unkF0));
aResample(cmd++, 0x1, 0xff60, VIRTUAL_TO_PHYSICAL2(s7->unk34->unkF0));
aDMEMMove(cmd++, 0x164, spD8 + 0x20, t5 + 4);
break;
}
@@ -494,7 +493,7 @@ u64 *func_80314480(u16 *aiBuf, s32 bufLen, u64 *cmd) {
aInterleave(cmd++, 0x4c0, 0x600);
t9 *= 2;
aSetBuffer(cmd++, 0, 0, 0, t9);
aSaveBuffer(cmd++, FIX(aiBuf));
aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(aiBuf));
return cmd;
}
@@ -509,7 +508,7 @@ u64 *func_80314F08(u64 *cmd, struct Note *note, s32 arg2) {
s32 i;
aSetBuffer(cmd++, /*flags*/ 0, /*dmemin*/ 0x180, /*dmemout*/ 0,
/*count*/ sizeof(note->unk34->samples)); // interesting that it's 128...
aLoadBuffer(cmd++, FIX(note->unk34->samples));
aLoadBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->unk34->samples));
note->unk14 = (note->sampleCount - 1) & note->unk14;
a3 = 64 - note->unk14;
if (a3 < arg2) {
@@ -525,7 +524,7 @@ u64 *func_80314F08(u64 *cmd, struct Note *note, s32 arg2) {
u64 *func_80314FD4(u64 *cmd, struct Note *note, s32 arg2, u16 arg3, u16 arg4, u32 arg5) {
aSetBuffer(cmd++, 0, arg4, 0, arg2);
aResample(cmd++, arg5, arg3, FIX(note->unk34->unk20));
aResample(cmd++, arg5, arg3, VIRTUAL_TO_PHYSICAL2(note->unk34->unk20));
return cmd;
}
@@ -593,7 +592,7 @@ u64 *func_80315094(u64 *cmd, struct Note *note, s32 arg2, u16 arg3, s32 arg4,
aSetVolume(cmd++, A_AUX, D_802212A0, 0, note->reverbVol);
}
if (D_802211B0.unk1 && note->reverb) {
aEnvMixer(cmd++, mixerFlags | A_AUX, FIX(note->unk34->unk40));
aEnvMixer(cmd++, mixerFlags | A_AUX, VIRTUAL_TO_PHYSICAL2(note->unk34->unk40));
if (note->stereoStrongRight) {
aSetBuffer(cmd++, 0, 0, 0, arg2 * 2);
aMix(cmd++, 0, /*gain*/ 0x8000, /*in*/ 0x200, /*out*/ 0x4c0);
@@ -604,7 +603,7 @@ u64 *func_80315094(u64 *cmd, struct Note *note, s32 arg2, u16 arg3, s32 arg4,
aMix(cmd++, 0, /*gain*/ 0x8000, /*in*/ 0x340, /*out*/ 0x880);
}
} else {
aEnvMixer(cmd++, mixerFlags, FIX(note->unk34->unk40));
aEnvMixer(cmd++, mixerFlags, VIRTUAL_TO_PHYSICAL2(note->unk34->unk40));
if (note->stereoStrongRight) {
aSetBuffer(cmd++, 0, 0, 0, arg2 * 2);
aMix(cmd++, 0, /*gain*/ 0x8000, /*in*/ 0x200, /*out*/ 0x4c0);
@@ -649,20 +648,20 @@ u64 *func_803155F4(u64 *cmd, struct Note *note, s32 arg2, s32 arg3, s32 leftRigh
aClearBuffer(cmd++, 8, 8);
aDMEMMove(cmd++, 0x200, 0x10, 0x10);
aSetBuffer(cmd++, 0, 0, 0, 32);
aSaveBuffer(cmd++, FIX(note->unk34->unk90));
aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->unk34->unk90));
pitch = (arg2 << 0xf) / (panVolume + arg2 - prevPanVolume + 8);
aSetBuffer(cmd++, 0, 0x208, 0, panVolume + arg2 - prevPanVolume);
aResample(cmd++, 0, pitch, FIX(note->unk34->unk90));
aResample(cmd++, 0, pitch, VIRTUAL_TO_PHYSICAL2(note->unk34->unk90));
} else {
pitch = (panVolume == 0) ? (arg2 << 0xf) / (arg2 - prevPanVolume - 4)
: (arg2 << 0xf) / (arg2 + panVolume - prevPanVolume);
aSetBuffer(cmd++, 0, 0x200, 0, panVolume + arg2 - prevPanVolume);
aResample(cmd++, 0, pitch, FIX(note->unk34->unk90));
aResample(cmd++, 0, pitch, VIRTUAL_TO_PHYSICAL2(note->unk34->unk90));
}
if (prevPanVolume != 0) {
aSetBuffer(cmd++, 0, 0x200, 0, prevPanVolume);
aLoadBuffer(cmd++, FIX(note->unk34->unkB0));
aLoadBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->unk34->unkB0));
aDMEMMove(cmd++, 0, prevPanVolume + 0x200, panVolume + arg2 - prevPanVolume);
} else {
aDMEMMove(cmd++, 0, 0x200, panVolume + arg2 - prevPanVolume);
@@ -675,7 +674,7 @@ u64 *func_803155F4(u64 *cmd, struct Note *note, s32 arg2, s32 arg3, s32 leftRigh
if (panVolume) {
aSetBuffer(cmd++, 0, 0, arg2 + 0x200, panVolume);
aSaveBuffer(cmd++, FIX(note->unk34->unkB0));
aSaveBuffer(cmd++, VIRTUAL_TO_PHYSICAL2(note->unk34->unkB0));
}
aSetBuffer(cmd++, 0, 0, 0, arg2);

View File

@@ -2,8 +2,8 @@
#define BUFFERS_H
#include "types.h"
#include "save_file.h"
#include "display.h"
#include "game/save_file.h"
#include "game/display.h"
extern u8 gDecompressionHeap[];

View File

@@ -16,8 +16,8 @@
static u16 gRandomSeed16;
// unused
static void func_80383B70(u32 segptr) {
gBehCommand = segmented_to_virtual((void *) segptr);
static void func_80383B70(void *segptr) {
gBehCommand = segmented_to_virtual(segptr);
gCurrentObject->stackIndex = 0;
}
@@ -72,13 +72,13 @@ void func_80383D68(struct Object *object) {
object->header.gfx.angle[2] = object->oFaceAngleRoll & 0xFFFF;
}
static void cur_object_stack_push(u32 value) {
static void cur_object_stack_push(uintptr_t value) {
gCurrentObject->stack[gCurrentObject->stackIndex] = value;
gCurrentObject->stackIndex++;
}
static u32 cur_object_stack_pop(void) {
u32 value;
static uintptr_t cur_object_stack_pop(void) {
uintptr_t value;
gCurrentObject->stackIndex--;
value = gCurrentObject->stack[gCurrentObject->stackIndex];
return value;
@@ -117,7 +117,7 @@ static s32 beh_cmd_graph_node(void) {
}
static s32 beh_cmd_obj_load_chill(void) {
u32 model = gBehCommand[1];
u32 model = (u32) gBehCommand[1];
void *arg1 = (void *) gBehCommand[2];
struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, arg1);
@@ -129,7 +129,7 @@ static s32 beh_cmd_obj_load_chill(void) {
}
static s32 beh_cmd_obj_spawn(void) {
u32 model = gBehCommand[1];
u32 model = (u32) gBehCommand[1];
void *arg1 = (void *) gBehCommand[2];
struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, arg1);
@@ -144,7 +144,7 @@ static s32 beh_cmd_obj_spawn(void) {
static s32 beh_cmd_obj_load_chill_param(void) {
u32 behParam = (s16)(gBehCommand[0] & 0xFFFF);
u32 model = gBehCommand[1];
u32 model = (u32) gBehCommand[1];
void *arg2 = (void *) gBehCommand[2];
struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, arg2);
@@ -172,23 +172,23 @@ static s32 beh_cmd_break2(void) {
}
static s32 beh_cmd_call(void) {
u32 *jumpAddress;
uintptr_t *jumpAddress;
gBehCommand++;
cur_object_stack_push((u32)(gBehCommand + 1));
jumpAddress = (u32 *) segmented_to_virtual((void *) gBehCommand[0]);
cur_object_stack_push((uintptr_t)(gBehCommand + 1));
jumpAddress = segmented_to_virtual((void *) gBehCommand[0]);
gBehCommand = jumpAddress;
return BEH_CONTINUE;
}
static s32 beh_cmd_return(void) {
gBehCommand = (u32 *) cur_object_stack_pop();
gBehCommand = (uintptr_t *) cur_object_stack_pop();
return BEH_CONTINUE;
}
static s32 beh_cmd_delay(void) {
s16 arg0 = gBehCommand[0] & 0xFFFF;
s16 arg0 = (s16)(gBehCommand[0] & 0xFFFF);
if (gCurrentObject->unk1F4 < arg0 - 1) {
gCurrentObject->unk1F4++;
@@ -201,7 +201,7 @@ static s32 beh_cmd_delay(void) {
}
static s32 beh_cmd_delay_var(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 arg0 = cur_object_get_int(objectOffset);
if (gCurrentObject->unk1F4 < (arg0 - 1)) {
@@ -216,7 +216,7 @@ static s32 beh_cmd_delay_var(void) {
static s32 beh_cmd_goto(void) {
gBehCommand++;
gBehCommand = (u32 *) segmented_to_virtual((void *) gBehCommand[0]);
gBehCommand = segmented_to_virtual((void *) gBehCommand[0]);
return BEH_CONTINUE;
}
@@ -224,7 +224,7 @@ static s32 beh_cmd_goto(void) {
static s32 Behavior26(void) {
s32 value = (u8)(gBehCommand[0] >> 16) & 0xFF;
cur_object_stack_push((u32)(gBehCommand + 1));
cur_object_stack_push((uintptr_t)(gBehCommand + 1));
cur_object_stack_push(value);
gBehCommand++;
@@ -235,7 +235,7 @@ static s32 Behavior26(void) {
static s32 beh_cmd_begin_repeat(void) {
s32 count = (s16)(gBehCommand[0] & 0xFFFF);
cur_object_stack_push((u32)(gBehCommand + 1));
cur_object_stack_push((uintptr_t)(gBehCommand + 1));
cur_object_stack_push(count);
gBehCommand++;
@@ -244,12 +244,12 @@ static s32 beh_cmd_begin_repeat(void) {
}
static s32 beh_cmd_end_repeat(void) {
u32 count = cur_object_stack_pop();
u32 count = (u32) cur_object_stack_pop();
count--;
if (count != 0) {
gBehCommand = (u32 *) cur_object_stack_pop();
cur_object_stack_push((u32) gBehCommand);
gBehCommand = (uintptr_t *) cur_object_stack_pop();
cur_object_stack_push((uintptr_t) gBehCommand);
cur_object_stack_push(count);
} else {
cur_object_stack_pop();
@@ -260,12 +260,12 @@ static s32 beh_cmd_end_repeat(void) {
}
static s32 beh_cmd_end_repeat_nobreak(void) {
u32 count = cur_object_stack_pop();
u32 count = (u32) cur_object_stack_pop();
count--;
if (count != 0) {
gBehCommand = (u32 *) cur_object_stack_pop();
cur_object_stack_push((u32) gBehCommand);
gBehCommand = (uintptr_t *) cur_object_stack_pop();
cur_object_stack_push((uintptr_t) gBehCommand);
cur_object_stack_push(count);
} else {
cur_object_stack_pop();
@@ -276,15 +276,15 @@ static s32 beh_cmd_end_repeat_nobreak(void) {
}
static s32 beh_cmd_begin_loop(void) {
cur_object_stack_push((u32)(gBehCommand + 1));
cur_object_stack_push((uintptr_t)(gBehCommand + 1));
gBehCommand++;
return BEH_CONTINUE;
}
static s32 beh_cmd_end_loop(void) {
gBehCommand = (u32 *) cur_object_stack_pop();
cur_object_stack_push((u32) gBehCommand);
gBehCommand = (uintptr_t *) cur_object_stack_pop();
cur_object_stack_push((uintptr_t) gBehCommand);
return BEH_BREAK;
}
@@ -301,7 +301,7 @@ static s32 beh_cmd_callnative(void) {
}
static s32 beh_cmd_obj_set_float(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
f32 value = (s16)(gBehCommand[0] & 0xFFFF);
cur_object_set_float(objectOffset, value);
@@ -311,8 +311,8 @@ static s32 beh_cmd_obj_set_float(void) {
}
static s32 beh_cmd_obj_set_int(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
s16 value = gBehCommand[0] & 0xFFFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s16 value = (s16)(gBehCommand[0] & 0xFFFF);
cur_object_set_int(objectOffset, value);
@@ -322,7 +322,7 @@ static s32 beh_cmd_obj_set_int(void) {
// unused
static s32 Behavior36(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
u32 value = (s16)(gBehCommand[1] & 0xFFFF);
cur_object_set_int(objectOffset, value);
@@ -332,7 +332,7 @@ static s32 Behavior36(void) {
}
static s32 beh_cmd_obj_set_float_rand(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
f32 min = (s16)(gBehCommand[0] & 0xFFFF);
f32 max = (s16)(gBehCommand[1] >> 16);
@@ -343,7 +343,7 @@ static s32 beh_cmd_obj_set_float_rand(void) {
}
static s32 beh_cmd_obj_set_int_rand(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
s32 max = (s16)(gBehCommand[1] >> 16);
@@ -354,7 +354,7 @@ static s32 beh_cmd_obj_set_int_rand(void) {
}
static s32 beh_cmd_obj_set_int_rand_rshift(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
s32 rshift = (s16)(gBehCommand[1] >> 16);
@@ -365,7 +365,7 @@ static s32 beh_cmd_obj_set_int_rand_rshift(void) {
}
static s32 beh_cmd_obj_add_float_rand(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
f32 min = (s16)(gBehCommand[0] & 0xFFFF);
f32 max = (s16)(gBehCommand[1] >> 16);
@@ -378,7 +378,7 @@ static s32 beh_cmd_obj_add_float_rand(void) {
// unused
static s32 beh_cmd_obj_add_int_rand_rshift(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
s32 rshift = (s16)(gBehCommand[1] >> 16);
s32 rnd = RandomU16();
@@ -390,7 +390,7 @@ static s32 beh_cmd_obj_add_int_rand_rshift(void) {
}
static s32 beh_cmd_obj_add_float(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
f32 value = (s16)(gBehCommand[0] & 0xFFFF);
cur_object_add_float(objectOffset, value);
@@ -400,7 +400,7 @@ static s32 beh_cmd_obj_add_float(void) {
}
static s32 beh_cmd_obj_add_int(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s16 value = gBehCommand[0] & 0xFFFF;
cur_object_add_int(objectOffset, value);
@@ -410,7 +410,7 @@ static s32 beh_cmd_obj_add_int(void) {
}
static s32 beh_cmd_obj_or_int(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 value = (s16)(gBehCommand[0] & 0xFFFF);
value &= 0xFFFF;
@@ -422,7 +422,7 @@ static s32 beh_cmd_obj_or_int(void) {
// unused
static s32 beh_cmd_obj_bit_clear_int(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 value = (s16)(gBehCommand[0] & 0xFFFF);
value = (value & 0xFFFF) ^ 0xFFFF;
@@ -433,7 +433,7 @@ static s32 beh_cmd_obj_bit_clear_int(void) {
}
static s32 beh_cmd_obj_set_int32(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
cur_object_set_int(objectOffset, gBehCommand[1]);
@@ -443,7 +443,7 @@ static s32 beh_cmd_obj_set_int32(void) {
static s32 beh_cmd_obj_animate(void) {
s32 animIndex = (u8)((gBehCommand[0] >> 16) & 0xFF);
u32 *animations = gCurrentObject->oAnimations;
struct Animation **animations = gCurrentObject->oAnimations;
geo_obj_init_animation((struct GraphNodeObject *) gCurrentObject, &animations[animIndex]);
@@ -517,8 +517,8 @@ static s32 beh_cmd_obj_sum_int(void) {
}
static s32 beh_cmd_set_hitbox(void) {
s16 colSphereX = gBehCommand[1] >> 16;
s16 colSphereY = gBehCommand[1] & 0xFFFF;
s16 colSphereX = (s16)(gBehCommand[1] >> 16);
s16 colSphereY = (s16)(gBehCommand[1] & 0xFFFF);
gCurrentObject->hitboxRadius = colSphereX;
gCurrentObject->hitboxHeight = colSphereY;
@@ -528,8 +528,8 @@ static s32 beh_cmd_set_hitbox(void) {
}
static s32 beh_cmd_obj_set_float2(void) {
s16 arg0 = gBehCommand[1] >> 16;
s16 arg1 = gBehCommand[1] & 0xFFFF;
s16 arg0 = (s16)(gBehCommand[1] >> 16);
s16 arg1 = (s16)(gBehCommand[1] & 0xFFFF);
gCurrentObject->hurtboxRadius = arg0;
gCurrentObject->hurtboxHeight = arg1;
@@ -539,9 +539,9 @@ static s32 beh_cmd_obj_set_float2(void) {
}
static s32 beh_cmd_collision_sphere(void) {
s16 colSphereX = gBehCommand[1] >> 16;
s16 colSphereY = gBehCommand[1] & 0xFFFF;
s16 unknown = gBehCommand[2] >> 16;
s16 colSphereX = (s16)(gBehCommand[1] >> 16);
s16 colSphereY = (s16)(gBehCommand[1] & 0xFFFF);
s16 unknown = (s16)(gBehCommand[2] >> 16);
gCurrentObject->hitboxRadius = colSphereX;
gCurrentObject->hitboxHeight = colSphereY;
@@ -576,7 +576,7 @@ static s32 beh_cmd_begin(void) {
}
static void Unknown8038556C(s32 lastIndex) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
u32 table[16];
s32 i;
@@ -604,7 +604,7 @@ static s32 beh_cmd_obj_set_pos(void) {
}
static s32 beh_cmd_interact_type(void) {
gCurrentObject->oInteractType = gBehCommand[1];
gCurrentObject->oInteractType = (u32) gBehCommand[1];
gBehCommand += 2;
return BEH_CONTINUE;
@@ -612,14 +612,14 @@ static s32 beh_cmd_interact_type(void) {
// unused
static s32 Behavior31(void) {
gCurrentObject->oInteractionSubtype = gBehCommand[1];
gCurrentObject->oInteractionSubtype = (u32) gBehCommand[1];
gBehCommand += 2;
return BEH_CONTINUE;
}
static s32 beh_cmd_scale(void) {
UNUSED u8 sp1f = (gBehCommand[0] >> 16) & 0xFF;
UNUSED u8 sp1f = (u8)((gBehCommand[0] >> 16) & 0xFF);
s16 sp1c = gBehCommand[0] & 0xFFFF;
obj_scale((f32) sp1c / 100.0f);
@@ -647,7 +647,7 @@ static s32 beh_cmd_obj_set_gravity(void) {
}
static s32 beh_cmd_obj_bit_clear_int32(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s32 flags = gBehCommand[1];
flags = flags ^ 0xFFFFFFFF;
@@ -666,7 +666,7 @@ static s32 beh_cmd_spawn_addr(void) {
}
static s32 beh_cmd_text_anim_rate(void) {
u8 objectOffset = (gBehCommand[0] >> 16) & 0xFF;
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
s16 arg1 = (gBehCommand[0] & 0xFFFF);
if ((gGlobalTimer % arg1) == 0) {

View File

@@ -91,7 +91,7 @@ UNUSED s32 D_8038BCA8;
struct GraphNode **gGeoViews;
u16 gGeoNumViews; // length of gGeoViews array
u32 gGeoLayoutStack[16];
uintptr_t gGeoLayoutStack[16];
struct GraphNode *gCurGraphNodeList[32];
s16 gCurGraphNodeIndex;
s16 gGeoLayoutStackIndex; // similar to SP register in MIPS
@@ -107,10 +107,10 @@ u32 unused_8038B894[3] = { 0 };
cmd+0x04: void *branchTarget
*/
void geo_layout_cmd_branch_and_link(void) {
gGeoLayoutStack[gGeoLayoutStackIndex++] = (u32) &gGeoLayoutCommand[8];
gGeoLayoutStack[gGeoLayoutStackIndex++] = (uintptr_t) (gGeoLayoutCommand + 4 + sizeof(void *));
gGeoLayoutStack[gGeoLayoutStackIndex++] = (gCurGraphNodeIndex << 16) + gGeoLayoutReturnIndex;
gGeoLayoutReturnIndex = gGeoLayoutStackIndex;
gGeoLayoutCommand = (u8 *) segmented_to_virtual((void *) cur_geo_cmd_s32(0x04));
gGeoLayoutCommand = segmented_to_virtual(cur_geo_cmd_ptr(0x04));
}
// 0x01: Terminate geo layout
@@ -127,10 +127,10 @@ void geo_layout_cmd_end(void) {
*/
void geo_layout_cmd_branch(void) {
if (cur_geo_cmd_u8(0x01) == 1) {
gGeoLayoutStack[gGeoLayoutStackIndex++] = (u32) &gGeoLayoutCommand[8];
gGeoLayoutStack[gGeoLayoutStackIndex++] = (uintptr_t) (gGeoLayoutCommand + 4 + sizeof(void *));
}
gGeoLayoutCommand = (u8 *) segmented_to_virtual((void *) cur_geo_cmd_s32(0x04));
gGeoLayoutCommand = segmented_to_virtual(cur_geo_cmd_ptr(0x04));
}
// 0x03: Return from branch
@@ -216,8 +216,7 @@ void geo_layout_cmd_node_root(void) {
graphNode = init_graph_node_root(gGraphNodePool, NULL, 0, x, y, width, height);
// TODO: check type
gGeoViews =
(struct GraphNode **) alloc_only_pool_alloc(gGraphNodePool, gGeoNumViews * sizeof(void *));
gGeoViews = alloc_only_pool_alloc(gGraphNodePool, gGeoNumViews * sizeof(struct GraphNode *));
graphNode->views = gGeoViews;
graphNode->numViews = gGeoNumViews;
@@ -263,8 +262,8 @@ void geo_layout_cmd_node_perspective(void) {
if (cur_geo_cmd_u8(0x01) != 0) {
// optional asm function
frustumFunc = (GraphNodeFunc) cur_geo_cmd_s32(0x08);
gGeoLayoutCommand += 0x04;
frustumFunc = (GraphNodeFunc) cur_geo_cmd_ptr(0x08);
gGeoLayoutCommand += sizeof(void *);
}
graphNode = init_graph_node_perspective(gGraphNodePool, NULL, (f32) fov, near, far, frustumFunc, 0);
@@ -340,12 +339,12 @@ void geo_layout_cmd_node_switch_case(void) {
init_graph_node_switch_case(gGraphNodePool, NULL,
cur_geo_cmd_s16(0x02), // case which is initially selected
0,
(GraphNodeFunc) cur_geo_cmd_s32(0x04), // case update function
(GraphNodeFunc) cur_geo_cmd_ptr(0x04), // case update function
0);
register_scene_graph_node(&graphNode->fnNode.node);
gGeoLayoutCommand += 0x08;
gGeoLayoutCommand += 0x04 + sizeof(void *);
}
/*
@@ -369,13 +368,13 @@ void geo_layout_cmd_node_camera(void) {
cmdPos = read_vec3s_to_vec3f(toPos, cmdPos);
graphNode = init_graph_node_camera(gGraphNodePool, NULL, fromPos, toPos,
(GraphNodeFunc) cur_geo_cmd_s32(0x10), cur_geo_cmd_s16(0x02));
(GraphNodeFunc) cur_geo_cmd_ptr(0x10), cur_geo_cmd_s16(0x02));
register_scene_graph_node(&graphNode->fnNode.node);
gGeoViews[0] = &graphNode->fnNode.node;
gGeoLayoutCommand += 0x14;
gGeoLayoutCommand += 0x10 + sizeof(void *);
}
/*
@@ -446,7 +445,7 @@ void geo_layout_cmd_node_translation_rotation(void) {
if (params & 0x80) {
displayList = *(void **) &cmdPos[0];
drawingLayer = params & 0x0F;
cmdPos += 2;
cmdPos += sizeof(void*) / 2;
}
graphNode = init_graph_node_translation_rotation(gGraphNodePool, NULL, drawingLayer, displayList,
@@ -481,7 +480,7 @@ void geo_layout_cmd_node_translation(void) {
if (params & 0x80) {
displayList = *(void **) &cmdPos[0];
drawingLayer = params & 0x0F;
cmdPos += 2;
cmdPos += sizeof(void*) / 2;
}
graphNode =
@@ -517,7 +516,7 @@ void geo_layout_cmd_node_rotation(void) {
if (params & 0x80) {
displayList = *(void **) &cmdPos[0];
drawingLayer = params & 0x0F;
cmdPos += 2;
cmdPos += sizeof(void*) / 2;
}
graphNode = init_graph_node_rotation(gGraphNodePool, NULL, drawingLayer, displayList, sp2c);
@@ -544,9 +543,9 @@ void geo_layout_cmd_node_scale(void) {
void *displayList = NULL;
if (params & 0x80) {
displayList = (void *) cur_geo_cmd_s32(0x08);
displayList = cur_geo_cmd_ptr(0x08);
drawingLayer = params & 0x0F;
gGeoLayoutCommand += 0x04;
gGeoLayoutCommand += sizeof(void *);
}
graphNode = init_graph_node_scale(gGraphNodePool, NULL, drawingLayer, displayList, scale);
@@ -573,7 +572,7 @@ void geo_layout_cmd_node_animated_part(void) {
struct GraphNodeAnimatedPart *graphNode;
Vec3s translation;
s32 drawingLayer = cur_geo_cmd_u8(0x01);
void *displayList = (void *) cur_geo_cmd_s32(0x08);
void *displayList = cur_geo_cmd_ptr(0x08);
s16 *cmdPos = (s16 *) gGeoLayoutCommand;
read_vec3s(translation, &cmdPos[1]);
@@ -583,7 +582,7 @@ void geo_layout_cmd_node_animated_part(void) {
register_scene_graph_node(&graphNode->node);
gGeoLayoutCommand += 0x0C;
gGeoLayoutCommand += 0x08 + sizeof(void *);
}
/*
@@ -609,7 +608,7 @@ void geo_layout_cmd_node_billboard(void) {
if (params & 0x80) {
displayList = *(void **) &cmdPos[0];
drawingLayer = params & 0x0F;
cmdPos += 2;
cmdPos += sizeof(void*) / 2;
}
graphNode = init_graph_node_billboard(gGraphNodePool, NULL, drawingLayer, displayList, translation);
@@ -627,13 +626,13 @@ void geo_layout_cmd_node_billboard(void) {
void geo_layout_cmd_node_display_list(void) {
struct GraphNodeDisplayList *graphNode;
s32 drawingLayer = cur_geo_cmd_u8(0x01);
void *displayList = (void *) cur_geo_cmd_s32(0x04);
void *displayList = cur_geo_cmd_ptr(0x04);
graphNode = init_graph_node_display_list(gGraphNodePool, NULL, drawingLayer, displayList);
register_scene_graph_node(&graphNode->node);
gGeoLayoutCommand += 0x08;
gGeoLayoutCommand += 0x04 + sizeof(void *);
}
/*
@@ -675,12 +674,12 @@ void geo_layout_cmd_node_generated(void) {
struct GraphNodeGenerated *graphNode;
graphNode = init_graph_node_generated(gGraphNodePool, NULL,
(GraphNodeFunc) cur_geo_cmd_s32(0x04), // asm function
(GraphNodeFunc) cur_geo_cmd_ptr(0x04), // asm function
cur_geo_cmd_s16(0x02)); // parameter
register_scene_graph_node(&graphNode->fnNode.node);
gGeoLayoutCommand += 0x08;
gGeoLayoutCommand += 0x04 + sizeof(void *);
}
/*
@@ -694,12 +693,12 @@ void geo_layout_cmd_node_background(void) {
graphNode = init_graph_node_background(
gGraphNodePool, NULL,
cur_geo_cmd_s16(0x02), // background ID, or RGBA5551 color if asm function is null
(GraphNodeFunc) cur_geo_cmd_s32(0x04), // asm function
(GraphNodeFunc) cur_geo_cmd_ptr(0x04), // asm function
0);
register_scene_graph_node(&graphNode->fnNode.node);
gGeoLayoutCommand += 0x08;
gGeoLayoutCommand += 0x04 + sizeof(void *);
}
// 0x1A: No operation
@@ -749,11 +748,11 @@ void geo_layout_cmd_node_held_obj(void) {
read_vec3s(offset, (s16 *) &gGeoLayoutCommand[0x02]);
graphNode = init_graph_node_held_object(
gGraphNodePool, NULL, 0, offset, (GraphNodeFunc) cur_geo_cmd_s32(0x08), cur_geo_cmd_u8(0x01));
gGraphNodePool, NULL, NULL, offset, (GraphNodeFunc) cur_geo_cmd_ptr(0x08), cur_geo_cmd_u8(0x01));
register_scene_graph_node(&graphNode->fnNode.node);
gGeoLayoutCommand += 0x0C;
gGeoLayoutCommand += 0x08 + sizeof(void *);
}
/*
@@ -781,7 +780,7 @@ struct GraphNode *process_geo_layout(struct AllocOnlyPool *pool, void *segptr) {
gGeoLayoutStackIndex = 2;
gGeoLayoutReturnIndex = 2; // stack index is often copied here?
gGeoLayoutCommand = (u8 *) segmented_to_virtual(segptr);
gGeoLayoutCommand = segmented_to_virtual(segptr);
gGraphNodePool = pool;

View File

@@ -19,12 +19,15 @@
#define cur_geo_cmd_u32(offset) \
(*(u32 *) &gGeoLayoutCommand[offset])
#define cur_geo_cmd_ptr(offset) \
(*(void **) &gGeoLayoutCommand[offset])
extern struct AllocOnlyPool *gGraphNodePool;
extern struct GraphNode *gCurRootGraphNode;
extern UNUSED s32 D_8038BCA8;
extern struct GraphNode **gGeoViews;
extern u16 gGeoNumViews;
extern u32 gGeoLayoutStack[];
extern uintptr_t gGeoLayoutStack[];
extern struct GraphNode *gCurGraphNodeList[];
extern s16 gCurGraphNodeIndex;
extern s16 gGeoLayoutStackIndex;

View File

@@ -497,7 +497,8 @@ struct GraphNodeBackground *init_graph_node_background(struct AllocOnlyPool *poo
*/
struct GraphNodeHeldObject *init_graph_node_held_object(struct AllocOnlyPool *pool,
struct GraphNodeHeldObject *graphNode,
s32 objNode, Vec3s translation,
struct GraphNodeObject *objNode,
Vec3s translation,
GraphNodeFunc nodeFunc, s32 unused) {
if (pool != NULL) {
graphNode = alloc_only_pool_alloc(pool, sizeof(struct GraphNodeHeldObject));
@@ -506,7 +507,7 @@ struct GraphNodeHeldObject *init_graph_node_held_object(struct AllocOnlyPool *po
if (graphNode != NULL) {
init_scene_graph_node_links(&graphNode->fnNode.node, GRAPH_NODE_TYPE_HELD_OBJ);
vec3s_copy(graphNode->translation, translation);
graphNode->objNode = (struct GraphNodeObject *) objNode; // assumed type
graphNode->objNode = objNode;
graphNode->fnNode.func = nodeFunc;
graphNode->unused = unused;
@@ -732,13 +733,13 @@ void geo_obj_init_spawninfo(struct GraphNodeObject *graphNode, struct SpawnInfo
/**
* Initialize the animation of an object node
*/
void geo_obj_init_animation(struct GraphNodeObject *graphNode, void *sp34) {
void **animSegmented = segmented_to_virtual(sp34);
struct Animation *anim = segmented_to_virtual(animSegmented[0]);
void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr) {
struct Animation **animSegmented = segmented_to_virtual(animPtrAddr);
struct Animation *anim = segmented_to_virtual(*animSegmented);
if (graphNode->unk38.curAnim != anim) {
graphNode->unk38.curAnim = anim;
graphNode->unk38.animFrame = (anim->unk04) + ((anim->flags & ANIM_FLAG_FORWARD) ? 1 : -1);
graphNode->unk38.animFrame = anim->unk04 + ((anim->flags & ANIM_FLAG_FORWARD) ? 1 : -1);
graphNode->unk38.animAccel = 0;
graphNode->unk38.animYTrans = 0;
}
@@ -747,9 +748,9 @@ void geo_obj_init_animation(struct GraphNodeObject *graphNode, void *sp34) {
/**
* Initialize the animation of an object node
*/
void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, void *sp34, u32 animAccel) {
void **animSegmented = segmented_to_virtual(sp34);
struct Animation *anim = segmented_to_virtual(animSegmented[0]);
void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr, u32 animAccel) {
struct Animation **animSegmented = segmented_to_virtual(animPtrAddr);
struct Animation *anim = segmented_to_virtual(*animSegmented);
if (graphNode->unk38.curAnim != anim) {
graphNode->unk38.curAnim = anim;

View File

@@ -181,8 +181,9 @@ struct GraphNodeSwitchCase
/*0x1E*/ s16 selectedCase;
};
/** GraphNode that specifies the location and aim of the camera.
* When the roll is 0, the up vector is (0, 1, 0).
/**
* GraphNode that specifies the location and aim of the camera.
* When the roll is 0, the up vector is (0, 1, 0).
*/
struct GraphNodeCamera
{
@@ -386,7 +387,7 @@ struct GraphNodeObject *init_graph_node_object(struct AllocOnlyPool *pool, struc
struct GraphNode *sp20, Vec3f pos, Vec3s angle, Vec3f scale);
struct GraphNodeCullingRadius *init_graph_node_culling_radius(struct AllocOnlyPool *pool, struct GraphNodeCullingRadius *sp1c,
s16 sp22);
struct GraphNodeAnimatedPart *init_graph_node_animated_part(struct AllocOnlyPool *pool, struct GraphNodeAnimatedPart * graphNode,
struct GraphNodeAnimatedPart *init_graph_node_animated_part(struct AllocOnlyPool *pool, struct GraphNodeAnimatedPart *graphNode,
s32 drawingLayer, void *displayList, Vec3s relativePos);
struct GraphNodeBillboard *init_graph_node_billboard(struct AllocOnlyPool *pool,
struct GraphNodeBillboard *graphNode, s32 drawingLayer, void *displayList, Vec3s sp28);
@@ -401,7 +402,7 @@ struct GraphNodeGenerated *init_graph_node_generated(struct AllocOnlyPool *pool,
struct GraphNodeBackground *init_graph_node_background(struct AllocOnlyPool *pool, struct GraphNodeBackground *sp1c,
u16 sp22, GraphNodeFunc sp24, s32 sp28);
struct GraphNodeHeldObject *init_graph_node_held_object(struct AllocOnlyPool *pool, struct GraphNodeHeldObject *sp1c,
s32 sp20, Vec3s sp24, GraphNodeFunc sp28, s32 sp2c);
struct GraphNodeObject *objNode, Vec3s translation, GraphNodeFunc nodeFunc, s32 unused);
struct GraphNode *geo_add_child(struct GraphNode *, struct GraphNode *);
struct GraphNode *geo_remove_child(struct GraphNode *);
@@ -413,8 +414,8 @@ void geo_call_global_function_nodes(struct GraphNode *graphNode, s32 sp1c);
void geo_reset_object_node(struct GraphNodeObject *sp20);
void geo_obj_init(struct GraphNodeObject *sp18, void *sp1c, Vec3f sp20, Vec3s sp24);
void geo_obj_init_spawninfo(struct GraphNodeObject *sp18, struct SpawnInfo *sp1c);
void geo_obj_init_animation(struct GraphNodeObject *, void *);
void geo_obj_init_animation_accel(struct GraphNodeObject *sp30, void *sp34, u32 sp38);
void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr);
void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr, u32 animAccel);
s32 retrieve_animation_index(s32 a0, u16 **a1);

View File

@@ -20,7 +20,7 @@
#include "goddard/renderer.h"
#include "game/profiler.h"
#define CMD_GET(type, offset) (*(type *) (offset + (u8 *) sCurrentCmd))
#define CMD_GET(type, offset) (*(type *) ((offset) + (u8 *) sCurrentCmd))
// These are equal
#define CMD_NEXT ((struct LevelCommand *) ((u8 *) sCurrentCmd + sCurrentCmd->size))
@@ -34,7 +34,7 @@ struct LevelCommand {
enum ScriptStatus { SCRIPT_RUNNING = 1, SCRIPT_PAUSED = 0, SCRIPT_PAUSED2 = -1 };
static u32 sStack[32];
static uintptr_t sStack[32];
static struct AllocOnlyPool *sLevelPool = NULL;
@@ -43,8 +43,8 @@ static u16 sDelayFrames2 = 0;
static s16 sCurrAreaIndex = -1;
static u32 *sStackTop = sStack;
static u32 *sStackBase = NULL;
static uintptr_t *sStackTop = sStack;
static uintptr_t *sStackBase = NULL;
static s16 sScriptStatus;
static s32 sRegister;
@@ -85,32 +85,33 @@ static s32 eval_script_op(s8 op, s32 arg) {
static void level_cmd_load_and_execute(void) {
main_pool_push_state();
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8), MEMORY_POOL_LEFT);
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)), MEMORY_POOL_LEFT);
*sStackTop++ = (u32) NEXT_CMD;
*sStackTop++ = (u32) sStackBase;
*sStackTop++ = (uintptr_t) NEXT_CMD;
*sStackTop++ = (uintptr_t) sStackBase;
sStackBase = sStackTop;
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 12));
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 4 + 2 * sizeof(void *)));
}
static void level_cmd_exit_and_execute(void) {
void *targetAddr = CMD_GET(void *, 12);
void *targetAddr = CMD_GET(void *, 4 + 2 * sizeof(void *));
main_pool_pop_state();
main_pool_push_state();
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8), MEMORY_POOL_LEFT);
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)),
MEMORY_POOL_LEFT);
sStackTop = sStackBase;
sCurrentCmd = (struct LevelCommand *) segmented_to_virtual(targetAddr);
sCurrentCmd = segmented_to_virtual(targetAddr);
}
static void level_cmd_exit(void) {
main_pool_pop_state();
sStackTop = sStackBase;
sStackBase = (u32 *) *(--sStackTop);
sStackBase = (uintptr_t *) *(--sStackTop);
sCurrentCmd = (struct LevelCommand *) *(--sStackTop);
}
@@ -137,12 +138,12 @@ static void level_cmd_sleep2(void) {
}
static void level_cmd_jump(void) {
sCurrentCmd = (struct LevelCommand *) segmented_to_virtual(CMD_GET(void *, 4));
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 4));
}
static void level_cmd_jump_and_link(void) {
*sStackTop++ = (u32) NEXT_CMD;
sCurrentCmd = (struct LevelCommand *) segmented_to_virtual(CMD_GET(void *, 4));
*sStackTop++ = (uintptr_t) NEXT_CMD;
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 4));
}
static void level_cmd_return(void) {
@@ -150,7 +151,7 @@ static void level_cmd_return(void) {
}
static void level_cmd_jump_and_link_push_arg(void) {
*sStackTop++ = (u32) NEXT_CMD;
*sStackTop++ = (uintptr_t) NEXT_CMD;
*sStackTop++ = CMD_GET(s16, 2);
sCurrentCmd = CMD_NEXT;
}
@@ -170,7 +171,7 @@ static void level_cmd_jump_repeat(void) {
}
static void level_cmd_loop_begin(void) {
*sStackTop++ = (u32) NEXT_CMD;
*sStackTop++ = (uintptr_t) NEXT_CMD;
*sStackTop++ = 0;
sCurrentCmd = CMD_NEXT;
}
@@ -186,7 +187,7 @@ static void level_cmd_loop_until(void) {
static void level_cmd_jump_if(void) {
if (eval_script_op(CMD_GET(u8, 2), CMD_GET(s32, 4)) != 0) {
sCurrentCmd = (struct LevelCommand *) segmented_to_virtual(CMD_GET(void *, 8));
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 8));
} else {
sCurrentCmd = CMD_NEXT;
}
@@ -194,8 +195,8 @@ static void level_cmd_jump_if(void) {
static void level_cmd_jump_and_link_if(void) {
if (eval_script_op(CMD_GET(u8, 2), CMD_GET(s32, 4)) != 0) {
*sStackTop++ = (u32) NEXT_CMD;
sCurrentCmd = (struct LevelCommand *) segmented_to_virtual(CMD_GET(void *, 8));
*sStackTop++ = (uintptr_t) NEXT_CMD;
sCurrentCmd = segmented_to_virtual(CMD_GET(void *, 8));
} else {
sCurrentCmd = CMD_NEXT;
}
@@ -263,27 +264,29 @@ static void level_cmd_pop_pool_state(void) {
}
static void level_cmd_load_to_fixed_address(void) {
load_to_fixed_pool_addr(CMD_GET(void *, 4), CMD_GET(void *, 8), CMD_GET(void *, 12));
load_to_fixed_pool_addr(CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)),
CMD_GET(void *, 4 + 2 * sizeof(void *)));
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_load_segment(void) {
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8), MEMORY_POOL_LEFT);
static void level_cmd_load_raw(void) {
load_segment(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)),
MEMORY_POOL_LEFT);
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_load_compressed_segment(void) {
load_segment_decompress(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8));
static void level_cmd_load_mio0(void) {
load_segment_decompress(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)));
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_19(void) {
static void level_cmd_load_mario_head(void) {
// TODO: Fix these hardcoded sizes
void *addr = main_pool_alloc(0xE1000, MEMORY_POOL_LEFT);
if (addr != NULL) {
gdm_init(addr, 0xE1000);
gd_add_to_heap(gZBuffer, 0x25800);
gd_add_to_heap(gFrameBuffer0, 0x70800);
gd_add_to_heap(gZBuffer, SCREEN_WIDTH * SCREEN_HEIGHT * 2); // 0x25800
gd_add_to_heap(gFrameBuffer0, SCREEN_WIDTH * SCREEN_HEIGHT * 2 * 3); // 0x70800
gdm_setup();
gdm_maketestdl(CMD_GET(s16, 2));
} else {
@@ -292,8 +295,8 @@ static void level_cmd_19(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_1A(void) {
func_80278304(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 8));
static void level_cmd_load_mio0_texture(void) {
func_80278304(CMD_GET(s16, 2), CMD_GET(void *, 4), CMD_GET(void *, 4 + sizeof(void *)));
sCurrentCmd = CMD_NEXT;
}
@@ -368,7 +371,7 @@ static void level_cmd_end_area(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_21(void) {
static void level_cmd_load_model_from_dl(void) {
s16 val1 = CMD_GET(s16, 2) & 0x0FFF;
s16 val2 = CMD_GET(u16, 2) >> 12;
void *val3 = CMD_GET(void *, 4);
@@ -381,7 +384,7 @@ static void level_cmd_21(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_22(void) {
static void level_cmd_load_model_from_geo(void) {
s16 arg0 = CMD_GET(s16, 2);
void *arg1 = CMD_GET(void *, 4);
@@ -401,8 +404,8 @@ static void level_cmd_23(void) {
s16 model = CMD_GET(s16, 2) & 0x0FFF;
s16 arg0H = CMD_GET(u16, 2) >> 12;
void *arg1 = CMD_GET(void *, 4);
arg2.i = CMD_GET(s32, 8); // store the raw word as a union s32. this allows is to reinterpret the
// contents as a f32 without the value being converted implicitly.
// load an f32, but using an integer load instruction for some reason (hence the union)
arg2.i = CMD_GET(s32, 4 + sizeof(void *));
if (model < 256) {
// GraphNodeScale has a GraphNode at the top. This
@@ -603,7 +606,7 @@ static void level_cmd_set_rooms(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_39(void) {
static void level_cmd_set_macro_objects(void) {
if (sCurrAreaIndex != -1) {
gAreas[sCurrAreaIndex].macroObjects = segmented_to_virtual(CMD_GET(void *, 4));
}
@@ -655,7 +658,7 @@ static void level_cmd_nop(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_30(void) {
static void level_cmd_show_dialog(void) {
if (sCurrAreaIndex != -1) {
if (CMD_GET(u8, 2) < 2) {
gAreas[sCurrAreaIndex].dialog[CMD_GET(u8, 2)] = CMD_GET(u8, 3);
@@ -748,18 +751,18 @@ static void (*LevelScriptJumpTable[])(void) = {
/*14*/ level_cmd_push_pool_state,
/*15*/ level_cmd_pop_pool_state,
/*16*/ level_cmd_load_to_fixed_address,
/*17*/ level_cmd_load_segment,
/*18*/ level_cmd_load_compressed_segment,
/*19*/ level_cmd_19,
/*1A*/ level_cmd_1A,
/*17*/ level_cmd_load_raw,
/*18*/ level_cmd_load_mio0,
/*19*/ level_cmd_load_mario_head,
/*1A*/ level_cmd_load_mio0_texture,
/*1B*/ level_cmd_init_level,
/*1C*/ level_cmd_clear_level,
/*1D*/ level_cmd_alloc_level_pool,
/*1E*/ level_cmd_free_level_pool,
/*1F*/ level_cmd_begin_area,
/*20*/ level_cmd_end_area,
/*21*/ level_cmd_21,
/*22*/ level_cmd_22,
/*21*/ level_cmd_load_model_from_dl,
/*22*/ level_cmd_load_model_from_geo,
/*23*/ level_cmd_23,
/*24*/ level_cmd_place_object,
/*25*/ level_cmd_init_mario,
@@ -773,7 +776,7 @@ static void (*LevelScriptJumpTable[])(void) = {
/*2D*/ level_cmd_2D,
/*2E*/ level_cmd_set_terrain_data,
/*2F*/ level_cmd_set_rooms,
/*30*/ level_cmd_30,
/*30*/ level_cmd_show_dialog,
/*31*/ level_cmd_set_terrain_type,
/*32*/ level_cmd_nop,
/*33*/ level_cmd_set_transition,
@@ -782,7 +785,7 @@ static void (*LevelScriptJumpTable[])(void) = {
/*36*/ level_cmd_set_music,
/*37*/ level_cmd_set_menu_music,
/*38*/ level_cmd_38,
/*39*/ level_cmd_39,
/*39*/ level_cmd_set_macro_objects,
/*3A*/ level_cmd_3A,
/*3B*/ level_cmd_create_whirlpool,
/*3C*/ level_cmd_get_or_set_var,

View File

@@ -522,7 +522,7 @@ void alloc_surface_pools(void) {
sSurfacePool = main_pool_alloc(sSurfacePoolSize * sizeof(struct Surface), MEMORY_POOL_LEFT);
gCCMEnteredSlide = 0;
func_802DA4DC();
reset_red_coins_collected();
}
/**

View File

@@ -30,8 +30,8 @@ s16 gCurrCourseNum;
s16 gCurrActNum;
s16 gCurrAreaIndex;
s16 gSavedCourseNum;
s16 D_8033A75E;
s16 D_8033A760;
s16 gPauseScreenMode;
s16 gSaveOptSelectIndex;
struct SpawnInfo *gMarioSpawnInfo = &gPlayerSpawnInfos[0];
struct GraphNode **gLoadedGraphNodes = D_8033A160;
@@ -354,27 +354,27 @@ void render_game(void) {
gSPViewport(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&D_8032CF00));
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, 320,
240 - BORDER_HEIGHT);
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH,
SCREEN_HEIGHT - BORDER_HEIGHT);
render_hud();
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
render_text_labels();
do_cutscene_handler();
print_displaying_credits_entry();
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, 320,
240 - BORDER_HEIGHT);
D_8033A75E = func_802DCD98();
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH,
SCREEN_HEIGHT - BORDER_HEIGHT);
gPauseScreenMode = render_menus_and_dialogs();
if (D_8033A75E != 0) {
D_8033A760 = D_8033A75E;
if (gPauseScreenMode != 0) {
gSaveOptSelectIndex = gPauseScreenMode;
}
if (D_8032CE78 != NULL) {
make_viewport_clip_rect(D_8032CE78);
} else
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, 320,
240 - BORDER_HEIGHT);
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, BORDER_HEIGHT, SCREEN_WIDTH,
SCREEN_HEIGHT - BORDER_HEIGHT);
if (gWarpTransition.isActive) {
if (gWarpTransDelay == 0) {

View File

@@ -248,8 +248,8 @@ extern s16 gCurrCourseNum;
extern s16 gCurrActNum;
extern s16 gCurrAreaIndex;
extern s16 gSavedCourseNum;
extern s16 D_8033A75E;
extern s16 D_8033A760;
extern s16 gPauseScreenMode;
extern s16 gSaveOptSelectIndex;
extern struct SpawnInfo *gMarioSpawnInfo;

View File

@@ -101,15 +101,15 @@ extern s32 gDialogResponse;
extern s32 gCutsceneActive;
extern u8 gCutsceneNumber;
extern s8 *D_8032F96C[];
extern u32 bowser_seg6_unkmoveshorts_060576FC[];
extern u32 blue_fish_seg3_anims_0301C2B0[];
extern u32 cyan_fish_seg6_anims_0600E264[];
extern u32 blue_fish_seg3_anims_0301C2B0[];
extern s16 bowser_seg6_unkmoveshorts_060576FC[];
extern struct Animation *blue_fish_seg3_anims_0301C2B0[];
extern struct Animation *cyan_fish_seg6_anims_0600E264[];
extern struct Animation *blue_fish_seg3_anims_0301C2B0[];
void func_802A8D18(f32, f32, s32);
s32 mario_moving_fast_enough_to_make_piranha_plant_bite(void);
void func_802C49E0(void);
void obj_set_secondary_camera_focus(void);
s32 D_8032F0C0[] = { SAVE_FLAG_HAVE_WING_CAP, SAVE_FLAG_HAVE_METAL_CAP, SAVE_FLAG_HAVE_VANISH_CAP };

Some files were not shown because too many files have changed in this diff Show More