You've already forked ultrasm64-2
mirror of
https://github.com/HackerN64/ultrasm64-2.git
synced 2026-01-21 10:38:08 -08:00
Refresh 2
This commit is contained in:
@@ -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++) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user