mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-03 22:44:30 +00:00
z_message_PAL, message_data_static and surrounding doc (#996)
* Initial progress on z_message_PAL, very messy * Fix merge * Some more progress * Fix merge * More z_message_PAL * Small progress * More small progress * message_data_static files OK * Prepare z_message_tables * Matched another function, small updates * Attempt to use asm-processor static-symbols branch * Refactor text id declarations * Begin large text codes parser function * Fix merge * Refactor done * Build OK, add color and highscore names * Remove encoded text headers and automatically encode during build * Fix kanfont * Various cleanups * DISP macros * Another match aside data * Further progress * Small improvements * Deduplicate magic values for text control codes, small improvements * Tiny progress * Minor cleanups * Clean up z_message_PAL comment * Progress on large functions * Further progress on large functions * Changes to mkldscript to link .data in the .rodata section * data OK * Few improvements * Use gDPLoadTextureBlock macros where appropriate * rm z_message_tables, progress on large functions * 2 more matches * Improvements * Small progress * More progress on big function * progress * match func_80107980 * match Message_Update * match func_8010BED8 * done * Progress on remaining large functions * Small progress on largest function * Another match, extract text and move to assets, improve text build system * Small nonmatchings improvements * docs wip * Largest function maybe equivalent * Fix merge * Document do_action values, largest function is almost instruction-matching * Rename NAVI do_action to NONE, as that appears to be how that value is used in practice * Fix merge * one match * Last function is instruction-matching * Fix * Improvements thanks to engineer124 * Stack matched thanks to petrie911, now just a/v/low t regalloc issues, some cleanup * More variables labeled, use text state enum everywhere * More labels and names * Fix * Actor_IsTalking -> Actor_TalkRequested * Match func_8010C39C and remove unused asm * More docs * Mostly ocarina related docs * All msgModes named * Fix assetclean * Cleanup * Extraction fixes and headers * Suggestions * Review suggestions * Change text extraction again, only extract if the headers do not already exist * Fix * Use ast for charmap, fix assetclean for real this time * Review suggestions * BGM ids and ran formatter * Review comments * rename include_readonly to include_data_with_rodata * Remove leading 0s in number directives * Review suggestions for message_data_static * textbox pos enum comments, rename several enum names from Message to TextBox Co-authored-by: Thar0 <maximilianc64@gmail.com> Co-authored-by: Zelllll <56516451+Zelllll@users.noreply.github.com> Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain> Co-authored-by: Roman971 <romanlasnier@hotmail.com>
This commit is contained in:
parent
03636166b3
commit
a497f33bda
216 changed files with 7052 additions and 16801 deletions
|
@ -213,7 +213,8 @@ void AudioLoad_InitSampleDmaBuffers(s32 arg0) {
|
|||
t2 = 3 * gAudioContext.numNotes * gAudioContext.audioBufferParameters.specUnk4;
|
||||
for (i = 0; i < t2; i++) {
|
||||
dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
|
||||
dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.notesAndBuffersPool, gAudioContext.sampleDmaBufSize);
|
||||
dma->ramAddr =
|
||||
AudioHeap_AllocAttemptExternal(&gAudioContext.notesAndBuffersPool, gAudioContext.sampleDmaBufSize);
|
||||
if (dma->ramAddr == NULL) {
|
||||
break;
|
||||
} else {
|
||||
|
@ -243,7 +244,8 @@ void AudioLoad_InitSampleDmaBuffers(s32 arg0) {
|
|||
|
||||
for (j = 0; j < gAudioContext.numNotes; j++) {
|
||||
dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
|
||||
dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.notesAndBuffersPool, gAudioContext.sampleDmaBufSize);
|
||||
dma->ramAddr =
|
||||
AudioHeap_AllocAttemptExternal(&gAudioContext.notesAndBuffersPool, gAudioContext.sampleDmaBufSize);
|
||||
if (dma->ramAddr == NULL) {
|
||||
break;
|
||||
} else {
|
||||
|
|
|
@ -82,9 +82,6 @@ typedef enum {
|
|||
|
||||
#define SCROLL_PRINT_BUF_SIZE 25
|
||||
|
||||
#define OCA_SONGS_SCARECROW 12
|
||||
#define OCA_SONGS_MEMORYGAME 13
|
||||
|
||||
#define SFX_PLAYER_CHANNEL_OCARINA 13
|
||||
|
||||
extern f32 D_8012F6B4[]; // from audio_synthesis
|
||||
|
@ -219,8 +216,8 @@ u8 sOcaMinigameAppendPos = 0;
|
|||
u8 sOcaMinigameEndPos = 0;
|
||||
u8 sOcaMinigameNoteCnts[] = { 5, 6, 8 };
|
||||
|
||||
OcarinaNote sOcarinaSongs[14][20] = {
|
||||
// minuet
|
||||
OcarinaNote sOcarinaSongs[OCARINA_SONG_MAX][20] = {
|
||||
// Minuet
|
||||
{
|
||||
{ 2, 0, 18, 86, 0, 0, 0 },
|
||||
{ 14, 0, 18, 92, 0, 0, 0 },
|
||||
|
@ -231,7 +228,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 86, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// bolero
|
||||
// Bolero
|
||||
{
|
||||
{ 5, 0, 15, 80, 0, 0, 0 },
|
||||
{ 2, 0, 15, 72, 0, 0, 0 },
|
||||
|
@ -244,7 +241,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 66, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// serenade
|
||||
// Serenade
|
||||
{
|
||||
{ 2, 0, 36, 60, 0, 0, 0 },
|
||||
{ 5, 0, 36, 78, 0, 0, 0 },
|
||||
|
@ -255,7 +252,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// requiem
|
||||
// Requiem
|
||||
{
|
||||
{ 2, 0, 45, 88, 0, 0, 0 },
|
||||
{ 5, 0, 23, 86, 0, 0, 0 },
|
||||
|
@ -266,7 +263,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 94, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// nocturne
|
||||
// Nocturne
|
||||
{
|
||||
{ 11, 0, 36, 88, 0, 0, 0 },
|
||||
{ 9, 0, 33, 84, 0, 0, 0 },
|
||||
|
@ -279,7 +276,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 96, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// prelude
|
||||
// Prelude
|
||||
{
|
||||
{ 14, 0, 15, 84, 0, 0, 0 },
|
||||
{ 9, 0, 45, 88, 0, 0, 0 },
|
||||
|
@ -291,7 +288,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// sarias
|
||||
// Sarias
|
||||
{
|
||||
{ 5, 0, 17, 84, 0, 0, 0 },
|
||||
{ 9, 0, 17, 88, 0, 0, 0 },
|
||||
|
@ -302,7 +299,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// epona
|
||||
// Epona
|
||||
{
|
||||
{ 14, 0, 18, 84, 0, 0, 0 },
|
||||
{ 11, 0, 18, 88, 0, 0, 0 },
|
||||
|
@ -313,7 +310,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// lullaby
|
||||
// Lullaby
|
||||
{
|
||||
{ 11, 0, 51, 84, 0, 0, 0 },
|
||||
{ 14, 0, 25, 88, 0, 0, 0 },
|
||||
|
@ -324,7 +321,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// suns
|
||||
// Suns
|
||||
{
|
||||
{ 9, 0, 12, 84, 0, 0, 0 },
|
||||
{ 5, 0, 13, 88, 0, 0, 0 },
|
||||
|
@ -336,7 +333,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// song of time
|
||||
// Song of Time
|
||||
{
|
||||
{ 9, 0, 32, 84, 0, 0, 0 },
|
||||
{ 2, 0, 65, 88, 0, 0, 0 },
|
||||
|
@ -347,7 +344,7 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// storms
|
||||
// Storms
|
||||
{
|
||||
{ 2, 0, 11, 84, 0, 0, 0 },
|
||||
{ 5, 0, 11, 88, 0, 0, 0 },
|
||||
|
@ -358,13 +355,13 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
{ 0xFF, 0, 0, 90, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// scarecrow
|
||||
// Scarecrow
|
||||
{
|
||||
{ 2, 0, 3, 0, 0, 0, 0 },
|
||||
{ 0xFF, 0, 0, 255, 0, 0, 0 },
|
||||
},
|
||||
|
||||
// OCA_SONGS_MEMORYGAME
|
||||
// Lost Woods Memory Game
|
||||
{
|
||||
{ 2, 0, 3, 0, 0, 0, 0 },
|
||||
{ 0xFF, 0, 0, 0, 0, 0, 0 },
|
||||
|
@ -372,9 +369,13 @@ OcarinaNote sOcarinaSongs[14][20] = {
|
|||
};
|
||||
|
||||
OcarinaNote* sPlaybackSong = sOcarinaSongs[0];
|
||||
u8 D_80131844[14] = { 0, 3, 2, 1, 3, 2, 1, 0, 1, 0, 1, 2, 3, 0 };
|
||||
u8* gFrogsSongPtr = D_80131844;
|
||||
u8 D_80131858 = 0; // "REC"
|
||||
u8 sFrogsSongNotes[14] = {
|
||||
OCARINA_NOTE_A, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_A,
|
||||
};
|
||||
u8* gFrogsSongPtr = sFrogsSongNotes;
|
||||
u8 sRecordingState = 0;
|
||||
u8 sRecordSongPos = 0;
|
||||
u32 D_80131860 = 0;
|
||||
u8 D_80131864 = 0;
|
||||
|
@ -392,26 +393,137 @@ OcarinaNote sPierresSong[108] = {
|
|||
};
|
||||
OcarinaNote* gScarecrowCustomSongPtr = sPierresSong;
|
||||
|
||||
u8* gScarecrowSpawnSongPtr = (u8*)&sOcarinaSongs[OCA_SONGS_SCARECROW];
|
||||
OcarinaNote* D_80131BEC = sOcarinaSongs[OCA_SONGS_MEMORYGAME];
|
||||
u8* gScarecrowSpawnSongPtr = (u8*)&sOcarinaSongs[OCARINA_SONG_SCARECROW];
|
||||
OcarinaNote* D_80131BEC = sOcarinaSongs[OCARINA_SONG_MEMORY_GAME];
|
||||
u8 sNoteValueIndexMap[16] = { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 5, 3, 3, 4, 4, 4 };
|
||||
|
||||
// clang-format off
|
||||
OcarinaSongInfo gOcarinaSongNotes[14] = {
|
||||
{ 6, { 0, 4, 3, 2, 3, 2 }},
|
||||
{ 8, { 1, 0, 1, 0, 2, 1, 2, 1 }},
|
||||
{ 5, { 0, 1, 2, 2, 3 }},
|
||||
{ 6, { 0, 1, 0, 2, 1, 0 }},
|
||||
{ 7, { 3, 2, 2, 0, 3, 2, 1 }},
|
||||
{ 6, { 4, 2, 4, 2, 3, 4 }},
|
||||
{ 6, { 1, 2, 3, 1, 2, 3 }},
|
||||
{ 6, { 4, 3, 2, 4, 3, 2 }},
|
||||
{ 6, { 3, 4, 2, 3, 4, 2 }},
|
||||
{ 6, { 2, 1, 4, 2, 1, 4 }},
|
||||
{ 6, { 2, 0, 1, 2, 0, 1 }},
|
||||
{ 6, { 0, 1, 4, 0, 1, 4 }},
|
||||
{ 8, { 0, 0, 0, 0, 0, 0, 0, 0 }},
|
||||
{ 0, { 0, 0, 0, 0, 0, 0, 0, 0 }},
|
||||
OcarinaSongInfo gOcarinaSongNotes[OCARINA_SONG_MAX] = {
|
||||
// Minuet
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
} },
|
||||
// Bolero
|
||||
{ 8,
|
||||
{
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
} },
|
||||
// Serenade
|
||||
{ 5,
|
||||
{
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
} },
|
||||
// Requiem
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_A,
|
||||
} },
|
||||
// Nocturne
|
||||
{ 7,
|
||||
{
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
} },
|
||||
// Prelude
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_UP,
|
||||
} },
|
||||
// Sarias
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
} },
|
||||
// Epona
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
} },
|
||||
// Lullaby
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_LEFT,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
} },
|
||||
// Suns
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_UP,
|
||||
} },
|
||||
// Song of Time
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_RIGHT,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
} },
|
||||
// Storms
|
||||
{ 6,
|
||||
{
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_UP,
|
||||
OCARINA_NOTE_A,
|
||||
OCARINA_NOTE_C_DOWN,
|
||||
OCARINA_NOTE_C_UP,
|
||||
} },
|
||||
// Scarecrow
|
||||
{ 8, { 0, 0, 0, 0, 0, 0, 0, 0 } },
|
||||
// Lost Woods Memory Game
|
||||
{ 0, { 0, 0, 0, 0, 0, 0, 0, 0 } },
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -454,9 +566,9 @@ u8 D_8016B9F3;
|
|||
u8 D_8016B9F4;
|
||||
u16 D_8016B9F6;
|
||||
|
||||
OcarinaStaff D_8016B9F8; // playing along staff?
|
||||
OcarinaStaff sDisplayedStaff; // displayed staff?
|
||||
OcarinaStaff D_8016BA00; // ?? note and status not updated, pos updated as you play
|
||||
OcarinaStaff sPlayingStaff;
|
||||
OcarinaStaff sDisplayedStaff;
|
||||
OcarinaStaff sRecordingStaff;
|
||||
u32 D_8016BA04;
|
||||
typedef struct {
|
||||
s8 x;
|
||||
|
@ -474,7 +586,7 @@ u8 sOcarinaHasStartedSong;
|
|||
u8 sOcarinaSongNoteStartIdx;
|
||||
u8 sOcarinaSongCnt;
|
||||
u16 sOcarinaAvailSongs;
|
||||
u8 D_8016BA2E;
|
||||
u8 sStaffPlayingPos;
|
||||
u16 sLearnSongPos[0x10];
|
||||
u16 D_8016BA50[0x10];
|
||||
u16 D_8016BA70[0x10];
|
||||
|
@ -547,7 +659,7 @@ f32 Audio_OcaAdjStick(s8 inp) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
u8 func_800ECAF0(void) {
|
||||
u8 Audio_OcaGetPlayingState(void) {
|
||||
u8 ret;
|
||||
|
||||
if (D_80131878 != 0) {
|
||||
|
@ -585,7 +697,7 @@ void func_800ECB7C(u8 songIdx) {
|
|||
while (savedSongIdx < 8 && scarecrowSongIdx < 0x10) {
|
||||
noteIdx = sOcarinaSongs[songIdx][scarecrowSongIdx++].noteIdx;
|
||||
if (noteIdx != 0xFF) {
|
||||
gOcarinaSongNotes[OCA_SONGS_SCARECROW].notesIdx[savedSongIdx++] = sNoteValueIndexMap[noteIdx];
|
||||
gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[savedSongIdx++] = sNoteValueIndexMap[noteIdx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -594,15 +706,15 @@ void func_800ECB7C(u8 songIdx) {
|
|||
void func_800ECC04(u16 flg) {
|
||||
u8 i;
|
||||
|
||||
if ((sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume != 0xFF) && ((flg & 0xFFF) == 0xFFF)) {
|
||||
if ((sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF) && ((flg & 0xFFF) == 0xFFF)) {
|
||||
flg |= 0x1000;
|
||||
}
|
||||
|
||||
if ((flg == 0xCFFF) && (sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume != 0xFF)) {
|
||||
if ((flg == 0xCFFF) && (sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF)) {
|
||||
flg = 0xDFFF;
|
||||
}
|
||||
|
||||
if ((flg == 0xFFF) && (sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume != 0xFF)) {
|
||||
if ((flg == 0xFFF) && (sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume != 0xFF)) {
|
||||
flg = 0x1FFF;
|
||||
}
|
||||
|
||||
|
@ -617,8 +729,8 @@ void func_800ECC04(u16 flg) {
|
|||
D_8013187C = 8;
|
||||
sOcarinaHasStartedSong = 0;
|
||||
D_80131878 = 0;
|
||||
D_8016BA2E = 0;
|
||||
D_8016B9F8.state = func_800ECAF0();
|
||||
sStaffPlayingPos = 0;
|
||||
sPlayingStaff.state = Audio_OcaGetPlayingState();
|
||||
sOcarinaInpEnabled = 1;
|
||||
D_80130F4C = 0;
|
||||
for (i = 0; i < 0xE; i++) {
|
||||
|
@ -637,8 +749,7 @@ void func_800ECC04(u16 flg) {
|
|||
}
|
||||
|
||||
if (flg & 0xD000) {
|
||||
func_800ECB7C(0xC);
|
||||
return;
|
||||
func_800ECB7C(OCARINA_SONG_SCARECROW);
|
||||
}
|
||||
} else {
|
||||
D_80130F3C = 0;
|
||||
|
@ -707,7 +818,8 @@ void func_800ECDF8(void) {
|
|||
if (sCurOcarinaBtnVal != sLearnSongExpectedNote[i]) {
|
||||
sOcarinaAvailSongs ^= sh;
|
||||
}
|
||||
while (prevNote->noteIdx == note->noteIdx || (note->noteIdx == 0xFF && note->unk_02 != 0)) {
|
||||
while (prevNote->noteIdx == note->noteIdx ||
|
||||
(note->noteIdx == OCARINA_NOTE_INVALID && note->unk_02 != 0)) {
|
||||
D_8016BA70[i] += note->unk_02;
|
||||
prevNote = &sOcarinaSongs[i][sLearnSongPos[i]];
|
||||
note = &sOcarinaSongs[i][sLearnSongPos[i] + 1];
|
||||
|
@ -722,7 +834,7 @@ void func_800ECDF8(void) {
|
|||
}
|
||||
}
|
||||
|
||||
if (sOcarinaAvailSongs == 0 && D_8016BA2E >= D_8013187C) {
|
||||
if (sOcarinaAvailSongs == 0 && sStaffPlayingPos >= D_8013187C) {
|
||||
sOcarinaInpEnabled = 0;
|
||||
if (CHECK_BTN_ANY(D_80130F3C, BTN_B) && sCurOcarinaBtnVal == sOcarinaSongs[i][0].noteIdx) {
|
||||
D_80130F4C = D_80130F3C;
|
||||
|
@ -734,7 +846,7 @@ void func_800ECDF8(void) {
|
|||
|
||||
if (!inputChanged) {
|
||||
sLearnSongLastBtn = sCurOcarinaBtnVal;
|
||||
D_8016BA2E += sp57 + 1;
|
||||
sStaffPlayingPos += sp57 + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -754,9 +866,9 @@ void func_800ED200(void) {
|
|||
|
||||
if (sOcarinaHasStartedSong) {
|
||||
if ((sPrevOcarinaNoteVal != sCurOcarinaBtnVal) && (sCurOcarinaBtnVal != 0xFF)) {
|
||||
D_8016BA2E++;
|
||||
if (D_8016BA2E >= 9) {
|
||||
D_8016BA2E = 1;
|
||||
sStaffPlayingPos++;
|
||||
if (sStaffPlayingPos >= 9) {
|
||||
sStaffPlayingPos = 1;
|
||||
}
|
||||
|
||||
if (sOcarinaSongAppendPos == 8) {
|
||||
|
@ -839,17 +951,17 @@ void func_800ED458(s32 arg0) {
|
|||
sCurOcarinaBtnIdx = 4;
|
||||
}
|
||||
|
||||
if (sCurOcarinaBtnVal != 0xFF && sCurOcarinaBtnPress & 0x10 && D_80131858 != 2) {
|
||||
if (sCurOcarinaBtnVal != 0xFF && sCurOcarinaBtnPress & 0x10 && sRecordingState != 2) {
|
||||
sCurOcarinaBtnIdx += 0x80;
|
||||
sCurOcarinaBtnVal++;
|
||||
}
|
||||
|
||||
if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & 0x2000) && (D_80131858 != 2)) {
|
||||
if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & 0x2000) && (sRecordingState != 2)) {
|
||||
sCurOcarinaBtnIdx += 0x40;
|
||||
sCurOcarinaBtnVal--;
|
||||
}
|
||||
|
||||
if (D_80131858 != 2) {
|
||||
if (sRecordingState != 2) {
|
||||
D_80130F2C = sCurOcaStick.y;
|
||||
D_80130F24 = Audio_OcaAdjStick(D_80130F2C);
|
||||
|
||||
|
@ -874,7 +986,7 @@ void func_800ED848(u8 inputEnabled) {
|
|||
sOcarinaInpEnabled = inputEnabled;
|
||||
}
|
||||
|
||||
void func_800ED858(u8 arg0) {
|
||||
void Audio_OcaSetInstrument(u8 arg0) {
|
||||
if (D_80130F10 == arg0) {
|
||||
return;
|
||||
}
|
||||
|
@ -902,25 +1014,25 @@ void func_800ED858(u8 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_800ED93C(s8 songIdx, s8 arg1) {
|
||||
if (songIdx == 0) {
|
||||
void Audio_OcaSetSongPlayback(s8 songIdxPlusOne, s8 playbackState) {
|
||||
if (songIdxPlusOne == 0) {
|
||||
sPlaybackState = 0;
|
||||
Audio_StopSfxById(NA_SE_OC_OCARINA);
|
||||
return;
|
||||
}
|
||||
|
||||
if (songIdx < 0xF) {
|
||||
sPlaybackSong = sOcarinaSongs[songIdx - 1];
|
||||
if (songIdxPlusOne < 0xF) {
|
||||
sPlaybackSong = sOcarinaSongs[songIdxPlusOne - 1];
|
||||
} else {
|
||||
sPlaybackSong = sPierresSong;
|
||||
}
|
||||
|
||||
sPlaybackState = arg1;
|
||||
sPlaybackState = playbackState;
|
||||
sNotePlaybackTimer = 0;
|
||||
sDisplayedNoteValue = 0xFF;
|
||||
sPlaybackNotePos = 0;
|
||||
sStaffPlaybackPos = 0;
|
||||
while (sPlaybackSong[sPlaybackNotePos].noteIdx == 0xFF) {
|
||||
while (sPlaybackSong[sPlaybackNotePos].noteIdx == OCARINA_NOTE_INVALID) {
|
||||
sPlaybackNotePos++;
|
||||
}
|
||||
}
|
||||
|
@ -1020,7 +1132,7 @@ void func_800EDD68(u8 arg0) {
|
|||
s32 t;
|
||||
OcarinaNote* song;
|
||||
|
||||
if (D_80131858 == 1) {
|
||||
if (sRecordingState == 1) {
|
||||
song = gScarecrowCustomSongPtr;
|
||||
} else {
|
||||
song = D_80131BEC;
|
||||
|
@ -1058,26 +1170,26 @@ void func_800EDD68(u8 arg0) {
|
|||
|
||||
song[sRecordSongPos].unk_02 = 0;
|
||||
|
||||
if (D_80131858 == 2) {
|
||||
if (D_8016BA2E >= 8) {
|
||||
if (sRecordingState == 2) {
|
||||
if (sStaffPlayingPos >= 8) {
|
||||
for (i = 0; i < sRecordSongPos; i++) {
|
||||
song[i] = song[i + 1];
|
||||
}
|
||||
|
||||
func_800ECB7C(OCA_SONGS_MEMORYGAME);
|
||||
func_800ECB7C(OCARINA_SONG_MEMORY_GAME);
|
||||
|
||||
for (i = 0; i < OCA_SONGS_SCARECROW; i++) {
|
||||
for (i = 0; i < OCARINA_SONG_SCARECROW; i++) {
|
||||
for (j = 0; j < 9 - gOcarinaSongNotes[i].len; j++) {
|
||||
for (k = 0;
|
||||
k < gOcarinaSongNotes[i].len && k + j < 8 &&
|
||||
gOcarinaSongNotes[i].notesIdx[k] == gOcarinaSongNotes[OCA_SONGS_SCARECROW].notesIdx[k + j];
|
||||
gOcarinaSongNotes[i].notesIdx[k] == gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[k + j];
|
||||
k++) {
|
||||
;
|
||||
}
|
||||
|
||||
if (k == gOcarinaSongNotes[i].len) {
|
||||
D_80131858 = 0xFF;
|
||||
sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume = 0xFF;
|
||||
sRecordingState = 0xFF;
|
||||
sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1085,8 +1197,8 @@ void func_800EDD68(u8 arg0) {
|
|||
|
||||
i = 1;
|
||||
while (i < 8) {
|
||||
if (gOcarinaSongNotes[OCA_SONGS_SCARECROW].notesIdx[0] !=
|
||||
gOcarinaSongNotes[OCA_SONGS_SCARECROW].notesIdx[i]) {
|
||||
if (gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[0] !=
|
||||
gOcarinaSongNotes[OCARINA_SONG_SCARECROW].notesIdx[i]) {
|
||||
i = 9;
|
||||
} else {
|
||||
i++;
|
||||
|
@ -1094,35 +1206,35 @@ void func_800EDD68(u8 arg0) {
|
|||
}
|
||||
|
||||
if (i == 8) {
|
||||
D_80131858 = 0xFF;
|
||||
sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume = 0xFF;
|
||||
sRecordingState = 0xFF;
|
||||
sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < sRecordSongPos; i++) {
|
||||
sOcarinaSongs[OCA_SONGS_SCARECROW][i] = sOcarinaSongs[OCA_SONGS_MEMORYGAME][i];
|
||||
sOcarinaSongs[OCARINA_SONG_SCARECROW][i] = sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][i];
|
||||
}
|
||||
|
||||
sOcarinaInpEnabled = 0;
|
||||
} else {
|
||||
sOcarinaSongs[OCA_SONGS_SCARECROW][1].volume = 0xFF;
|
||||
sOcarinaSongs[OCARINA_SONG_SCARECROW][1].volume = 0xFF;
|
||||
}
|
||||
}
|
||||
D_80131858 = 0;
|
||||
sRecordingState = 0;
|
||||
}
|
||||
|
||||
// start custom song?
|
||||
/**
|
||||
* arg0 = 1, start
|
||||
* arg0 = 0, finish
|
||||
* arg0 = 2, also start?
|
||||
* recordingState = 1, start long scarecrows song
|
||||
* recordingState = 0, end
|
||||
* recordingState = 2, also scarecrows song
|
||||
*/
|
||||
void func_800EE170(u8 arg0) {
|
||||
if ((u32)arg0 == D_80131858) {
|
||||
void Audio_OcaSetRecordingState(u8 recordingState) {
|
||||
if ((u32)recordingState == sRecordingState) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (arg0 != 0) {
|
||||
if (recordingState != 0) {
|
||||
D_80131860 = D_8016BA04;
|
||||
D_80131864 = 0xFF;
|
||||
D_80131868 = 0x57;
|
||||
|
@ -1131,41 +1243,41 @@ void func_800EE170(u8 arg0) {
|
|||
D_80131874 = 0;
|
||||
sRecordSongPos = 0;
|
||||
sOcarinaInpEnabled = 1;
|
||||
D_8016BA2E = 0;
|
||||
sStaffPlayingPos = 0;
|
||||
D_8016BAA0 = sPierresSong[1];
|
||||
} else {
|
||||
if (sRecordSongPos == 0) {
|
||||
sPierresSong[1] = D_8016BAA0;
|
||||
} else {
|
||||
if (D_80131858 == 2) {
|
||||
D_8016BA2E = 1;
|
||||
if (sRecordingState == 2) {
|
||||
sStaffPlayingPos = 1;
|
||||
}
|
||||
|
||||
func_800EDD68(1);
|
||||
}
|
||||
|
||||
sOcarinaInpEnabled = 0;
|
||||
D_8016BA2E = 0;
|
||||
sStaffPlayingPos = 0;
|
||||
}
|
||||
|
||||
D_80131858 = arg0;
|
||||
sRecordingState = recordingState;
|
||||
}
|
||||
|
||||
void func_800EE29C(void) {
|
||||
D_8016BA00.state = D_80131858;
|
||||
D_8016BA00.pos = D_8016BA2E;
|
||||
if (D_80131858 == 0xFF) {
|
||||
D_80131858 = 0;
|
||||
void Audio_OcaUpdateRecordingStaff(void) {
|
||||
sRecordingStaff.state = sRecordingState;
|
||||
sRecordingStaff.pos = sStaffPlayingPos;
|
||||
if (sRecordingState == 0xFF) {
|
||||
sRecordingState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void func_800EE2D4(void) {
|
||||
D_8016B9F8.noteIdx = sCurOcarinaBtnIdx & 0x3F;
|
||||
D_8016B9F8.state = func_800ECAF0();
|
||||
D_8016B9F8.pos = D_8016BA2E;
|
||||
void Audio_OcaUpdatePlayingStaff(void) {
|
||||
sPlayingStaff.noteIdx = sCurOcarinaBtnIdx & 0x3F;
|
||||
sPlayingStaff.state = Audio_OcaGetPlayingState();
|
||||
sPlayingStaff.pos = sStaffPlayingPos;
|
||||
}
|
||||
|
||||
void func_800EE318(void) {
|
||||
void Audio_OcaUpdateDisplayedStaff(void) {
|
||||
if ((sDisplayedNoteValue & 0x3F) < 0x10) {
|
||||
sDisplayedStaff.noteIdx = Audio_OcaMapNoteValue(sDisplayedNoteValue);
|
||||
}
|
||||
|
@ -1181,42 +1293,42 @@ void func_800EE318(void) {
|
|||
}
|
||||
}
|
||||
|
||||
OcarinaStaff* func_800EE3C8(void) {
|
||||
return &D_8016BA00;
|
||||
OcarinaStaff* Audio_OcaGetRecordingStaff(void) {
|
||||
return &sRecordingStaff;
|
||||
}
|
||||
|
||||
OcarinaStaff* func_800EE3D4(void) {
|
||||
if (D_8016B9F8.state < 0xFE) {
|
||||
OcarinaStaff* Audio_OcaGetPlayingStaff(void) {
|
||||
if (sPlayingStaff.state < 0xFE) {
|
||||
D_80130F3C = 0;
|
||||
}
|
||||
return &D_8016B9F8;
|
||||
return &sPlayingStaff;
|
||||
}
|
||||
|
||||
OcarinaStaff* Audio_OcaGetDisplayStaff(void) {
|
||||
OcarinaStaff* Audio_OcaGetDisplayingStaff(void) {
|
||||
return &sDisplayedStaff;
|
||||
}
|
||||
|
||||
void func_800EE404(void) {
|
||||
s32 noteChanged;
|
||||
|
||||
if ((D_80131858 != 0) && ((D_8016BA04 - D_80131860) >= 3)) {
|
||||
if ((sRecordingState != 0) && ((D_8016BA04 - D_80131860) >= 3)) {
|
||||
noteChanged = false;
|
||||
if (D_80131864 != sCurOcarinaBtnVal) {
|
||||
if (sCurOcarinaBtnVal != 0xFF) {
|
||||
D_8016BA00.noteIdx = sCurOcarinaBtnIdx & 0x3F;
|
||||
D_8016BA2E++;
|
||||
} else if ((D_80131858 == 2) && (D_8016BA2E == 8)) {
|
||||
sRecordingStaff.noteIdx = sCurOcarinaBtnIdx & 0x3F;
|
||||
sStaffPlayingPos++;
|
||||
} else if ((sRecordingState == 2) && (sStaffPlayingPos == 8)) {
|
||||
func_800EDD68(1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (D_8016BA2E > 8) {
|
||||
if (D_80131858 == 2) {
|
||||
if (sStaffPlayingPos > 8) {
|
||||
if (sRecordingState == 2) {
|
||||
// notes played are over 8 and in recording mode.
|
||||
func_800EDD68(1);
|
||||
return;
|
||||
}
|
||||
D_8016BA2E = true;
|
||||
sStaffPlayingPos = true;
|
||||
}
|
||||
|
||||
noteChanged = true;
|
||||
|
@ -1235,22 +1347,22 @@ void func_800EE404(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_800EE57C(u8 minigameIdx) {
|
||||
void Audio_OcaMemoryGameStart(u8 minigameRound) {
|
||||
u8 i;
|
||||
|
||||
if (minigameIdx > 2) {
|
||||
minigameIdx = 2;
|
||||
if (minigameRound > 2) {
|
||||
minigameRound = 2;
|
||||
}
|
||||
|
||||
sOcaMinigameAppendPos = 0;
|
||||
sOcaMinigameEndPos = sOcaMinigameNoteCnts[minigameIdx];
|
||||
sOcaMinigameEndPos = sOcaMinigameNoteCnts[minigameRound];
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
func_800EE5EC();
|
||||
Audio_OcaMemoryGameGenNote();
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_800EE5EC(void) {
|
||||
s32 Audio_OcaMemoryGameGenNote(void) {
|
||||
u32 rnd;
|
||||
u8 rndNote;
|
||||
|
||||
|
@ -1261,22 +1373,22 @@ s32 func_800EE5EC(void) {
|
|||
rnd = Audio_NextRandom();
|
||||
rndNote = sOcarinaNoteValues[rnd % 5];
|
||||
|
||||
if (sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos - 1].noteIdx == rndNote) {
|
||||
if (sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos - 1].noteIdx == rndNote) {
|
||||
rndNote = sOcarinaNoteValues[(rnd + 1) % 5];
|
||||
}
|
||||
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].noteIdx = rndNote;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].unk_02 = 0x2D;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].volume = 0x50;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].vibrato = 0;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].tone = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = rndNote;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = 0x2D;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].volume = 0x50;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].vibrato = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].tone = 0;
|
||||
|
||||
sOcaMinigameAppendPos++;
|
||||
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].noteIdx = 0xFF;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos].unk_02 = 0;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos + 1].noteIdx = 0xFF;
|
||||
sOcarinaSongs[OCA_SONGS_MEMORYGAME][sOcaMinigameAppendPos + 1].unk_02 = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].noteIdx = 0xFF;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos].unk_02 = 0;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos + 1].noteIdx = 0xFF;
|
||||
sOcarinaSongs[OCARINA_SONG_MEMORY_GAME][sOcaMinigameAppendPos + 1].unk_02 = 0;
|
||||
if (1) {}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1313,9 +1425,9 @@ void func_800EE6F4(void) {
|
|||
sPrevOcarinaNoteVal = sCurOcarinaBtnVal;
|
||||
}
|
||||
|
||||
func_800EE2D4();
|
||||
func_800EE318();
|
||||
func_800EE29C();
|
||||
Audio_OcaUpdatePlayingStaff();
|
||||
Audio_OcaUpdateDisplayedStaff();
|
||||
Audio_OcaUpdateRecordingStaff();
|
||||
}
|
||||
|
||||
void func_800EE824(void) {
|
||||
|
@ -1330,20 +1442,20 @@ void func_800EE824(void) {
|
|||
D_80131C80++;
|
||||
} else {
|
||||
D_80131C80 = 3;
|
||||
func_800ED858(0);
|
||||
Audio_OcaSetInstrument(0);
|
||||
}
|
||||
D_80131C88 = 1200;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
Audio_SetSoundBanksMute(0);
|
||||
func_800ED858(D_80131C84);
|
||||
func_800ED93C(0xF, 1);
|
||||
Audio_OcaSetInstrument(D_80131C84);
|
||||
Audio_OcaSetSongPlayback(OCARINA_SONG_SCARECROW_LONG + 1, 1);
|
||||
D_80131C84++;
|
||||
D_80131C80++;
|
||||
break;
|
||||
case 2:
|
||||
if (Audio_OcaGetDisplayStaff()->state == 0) {
|
||||
if (Audio_OcaGetDisplayingStaff()->state == 0) {
|
||||
D_80131C80 = 0;
|
||||
}
|
||||
break;
|
||||
|
@ -1351,15 +1463,15 @@ void func_800EE824(void) {
|
|||
}
|
||||
|
||||
void func_800EE930(void) {
|
||||
D_8016B9F8.noteIdx = 0xFF;
|
||||
D_8016B9F8.state = 0xFF;
|
||||
D_8016B9F8.pos = 0;
|
||||
sDisplayedStaff.noteIdx = 0xFF;
|
||||
sPlayingStaff.noteIdx = OCARINA_NOTE_INVALID;
|
||||
sPlayingStaff.state = 0xFF;
|
||||
sPlayingStaff.pos = 0;
|
||||
sDisplayedStaff.noteIdx = OCARINA_NOTE_INVALID;
|
||||
sDisplayedStaff.state = 0;
|
||||
sDisplayedStaff.pos = 0;
|
||||
D_8016BA00.noteIdx = 0xFF;
|
||||
D_8016BA00.state = 0xFF;
|
||||
D_8016BA00.pos = 0;
|
||||
sRecordingStaff.noteIdx = OCARINA_NOTE_INVALID;
|
||||
sRecordingStaff.state = 0xFF;
|
||||
sRecordingStaff.pos = 0;
|
||||
D_80131880 = 0;
|
||||
}
|
||||
|
||||
|
@ -2022,7 +2134,8 @@ void AudioDebug_Draw(GfxPrint* printer) {
|
|||
sDisplayedStaff.pos);
|
||||
|
||||
GfxPrint_SetPos(printer, 3, 5);
|
||||
GfxPrint_Printf(printer, "PLAY INFO : %2d %02x %d", D_8016B9F8.noteIdx, D_8016B9F8.state, D_8016B9F8.pos);
|
||||
GfxPrint_Printf(printer, "PLAY INFO : %2d %02x %d", sPlayingStaff.noteIdx, sPlayingStaff.state,
|
||||
sPlayingStaff.pos);
|
||||
|
||||
GfxPrint_SetPos(printer, 3, 6);
|
||||
GfxPrint_Printf(printer, "8note REC POINTER : %08x", gScarecrowSpawnSongPtr);
|
||||
|
@ -2037,7 +2150,7 @@ void AudioDebug_Draw(GfxPrint* printer) {
|
|||
|
||||
GfxPrint_SetPos(printer, 3, 24);
|
||||
GfxPrint_Printf(printer, "OCA:%02x SEQ:%04x PLAY:%02x REC:%02x", D_80130F10, D_80130F3C, sPlaybackState,
|
||||
D_80131858);
|
||||
sRecordingState);
|
||||
break;
|
||||
|
||||
case PAGE_SFX_PARAMETER_CHANGE:
|
||||
|
@ -2438,15 +2551,13 @@ void AudioDebug_ProcessInput_SfxSwap(void) {
|
|||
val = gAudioSfxSwapSource[sAudioSfxSwapSel] >> ((3 - sAudioSfxSwapNibbleSel) * 4);
|
||||
val = (val + step) & 0xF;
|
||||
gAudioSfxSwapSource[sAudioSfxSwapSel] =
|
||||
(gAudioSfxSwapSource[sAudioSfxSwapSel] &
|
||||
((0xF << ((3 - sAudioSfxSwapNibbleSel) * 4)) ^ 0xFFFF)) +
|
||||
(gAudioSfxSwapSource[sAudioSfxSwapSel] & ((0xF << ((3 - sAudioSfxSwapNibbleSel) * 4)) ^ 0xFFFF)) +
|
||||
(val << ((3 - sAudioSfxSwapNibbleSel) * 4));
|
||||
} else {
|
||||
val = gAudioSfxSwapTarget[sAudioSfxSwapSel] >> ((7 - sAudioSfxSwapNibbleSel) * 4);
|
||||
val = (val + step) & 0xF;
|
||||
gAudioSfxSwapTarget[sAudioSfxSwapSel] =
|
||||
(gAudioSfxSwapTarget[sAudioSfxSwapSel] &
|
||||
((0xF << ((7 - sAudioSfxSwapNibbleSel) * 4)) ^ 0xFFFF)) +
|
||||
(gAudioSfxSwapTarget[sAudioSfxSwapSel] & ((0xF << ((7 - sAudioSfxSwapNibbleSel) * 4)) ^ 0xFFFF)) +
|
||||
(val << ((7 - sAudioSfxSwapNibbleSel) * 4));
|
||||
}
|
||||
}
|
||||
|
@ -3648,7 +3759,7 @@ void func_800F595C(u16 arg0) {
|
|||
u8 arg0b = arg0 & 0xFF;
|
||||
|
||||
if (D_80130658[arg0b] & 2) {
|
||||
func_800F5C64(arg0);
|
||||
Audio_PlayFanfare(arg0);
|
||||
} else if (D_80130658[arg0b] & 4) {
|
||||
Audio_StartSeq(1, 0, arg0);
|
||||
|
||||
|
@ -3730,7 +3841,7 @@ void func_800F5C2C(void) {
|
|||
D_80130628 = NA_BGM_DISABLED;
|
||||
}
|
||||
|
||||
void func_800F5C64(u16 arg0) {
|
||||
void Audio_PlayFanfare(u16 seqId) {
|
||||
u16 sp26;
|
||||
u32 sp20;
|
||||
u8* sp1C;
|
||||
|
@ -3738,14 +3849,14 @@ void func_800F5C64(u16 arg0) {
|
|||
|
||||
sp26 = func_800FA0B4(1);
|
||||
sp1C = func_800E5E84(sp26 & 0xFF, &sp20);
|
||||
sp18 = func_800E5E84(arg0 & 0xFF, &sp20);
|
||||
sp18 = func_800E5E84(seqId & 0xFF, &sp20);
|
||||
if ((sp26 == NA_BGM_DISABLED) || (*sp1C == *sp18)) {
|
||||
D_8016B9F4 = 1;
|
||||
} else {
|
||||
D_8016B9F4 = 5;
|
||||
Audio_SeqCmd1(1, 0);
|
||||
}
|
||||
D_8016B9F6 = arg0;
|
||||
D_8016B9F6 = seqId;
|
||||
}
|
||||
|
||||
void func_800F5CF8(void) {
|
||||
|
@ -4125,7 +4236,7 @@ void func_800F6C34(void) {
|
|||
sAudioExtraFilter = 0;
|
||||
sAudioBaseFilter2 = 0;
|
||||
sAudioExtraFilter2 = 0;
|
||||
func_800ED858(0);
|
||||
Audio_OcaSetInstrument(0);
|
||||
sRiverFreqScaleLerp.remainingFrames = 0;
|
||||
sWaterfallFreqScaleLerp.remainingFrames = 0;
|
||||
sRiverFreqScaleLerp.value = 1.0f;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#include "global.h"
|
||||
#include "ultra64/abi.h"
|
||||
|
||||
extern unk_D_8016E750 D_8016E750[4];
|
||||
extern u8 D_8016E348[4];
|
||||
extern u32 sAudioSeqCmds[0x100];
|
||||
extern u8 sSeqCmdRdPos;
|
||||
|
|
|
@ -1293,9 +1293,8 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
DbCamera_SetTextValue(dbCamera->sub.lookAt[dbCamera->sub.unkIdx].cameraRoll, &D_8012D084[10], 3);
|
||||
func_8006376C(0x10, 0x16, (dbCamera->sub.unk_0A == 2) ? 7 : 4, D_8012D084);
|
||||
func_8006376C(0xF, 0x17, (dbCamera->sub.unk_0A == 3) ? 7 : 4,
|
||||
(dbCamera->sub.mode == 1) ? D_8012CF14
|
||||
: (dbCamera->sub.mode == 0) ? *D_8012CF18
|
||||
: D_8012CFB0);
|
||||
(dbCamera->sub.mode == 1) ? D_8012CF14
|
||||
: (dbCamera->sub.mode == 0) ? *D_8012CF18 : D_8012CFB0);
|
||||
if (dbCamera->sub.unk_0C) {
|
||||
D_8012D05C[80] = '>';
|
||||
} else {
|
||||
|
@ -1320,9 +1319,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
|
||||
if (dbCamera->sub.mode != 1) {
|
||||
func_8006376C(3, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) ? 7
|
||||
: !D_80161144 ? 4
|
||||
: 3,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144)
|
||||
? 7
|
||||
: !D_80161144 ? 4 : 3,
|
||||
D_8012CF30);
|
||||
sp110 = 'X';
|
||||
DbCamera_SetTextValue(dbCamera->at.x, &sp111, 6);
|
||||
|
@ -1333,11 +1332,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
sp110 = 'Z';
|
||||
DbCamera_SetTextValue(dbCamera->at.z, &sp111, 6);
|
||||
func_8006376C(3, 0x19, 2, &sp110);
|
||||
func_8006376C(0x1E, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7
|
||||
: D_80161144 ? 4
|
||||
: 3,
|
||||
D_8012CF34);
|
||||
func_8006376C(
|
||||
0x1E, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7 : D_80161144 ? 4 : 3,
|
||||
D_8012CF34);
|
||||
sp110 = 'X';
|
||||
DbCamera_SetTextValue(dbCamera->eye.x, &sp111, 6);
|
||||
func_8006376C(0x1E, 0x17, 2, &sp110);
|
||||
|
@ -1352,9 +1350,9 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
OLib_Vec3fDiffToVecSphGeo(&spFC, sp90, sp7C);
|
||||
spFC.yaw -= cam->playerPosRot.rot.y;
|
||||
func_8006376C(3, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) ? 7
|
||||
: !D_80161144 ? 4
|
||||
: 3,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144)
|
||||
? 7
|
||||
: !D_80161144 ? 4 : 3,
|
||||
D_8012CF30);
|
||||
DbCamera_SetTextValue(spFC.pitch * 0.00549325f, &D_8012D0E4[10], 4);
|
||||
func_8006376C(3, 0x17, 3, D_8012D0E4);
|
||||
|
@ -1364,11 +1362,10 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) {
|
|||
func_8006376C(3, 0x19, 3, D_8012D0D4);
|
||||
OLib_Vec3fDiffToVecSphGeo(&spFC, sp90, sp80);
|
||||
spFC.yaw -= cam->playerPosRot.rot.y;
|
||||
func_8006376C(0x1E, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7
|
||||
: D_80161144 ? 4
|
||||
: 3,
|
||||
D_8012CF34);
|
||||
func_8006376C(
|
||||
0x1E, 0x16,
|
||||
((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7 : D_80161144 ? 4 : 3,
|
||||
D_8012CF34);
|
||||
DbCamera_SetTextValue(spFC.pitch * 0.00549325f, &D_8012D0E4[10], 4);
|
||||
func_8006376C(0x1C, 0x17, 3, D_8012D0E4);
|
||||
DbCamera_SetTextValue(spFC.yaw * 0.00549325f, &D_8012D0F8[10], 4);
|
||||
|
|
|
@ -283,7 +283,7 @@ void Fault_UpdatePadImpl() {
|
|||
}
|
||||
|
||||
u32 Fault_WaitForInputImpl() {
|
||||
Input* curInput = &sFaultStructPtr->padInput;
|
||||
Input* input = &sFaultStructPtr->padInput;
|
||||
s32 count = 600;
|
||||
u32 kDown;
|
||||
|
||||
|
@ -291,7 +291,7 @@ u32 Fault_WaitForInputImpl() {
|
|||
Fault_Sleep(0x10);
|
||||
Fault_UpdatePadImpl();
|
||||
|
||||
kDown = curInput->press.button;
|
||||
kDown = input->press.button;
|
||||
|
||||
if (kDown == BTN_L) {
|
||||
sFaultStructPtr->faultActive = !sFaultStructPtr->faultActive;
|
||||
|
@ -539,7 +539,7 @@ void Fault_Wait5Seconds(void) {
|
|||
}
|
||||
|
||||
void Fault_WaitForButtonCombo() {
|
||||
Input* curInput = &sFaultStructPtr->padInput;
|
||||
Input* input = &sFaultStructPtr->padInput;
|
||||
s32 state;
|
||||
u32 s1;
|
||||
u32 s2;
|
||||
|
@ -567,8 +567,8 @@ void Fault_WaitForButtonCombo() {
|
|||
Fault_Sleep(0x10);
|
||||
Fault_UpdatePadImpl();
|
||||
|
||||
kDown = curInput->press.button;
|
||||
kCur = curInput->cur.button;
|
||||
kDown = input->press.button;
|
||||
kCur = input->cur.button;
|
||||
|
||||
if ((kCur == 0) && (s1 == s2)) {
|
||||
s1 = 0;
|
||||
|
@ -717,7 +717,7 @@ void Fault_DrawMemDumpPage(const char* title, u32* addr, u32 param_3) {
|
|||
}
|
||||
|
||||
void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
|
||||
Input* curInput = &sFaultStructPtr->padInput;
|
||||
Input* input = &sFaultStructPtr->padInput;
|
||||
u32 addr = pc;
|
||||
s32 count;
|
||||
u32 off;
|
||||
|
@ -743,7 +743,7 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
|
|||
count--;
|
||||
Fault_Sleep(0x10);
|
||||
Fault_UpdatePadImpl();
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_L)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_L)) {
|
||||
sFaultStructPtr->faultActive = false;
|
||||
}
|
||||
}
|
||||
|
@ -751,40 +751,40 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
|
|||
do {
|
||||
Fault_Sleep(0x10);
|
||||
Fault_UpdatePadImpl();
|
||||
} while (curInput->press.button == 0);
|
||||
} while (input->press.button == 0);
|
||||
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_START) || CHECK_BTN_ALL(curInput->cur.button, BTN_A)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->cur.button, BTN_A)) {
|
||||
return;
|
||||
}
|
||||
|
||||
off = 0x10;
|
||||
if (CHECK_BTN_ALL(curInput->cur.button, BTN_Z)) {
|
||||
if (CHECK_BTN_ALL(input->cur.button, BTN_Z)) {
|
||||
off = 0x100;
|
||||
}
|
||||
|
||||
if (CHECK_BTN_ALL(curInput->cur.button, BTN_B)) {
|
||||
if (CHECK_BTN_ALL(input->cur.button, BTN_B)) {
|
||||
off <<= 8;
|
||||
}
|
||||
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_DUP)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
|
||||
addr -= off;
|
||||
}
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_DDOWN)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
|
||||
addr += off;
|
||||
}
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_CUP)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) {
|
||||
addr = pc;
|
||||
}
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_CDOWN)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
|
||||
addr = sp;
|
||||
}
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_CLEFT)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
|
||||
addr = unk0;
|
||||
}
|
||||
if (CHECK_BTN_ALL(curInput->press.button, BTN_CRIGHT)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
|
||||
addr = unk1;
|
||||
}
|
||||
} while (!CHECK_BTN_ALL(curInput->press.button, BTN_L));
|
||||
} while (!CHECK_BTN_ALL(input->press.button, BTN_L));
|
||||
|
||||
sFaultStructPtr->faultActive = true;
|
||||
}
|
||||
|
|
|
@ -708,10 +708,11 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
Gfillrect setscissor = ptr->fillrect;
|
||||
const char* modeStr;
|
||||
|
||||
modeStr = (setscissor.pad == G_SC_NON_INTERLACE) ? "G_SC_NON_INTERLACE"
|
||||
: (setscissor.pad == G_SC_ODD_INTERLACE) ? "G_SC_ODD_INTERLACE"
|
||||
: (setscissor.pad == G_SC_EVEN_INTERLACE) ? "G_SC_EVEN_INTERLACE"
|
||||
: "???";
|
||||
modeStr = (setscissor.pad == G_SC_NON_INTERLACE)
|
||||
? "G_SC_NON_INTERLACE"
|
||||
: (setscissor.pad == G_SC_ODD_INTERLACE)
|
||||
? "G_SC_ODD_INTERLACE"
|
||||
: (setscissor.pad == G_SC_EVEN_INTERLACE) ? "G_SC_EVEN_INTERLACE" : "???";
|
||||
|
||||
if ((setscissor.x0frac | setscissor.y0frac | setscissor.x1frac | setscissor.y1frac)) {
|
||||
if (1) {}
|
||||
|
@ -737,15 +738,12 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
u32 siz = ((curGfx->words.w0 & 0x180000) >> 0x13) & 0xff;
|
||||
|
||||
DISAS_LOG("gsDPSetColorImage(G_IM_FMT_%s, G_IM_SIZ_%s, %d, 0x%08x(0x%08x) ),",
|
||||
(fmt == G_IM_FMT_RGBA) ? "RGBA"
|
||||
: (fmt == G_IM_FMT_YUV) ? "YUV"
|
||||
: (fmt == G_IM_FMT_CI) ? "CI"
|
||||
: (fmt == G_IM_FMT_IA) ? "IA"
|
||||
: "I",
|
||||
(siz == G_IM_SIZ_4b) ? "4b"
|
||||
: (siz == G_IM_SIZ_8b) ? "8b"
|
||||
: (siz == G_IM_SIZ_16b) ? "16b"
|
||||
: "32b",
|
||||
(fmt == G_IM_FMT_RGBA)
|
||||
? "RGBA"
|
||||
: (fmt == G_IM_FMT_YUV) ? "YUV"
|
||||
: (fmt == G_IM_FMT_CI) ? "CI" : (fmt == G_IM_FMT_IA) ? "IA" : "I",
|
||||
(siz == G_IM_SIZ_4b) ? "4b"
|
||||
: (siz == G_IM_SIZ_8b) ? "8b" : (siz == G_IM_SIZ_16b) ? "16b" : "32b",
|
||||
(curGfx->dma.len & 0xfff) + 1, curGfx->setimg.dram, addr);
|
||||
|
||||
if (this->pipeSyncRequired) {
|
||||
|
@ -768,15 +766,12 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
u32 siz = ((curGfx->words.w0 & 0x180000) >> 0x13) & 0xff;
|
||||
|
||||
DISAS_LOG("gsDPSetTextureImage(G_IM_FMT_%s, G_IM_SIZ_%s, %d, 0x%08x(0x%08x)),",
|
||||
(fmt == G_IM_FMT_RGBA) ? "RGBA"
|
||||
: (fmt == G_IM_FMT_YUV) ? "YUV"
|
||||
: (fmt == G_IM_FMT_CI) ? "CI"
|
||||
: (fmt == G_IM_FMT_IA) ? "IA"
|
||||
: "I",
|
||||
(siz == G_IM_SIZ_4b) ? "4b"
|
||||
: (siz == G_IM_SIZ_8b) ? "8b"
|
||||
: (siz == G_IM_SIZ_16b) ? "16b"
|
||||
: "32b",
|
||||
(fmt == G_IM_FMT_RGBA)
|
||||
? "RGBA"
|
||||
: (fmt == G_IM_FMT_YUV) ? "YUV"
|
||||
: (fmt == G_IM_FMT_CI) ? "CI" : (fmt == G_IM_FMT_IA) ? "IA" : "I",
|
||||
(siz == G_IM_SIZ_4b) ? "4b"
|
||||
: (siz == G_IM_SIZ_8b) ? "8b" : (siz == G_IM_SIZ_16b) ? "16b" : "32b",
|
||||
(curGfx->dma.len & 0xfff) + 1, curGfx->setimg.dram, addr);
|
||||
} break;
|
||||
|
||||
|
@ -994,11 +989,15 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
|
||||
case G_MODIFYVTX: {
|
||||
DISAS_LOG("gsSPModifyVertex(%d, %s, %08x),", curGfx->dma.par,
|
||||
(curGfx->dma.len == G_MWO_POINT_RGBA) ? "G_MWO_POINT_RGBA"
|
||||
: (curGfx->dma.len == G_MWO_POINT_ST) ? "G_MWO_POINT_ST"
|
||||
: (curGfx->dma.len == G_MWO_POINT_XYSCREEN) ? "G_MWO_POINT_XYSCREEN"
|
||||
: (curGfx->dma.len == G_MWO_POINT_ZSCREEN) ? "G_MWO_POINT_ZSCREEN"
|
||||
: "G_MWO_POINT_????",
|
||||
(curGfx->dma.len == G_MWO_POINT_RGBA)
|
||||
? "G_MWO_POINT_RGBA"
|
||||
: (curGfx->dma.len == G_MWO_POINT_ST)
|
||||
? "G_MWO_POINT_ST"
|
||||
: (curGfx->dma.len == G_MWO_POINT_XYSCREEN)
|
||||
? "G_MWO_POINT_XYSCREEN"
|
||||
: (curGfx->dma.len == G_MWO_POINT_ZSCREEN)
|
||||
? "G_MWO_POINT_ZSCREEN"
|
||||
: "G_MWO_POINT_????",
|
||||
curGfx->dma.addr);
|
||||
this->vtxCnt += curGfx->dma.par;
|
||||
this->spvtxCnt++;
|
||||
|
@ -1211,9 +1210,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
}
|
||||
} break;
|
||||
|
||||
default: {
|
||||
DISAS_LOG("AnyDisplayList(),");
|
||||
} break;
|
||||
default: { DISAS_LOG("AnyDisplayList(),"); } break;
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -1338,9 +1335,7 @@ void UCodeDisas_Disassemble(UCodeDisas* this, GfxMod* ptr) {
|
|||
DISAS_LOG("gsSPObjRenderMode(0x%08x),", dma.addr);
|
||||
} break;
|
||||
|
||||
default: {
|
||||
DISAS_LOG("AnyDisplayList(),");
|
||||
} break;
|
||||
default: { DISAS_LOG("AnyDisplayList(),"); } break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1489,7 +1489,7 @@ s32 func_8002F0C8(Actor* actor, Player* player, s32 flag) {
|
|||
return false;
|
||||
}
|
||||
|
||||
u32 func_8002F194(Actor* actor, GlobalContext* globalCtx) {
|
||||
u32 Actor_ProcessTalkRequest(Actor* actor, GlobalContext* globalCtx) {
|
||||
if (actor->flags & 0x100) {
|
||||
actor->flags &= ~0x100;
|
||||
return true;
|
||||
|
@ -1530,8 +1530,8 @@ s32 func_8002F2F4(Actor* actor, GlobalContext* globalCtx) {
|
|||
return func_8002F2CC(actor, globalCtx, var1);
|
||||
}
|
||||
|
||||
u32 func_8002F334(Actor* actor, GlobalContext* globalCtx) {
|
||||
if (func_8010BDBC(&globalCtx->msgCtx) == 2) {
|
||||
u32 Actor_TextboxIsClosing(Actor* actor, GlobalContext* globalCtx) {
|
||||
if (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CLOSING) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -1544,13 +1544,13 @@ s8 func_8002F368(GlobalContext* globalCtx) {
|
|||
return player->exchangeItemId;
|
||||
}
|
||||
|
||||
void func_8002F374(GlobalContext* globalCtx, Actor* actor, s16* x, s16* y) {
|
||||
Vec3f sp1C;
|
||||
f32 sp18;
|
||||
void Actor_GetScreenPos(GlobalContext* globalCtx, Actor* actor, s16* x, s16* y) {
|
||||
Vec3f projectedPos;
|
||||
f32 w;
|
||||
|
||||
func_8002BE04(globalCtx, &actor->focus.pos, &sp1C, &sp18);
|
||||
*x = sp1C.x * sp18 * 160.0f + 160.0f;
|
||||
*y = sp1C.y * sp18 * -120.0f + 120.0f;
|
||||
func_8002BE04(globalCtx, &actor->focus.pos, &projectedPos, &w);
|
||||
*x = projectedPos.x * w * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2);
|
||||
*y = projectedPos.y * w * -(SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2);
|
||||
}
|
||||
|
||||
u32 Actor_HasParent(Actor* actor, GlobalContext* globalCtx) {
|
||||
|
@ -2862,7 +2862,7 @@ s32 func_80032880(GlobalContext* globalCtx, Actor* actor) {
|
|||
s16 sp1E;
|
||||
s16 sp1C;
|
||||
|
||||
func_8002F374(globalCtx, actor, &sp1E, &sp1C);
|
||||
Actor_GetScreenPos(globalCtx, actor, &sp1E, &sp1C);
|
||||
|
||||
return (sp1E > -20) && (sp1E < 340) && (sp1C > -160) && (sp1C < 400);
|
||||
}
|
||||
|
@ -3585,12 +3585,12 @@ Hilite* func_8003435C(Vec3f* object, GlobalContext* globalCtx) {
|
|||
return func_8002EB44(object, &globalCtx->view.eye, &lightDir, globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
s32 func_800343CC(GlobalContext* globalCtx, Actor* actor, s16* arg2, f32 arg3, callback1_800343CC unkFunc1,
|
||||
s32 func_800343CC(GlobalContext* globalCtx, Actor* actor, s16* arg2, f32 interactRange, callback1_800343CC unkFunc1,
|
||||
callback2_800343CC unkFunc2) {
|
||||
s16 sp26;
|
||||
s16 sp24;
|
||||
s16 x;
|
||||
s16 y;
|
||||
|
||||
if (func_8002F194(actor, globalCtx)) {
|
||||
if (Actor_ProcessTalkRequest(actor, globalCtx)) {
|
||||
*arg2 = 1;
|
||||
return true;
|
||||
}
|
||||
|
@ -3600,13 +3600,13 @@ s32 func_800343CC(GlobalContext* globalCtx, Actor* actor, s16* arg2, f32 arg3, c
|
|||
return false;
|
||||
}
|
||||
|
||||
func_8002F374(globalCtx, actor, &sp26, &sp24);
|
||||
Actor_GetScreenPos(globalCtx, actor, &x, &y);
|
||||
|
||||
if ((sp26 < 0) || (sp26 > SCREEN_WIDTH) || (sp24 < 0) || (sp24 > SCREEN_HEIGHT)) {
|
||||
if ((x < 0) || (x > SCREEN_WIDTH) || (y < 0) || (y > SCREEN_HEIGHT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!func_8002F2CC(actor, globalCtx, arg3)) {
|
||||
if (!func_8002F2CC(actor, globalCtx, interactRange)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -4128,7 +4128,7 @@ void func_800359B8(Actor* actor, s16 arg1, Vec3s* arg2) {
|
|||
}
|
||||
|
||||
void func_80035B18(GlobalContext* globalCtx, Actor* actor, u16 textId) {
|
||||
func_8010B720(globalCtx, textId);
|
||||
Message_ContinueTextbox(globalCtx, textId);
|
||||
actor->textId = textId;
|
||||
}
|
||||
|
||||
|
@ -5203,7 +5203,7 @@ s32 func_800374E0(GlobalContext* globalCtx, Actor* actor, u16 textId) {
|
|||
ret = 0;
|
||||
break;
|
||||
case 0x1041:
|
||||
if (msgCtx->unk_E2FA == 0x1035) {
|
||||
if (msgCtx->choiceTextId == 0x1035) {
|
||||
if (msgCtx->choiceIndex == 0) {
|
||||
func_80035B18(globalCtx, actor, 0x1036);
|
||||
Flags_SetInfTable(0x2A);
|
||||
|
@ -5213,7 +5213,7 @@ s32 func_800374E0(GlobalContext* globalCtx, Actor* actor, u16 textId) {
|
|||
Flags_SetInfTable(0x2B);
|
||||
}
|
||||
}
|
||||
if (msgCtx->unk_E2FA == 0x1038) {
|
||||
if (msgCtx->choiceTextId == 0x1038) {
|
||||
if (msgCtx->choiceIndex == 0) {
|
||||
func_80035B18(globalCtx, actor, 0x1039);
|
||||
Flags_SetInfTable(0x2E);
|
||||
|
@ -5362,16 +5362,16 @@ s32 func_80037CB8(GlobalContext* globalCtx, Actor* actor, s16 arg2) {
|
|||
MessageContext* msgCtx = &globalCtx->msgCtx;
|
||||
s32 ret = false;
|
||||
|
||||
switch (func_8010BDBC(msgCtx)) {
|
||||
case 2:
|
||||
switch (Message_GetState(msgCtx)) {
|
||||
case TEXT_STATE_CLOSING:
|
||||
func_80037C5C(globalCtx, arg2, actor->textId);
|
||||
ret = true;
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
if (func_80106BC8(globalCtx) && func_80037C94(globalCtx, actor, arg2)) {
|
||||
case TEXT_STATE_CHOICE:
|
||||
case TEXT_STATE_EVENT:
|
||||
if (Message_ShouldAdvance(globalCtx) && func_80037C94(globalCtx, actor, arg2)) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_CANCEL, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
||||
msgCtx->msgMode = 0x36;
|
||||
msgCtx->msgMode = MSGMODE_TEXT_CLOSING;
|
||||
ret = true;
|
||||
}
|
||||
break;
|
||||
|
@ -5386,7 +5386,7 @@ s32 func_80037D98(GlobalContext* globalCtx, Actor* actor, s16 arg2, s32* arg3) {
|
|||
s16 sp2A;
|
||||
s16 abs_var;
|
||||
|
||||
if (func_8002F194(actor, globalCtx)) {
|
||||
if (Actor_ProcessTalkRequest(actor, globalCtx)) {
|
||||
*arg3 = 1;
|
||||
return true;
|
||||
}
|
||||
|
@ -5398,7 +5398,7 @@ s32 func_80037D98(GlobalContext* globalCtx, Actor* actor, s16 arg2, s32* arg3) {
|
|||
return false;
|
||||
}
|
||||
|
||||
func_8002F374(globalCtx, actor, &sp2C, &sp2A);
|
||||
Actor_GetScreenPos(globalCtx, actor, &sp2C, &sp2A);
|
||||
|
||||
if (0) {} // Necessary to match
|
||||
|
||||
|
|
|
@ -1690,9 +1690,9 @@ s32 Camera_Normal2(Camera* camera) {
|
|||
anim->unk_20 = BGCAM_ROT(bgData).x;
|
||||
anim->unk_22 = BGCAM_ROT(bgData).y;
|
||||
anim->unk_24 = playerPosRot->pos.y;
|
||||
anim->unk_1C = BGCAM_FOV(bgData) == -1 ? norm2->unk_14
|
||||
: BGCAM_FOV(bgData) >= 0x169 ? PCT(BGCAM_FOV(bgData))
|
||||
: BGCAM_FOV(bgData);
|
||||
anim->unk_1C = BGCAM_FOV(bgData) == -1
|
||||
? norm2->unk_14
|
||||
: BGCAM_FOV(bgData) >= 0x169 ? PCT(BGCAM_FOV(bgData)) : BGCAM_FOV(bgData);
|
||||
|
||||
anim->unk_28 = BGCAM_JFIFID(bgData) == -1 ? 0 : BGCAM_JFIFID(bgData);
|
||||
|
||||
|
@ -2920,9 +2920,7 @@ s32 Camera_Battle1(Camera* camera) {
|
|||
}
|
||||
anim->roll += (((OREG(36) * camera->speedRatio) * (1.0f - distRatio)) - anim->roll) * PCT(OREG(37));
|
||||
camera->roll = DEGF_TO_BINANG(anim->roll);
|
||||
camera->fov = Camera_LERPCeilF((player->swordState != 0 ? 0.8f
|
||||
: gSaveContext.health <= 0x10 ? 0.8f
|
||||
: 1.0f) *
|
||||
camera->fov = Camera_LERPCeilF((player->swordState != 0 ? 0.8f : gSaveContext.health <= 0x10 ? 0.8f : 1.0f) *
|
||||
(fov - ((fov * 0.05f) * distRatio)),
|
||||
camera->fov, camera->fovUpdateRate, 1.0f);
|
||||
}
|
||||
|
@ -5829,7 +5827,7 @@ s32 Camera_Demo5(Camera* camera) {
|
|||
Actor_GetFocus(&camera->targetPosRot, camera->target);
|
||||
OLib_Vec3fDiffToVecSphGeo(&playerTargetGeo, &camera->targetPosRot.pos, &camera->playerPosRot.pos);
|
||||
D_8011D3AC = camera->target->category;
|
||||
func_8002F374(camera->globalCtx, camera->target, &sp78.yaw, &sp78.pitch);
|
||||
Actor_GetScreenPos(camera->globalCtx, camera->target, &sp78.yaw, &sp78.pitch);
|
||||
eyeTargetDist = OLib_Vec3fDist(&camera->targetPosRot.pos, &camera->eye);
|
||||
OLib_Vec3fDiffToVecSphGeo(&eyePlayerGeo, &playerhead.pos, &camera->eyeNext);
|
||||
sp4A = eyePlayerGeo.yaw - playerTargetGeo.yaw;
|
||||
|
|
|
@ -47,9 +47,9 @@ void func_801109B0(GlobalContext* globalCtx) {
|
|||
|
||||
ASSERT(interfaceCtx->doActionSegment != NULL, "parameter->do_actionSegment != NULL", "../z_construct.c", 169);
|
||||
|
||||
if (gSaveContext.language == 0) {
|
||||
if (gSaveContext.language == LANGUAGE_ENG) {
|
||||
doActionOffset = 0;
|
||||
} else if (gSaveContext.language == 1) {
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
doActionOffset = 0x2B80;
|
||||
} else {
|
||||
doActionOffset = 0x5700;
|
||||
|
@ -58,9 +58,9 @@ void func_801109B0(GlobalContext* globalCtx) {
|
|||
DmaMgr_SendRequest1(interfaceCtx->doActionSegment, (u32)_do_action_staticSegmentRomStart + doActionOffset, 0x300,
|
||||
"../z_construct.c", 174);
|
||||
|
||||
if (gSaveContext.language == 0) {
|
||||
if (gSaveContext.language == LANGUAGE_ENG) {
|
||||
doActionOffset = 0x480;
|
||||
} else if (gSaveContext.language == 1) {
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
doActionOffset = 0x3000;
|
||||
} else {
|
||||
doActionOffset = 0x5B80;
|
||||
|
@ -164,18 +164,18 @@ void func_801109B0(GlobalContext* globalCtx) {
|
|||
R_A_BTN_COLOR(2) = 50;
|
||||
}
|
||||
|
||||
void func_80110F68(GlobalContext* globalCtx) {
|
||||
void Message_Init(GlobalContext* globalCtx) {
|
||||
MessageContext* msgCtx = &globalCtx->msgCtx;
|
||||
s32 pad;
|
||||
|
||||
func_8011040C();
|
||||
Message_SetTables();
|
||||
|
||||
globalCtx->msgCtx.unk_E3EE = 0;
|
||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_00;
|
||||
|
||||
msgCtx->msgMode = 0;
|
||||
msgCtx->unk_E300 = 0;
|
||||
msgCtx->unk_E2F8 = msgCtx->unk_E3E4 = msgCtx->choiceIndex = msgCtx->unk_E3F0 = msgCtx->unk_E3D6 = 0;
|
||||
msgCtx->unk_E3E2 = 0xFF;
|
||||
msgCtx->msgMode = MSGMODE_NONE;
|
||||
msgCtx->msgLength = 0;
|
||||
msgCtx->textId = msgCtx->textboxEndType = msgCtx->choiceIndex = msgCtx->ocarinaAction = msgCtx->textUnskippable = 0;
|
||||
msgCtx->textColorAlpha = 255;
|
||||
|
||||
View_Init(&msgCtx->view, globalCtx->state.gfxCtx);
|
||||
|
||||
|
@ -195,10 +195,10 @@ void func_80111070(void) {
|
|||
YREG(8) = 10;
|
||||
YREG(14) = 0;
|
||||
YREG(15) = 0;
|
||||
YREG(16) = 0;
|
||||
YREG(17) = 0;
|
||||
YREG(22) = 50;
|
||||
YREG(23) = 0;
|
||||
R_TEXTBOX_TEXWIDTH = 0;
|
||||
R_TEXTBOX_TEXHEIGHT = 0;
|
||||
R_TEXTBOX_WIDTH = 50;
|
||||
R_TEXTBOX_HEIGHT = 0;
|
||||
YREG(24) = -60;
|
||||
YREG(25) = 13;
|
||||
YREG(26) = 15;
|
||||
|
@ -240,15 +240,15 @@ void func_80111070(void) {
|
|||
YREG(68) = 0;
|
||||
YREG(69) = 0;
|
||||
YREG(70) = 0;
|
||||
YREG(71) = -6;
|
||||
YREG(72) = 10;
|
||||
R_TEXTBOX_ICON_XPOS = -6;
|
||||
R_TEXTBOX_ICON_YPOS = 10;
|
||||
YREG(73) = -8;
|
||||
YREG(74) = 8;
|
||||
YREG(75) = 24;
|
||||
R_TEXTBOX_ICON_SIZE = 24;
|
||||
YREG(76) = 32;
|
||||
YREG(77) = 0;
|
||||
YREG(78) = 0;
|
||||
YREG(79) = 48;
|
||||
R_MESSAGE_DEBUGGER_SELECT = 0;
|
||||
R_MESSAGE_DEBUGGER_TEXTID = 48;
|
||||
YREG(80) = 450;
|
||||
YREG(81) = 0;
|
||||
YREG(82) = -15;
|
||||
|
@ -388,30 +388,30 @@ void func_80111070(void) {
|
|||
R_MAGIC_FILL_X = 26;
|
||||
XREG(52) = 0;
|
||||
XREG(53) = 1;
|
||||
XREG(54) = 65;
|
||||
XREG(55) = 60;
|
||||
XREG(56) = 16;
|
||||
XREG(57) = 80;
|
||||
R_TEXT_INIT_XPOS = 65;
|
||||
R_TEXT_INIT_YPOS = 60;
|
||||
R_TEXT_LINE_SPACING = 16;
|
||||
R_TEXT_CHAR_SCALE = 80;
|
||||
XREG(58) = 80;
|
||||
XREG(59) = 12;
|
||||
XREG(60) = 1;
|
||||
XREG(61) = 3;
|
||||
R_TEXT_DROP_SHADOW_OFFSET = 1;
|
||||
R_TEXTBOX_BG_YPOS = 3;
|
||||
XREG(62) = 0;
|
||||
XREG(63) = 100;
|
||||
XREG(64) = 158;
|
||||
XREG(65) = 102;
|
||||
XREG(66) = 48;
|
||||
XREG(67) = 54;
|
||||
XREG(68) = 70;
|
||||
XREG(69) = 86;
|
||||
R_TEXTBOX_END_XPOS = 158;
|
||||
R_TEXTBOX_END_YPOS = 102;
|
||||
R_TEXT_CHOICE_XPOS = 48;
|
||||
R_TEXT_CHOICE_YPOS(0) = 54;
|
||||
R_TEXT_CHOICE_YPOS(1) = 70;
|
||||
R_TEXT_CHOICE_YPOS(2) = 86;
|
||||
XREG(70) = -300;
|
||||
XREG(71) = 0;
|
||||
XREG(72) = 54;
|
||||
XREG(73) = 48;
|
||||
XREG(74) = 128;
|
||||
XREG(75) = 64;
|
||||
XREG(76) = 2048;
|
||||
XREG(77) = 512;
|
||||
R_TEXTBOX_X_TARGET = 54;
|
||||
R_TEXTBOX_Y_TARGET = 48;
|
||||
R_TEXTBOX_WIDTH_TARGET = 128;
|
||||
R_TEXTBOX_HEIGHT_TARGET = 64;
|
||||
R_TEXTBOX_TEXWIDTH_TARGET = 2048;
|
||||
R_TEXTBOX_TEXHEIGHT_TARGET = 512;
|
||||
XREG(78) = 96;
|
||||
XREG(79) = 98;
|
||||
XREG(80) = 0;
|
||||
|
@ -507,15 +507,15 @@ void func_80111070(void) {
|
|||
WREG(95) = 6;
|
||||
|
||||
if (gSaveContext.gameMode == 0) {
|
||||
VREG(0) = 52;
|
||||
VREG(1) = 36;
|
||||
R_TEXTBOX_X = 52;
|
||||
R_TEXTBOX_Y = 36;
|
||||
VREG(2) = 214;
|
||||
VREG(3) = 76;
|
||||
VREG(4) = 304;
|
||||
VREG(5) = 430;
|
||||
VREG(6) = 1;
|
||||
VREG(7) = 78;
|
||||
VREG(8) = 166;
|
||||
R_TEXTBOX_CLEF_XPOS = 78;
|
||||
R_TEXTBOX_CLEF_YPOS = 166;
|
||||
VREG(9) = 40;
|
||||
R_COMPASS_SCALE_X = 32;
|
||||
R_COMPASS_SCALE_Y = 32;
|
||||
|
@ -533,28 +533,31 @@ void func_80111070(void) {
|
|||
VREG(25) = 0;
|
||||
VREG(26) = 0;
|
||||
VREG(27) = 0;
|
||||
VREG(28) = 98;
|
||||
VREG(29) = 18;
|
||||
R_OCARINA_NOTES_XPOS = 98;
|
||||
R_OCARINA_NOTES_XPOS_OFFSET = 18;
|
||||
VREG(30) = 0;
|
||||
VREG(31) = 0;
|
||||
VREG(32) = 0;
|
||||
VREG(33) = 70;
|
||||
VREG(34) = 255;
|
||||
VREG(35) = 80;
|
||||
VREG(36) = 70;
|
||||
VREG(37) = 255;
|
||||
VREG(38) = 80;
|
||||
|
||||
R_TEXT_ADJUST_COLOR_1_R = 70;
|
||||
R_TEXT_ADJUST_COLOR_1_G = 255;
|
||||
R_TEXT_ADJUST_COLOR_1_B = 80;
|
||||
|
||||
R_TEXT_ADJUST_COLOR_2_R = 70;
|
||||
R_TEXT_ADJUST_COLOR_2_G = 255;
|
||||
R_TEXT_ADJUST_COLOR_2_B = 80;
|
||||
|
||||
VREG(40) = 9;
|
||||
VREG(42) = 250;
|
||||
VREG(43) = 440;
|
||||
VREG(44) = 10;
|
||||
VREG(45) = 190;
|
||||
VREG(46) = 184;
|
||||
VREG(47) = 176;
|
||||
VREG(48) = 172;
|
||||
VREG(49) = 170;
|
||||
R_OCARINA_NOTES_YPOS(0) = 190;
|
||||
R_OCARINA_NOTES_YPOS(1) = 184;
|
||||
R_OCARINA_NOTES_YPOS(2) = 176;
|
||||
R_OCARINA_NOTES_YPOS(3) = 172;
|
||||
R_OCARINA_NOTES_YPOS(4) = 170;
|
||||
VREG(50) = 30;
|
||||
VREG(51) = 0;
|
||||
R_OCARINA_NOTES_YPOS_OFFSET = 0;
|
||||
VREG(52) = -16;
|
||||
VREG(53) = 230;
|
||||
VREG(54) = 230;
|
||||
|
|
|
@ -151,15 +151,19 @@ void func_8006390C(Input* input) {
|
|||
gGameInfo->dpadLast = dpad;
|
||||
}
|
||||
|
||||
increment = CHECK_BTN_ANY(dpad, BTN_DRIGHT) ? (CHECK_BTN_ALL(input->cur.button, BTN_A | BTN_B) ? 1000
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_A) ? 100
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_B) ? 10
|
||||
: 1)
|
||||
: CHECK_BTN_ANY(dpad, BTN_DLEFT) ? (CHECK_BTN_ALL(input->cur.button, BTN_A | BTN_B) ? -1000
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_A) ? -100
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_B) ? -10
|
||||
: -1)
|
||||
: 0;
|
||||
increment = CHECK_BTN_ANY(dpad, BTN_DRIGHT)
|
||||
? (CHECK_BTN_ALL(input->cur.button, BTN_A | BTN_B)
|
||||
? 1000
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_A)
|
||||
? 100
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_B) ? 10 : 1)
|
||||
: CHECK_BTN_ANY(dpad, BTN_DLEFT)
|
||||
? (CHECK_BTN_ALL(input->cur.button, BTN_A | BTN_B)
|
||||
? -1000
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_A)
|
||||
? -100
|
||||
: CHECK_BTN_ALL(input->cur.button, BTN_B) ? -10 : -1)
|
||||
: 0;
|
||||
|
||||
gGameInfo->data[gGameInfo->regCur + regGroup] += increment;
|
||||
if (CHECK_BTN_ANY(dpad, BTN_DUP)) {
|
||||
|
|
|
@ -1489,11 +1489,11 @@ void Cutscene_Command_Textbox(GlobalContext* globalCtx, CutsceneContext* csCtx,
|
|||
if (D_8011E1C0 != cmd->base) {
|
||||
D_8011E1C0 = cmd->base;
|
||||
if ((cmd->type == 3) && CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
|
||||
func_8010B680(globalCtx, cmd->textId1, NULL);
|
||||
Message_StartTextbox(globalCtx, cmd->textId1, NULL);
|
||||
} else if ((cmd->type == 4) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY)) {
|
||||
func_8010B680(globalCtx, cmd->textId1, NULL);
|
||||
Message_StartTextbox(globalCtx, cmd->textId1, NULL);
|
||||
} else {
|
||||
func_8010B680(globalCtx, cmd->base, NULL);
|
||||
Message_StartTextbox(globalCtx, cmd->base, NULL);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -1507,37 +1507,38 @@ void Cutscene_Command_Textbox(GlobalContext* globalCtx, CutsceneContext* csCtx,
|
|||
|
||||
if (csCtx->frames >= cmd->endFrame) {
|
||||
originalCsFrames = csCtx->frames;
|
||||
dialogState = func_8010BDBC(&globalCtx->msgCtx);
|
||||
dialogState = Message_GetState(&globalCtx->msgCtx);
|
||||
|
||||
if ((dialogState != 2) && (dialogState != 0) && (dialogState != 7) && (dialogState != 8)) {
|
||||
if ((dialogState != TEXT_STATE_CLOSING) && (dialogState != TEXT_STATE_NONE) &&
|
||||
(dialogState != TEXT_STATE_SONG_DEMO_DONE) && (dialogState != TEXT_STATE_8)) {
|
||||
csCtx->frames--;
|
||||
|
||||
if ((dialogState == 4) && (func_80106BC8(globalCtx) != 0)) {
|
||||
if ((dialogState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(globalCtx)) {
|
||||
if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
if (cmd->textId1 != 0xFFFF) {
|
||||
func_8010B720(globalCtx, cmd->textId1);
|
||||
Message_ContinueTextbox(globalCtx, cmd->textId1);
|
||||
} else {
|
||||
csCtx->frames++;
|
||||
}
|
||||
} else {
|
||||
if (cmd->textId2 != 0xFFFF) {
|
||||
func_8010B720(globalCtx, cmd->textId2);
|
||||
Message_ContinueTextbox(globalCtx, cmd->textId2);
|
||||
} else {
|
||||
csCtx->frames++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dialogState == 9) {
|
||||
if (dialogState == TEXT_STATE_9) {
|
||||
if (cmd->textId1 != 0xFFFF) {
|
||||
func_8010B720(globalCtx, cmd->textId1);
|
||||
Message_ContinueTextbox(globalCtx, cmd->textId1);
|
||||
} else {
|
||||
csCtx->frames++;
|
||||
}
|
||||
}
|
||||
|
||||
if (dialogState == 5) {
|
||||
if (func_80106BC8(globalCtx) != 0) {
|
||||
if (dialogState == TEXT_STATE_EVENT) {
|
||||
if (Message_ShouldAdvance(globalCtx)) {
|
||||
func_8010BD58(globalCtx, cmd->base);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -199,7 +199,7 @@ void EnAObj_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnAObj_WaitFinishedTalking(EnAObj* this, GlobalContext* globalCtx) {
|
||||
if (func_8002F334(&this->dyna.actor, globalCtx)) {
|
||||
if (Actor_TextboxIsClosing(&this->dyna.actor, globalCtx)) {
|
||||
EnAObj_SetupWaitTalk(this, this->dyna.actor.params);
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ void EnAObj_WaitTalk(EnAObj* this, GlobalContext* globalCtx) {
|
|||
relYawTowardsPlayer = this->dyna.actor.yawTowardsPlayer - this->dyna.actor.shape.rot.y;
|
||||
if (ABS(relYawTowardsPlayer) < 0x2800 ||
|
||||
(this->dyna.actor.params == A_OBJ_SIGNPOST_ARROW && ABS(relYawTowardsPlayer) > 0x5800)) {
|
||||
if (func_8002F194(&this->dyna.actor, globalCtx)) {
|
||||
if (Actor_ProcessTalkRequest(&this->dyna.actor, globalCtx)) {
|
||||
EnAObj_SetupAction(this, EnAObj_WaitFinishedTalking);
|
||||
} else {
|
||||
func_8002F2F4(&this->dyna.actor, globalCtx);
|
||||
|
|
|
@ -13,8 +13,8 @@ Gfx sWipeDList[] = {
|
|||
gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, COMBINED, 0,
|
||||
PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0),
|
||||
gsDPSetPrimDepth(0, 0),
|
||||
gsDPLoadTextureBlock_4b(sWipe1Tex, G_IM_FMT_I, 64, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 6,
|
||||
6, 11, G_TX_NOLOD),
|
||||
gsDPLoadTextureBlock_4b(sWipe1Tex, G_IM_FMT_I, 64, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 6, 6,
|
||||
11, G_TX_NOLOD),
|
||||
gsDPLoadMultiBlock_4b(sWipe1Tex, 0x0100, 1, G_IM_FMT_I, 64, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_MIRROR | G_TX_WRAP, 6, 6, 11, 1),
|
||||
gsDPSetTextureLUT(G_TT_NONE),
|
||||
|
|
|
@ -13,10 +13,8 @@ void GameOver_FadeInLights(GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
// This variable has the same problem as z_message's data going to rodata.
|
||||
// A fix for this is planned, and will be taken care of with z_message.
|
||||
// For now this variable is externed from z_message's rodata.s file.
|
||||
extern s16 D_80153D80; // todo: rename to `timer` and make this in function static (after rodata issue is resolved)
|
||||
// This variable cannot be moved into this file as all of z_message_PAL rodata is in the way
|
||||
extern s16 gGameOverTimer;
|
||||
|
||||
void GameOver_Update(GlobalContext* globalCtx) {
|
||||
GameOverContext* gameOverCtx = &globalCtx->gameOverCtx;
|
||||
|
@ -28,7 +26,7 @@ void GameOver_Update(GlobalContext* globalCtx) {
|
|||
|
||||
switch (gameOverCtx->state) {
|
||||
case GAMEOVER_DEATH_START:
|
||||
func_80106CCC(globalCtx);
|
||||
Message_CloseTextbox(globalCtx);
|
||||
|
||||
gSaveContext.timer1State = 0;
|
||||
gSaveContext.timer2State = 0;
|
||||
|
@ -75,7 +73,7 @@ void GameOver_Update(GlobalContext* globalCtx) {
|
|||
gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
|
||||
|
||||
Environment_InitGameOverLights(globalCtx);
|
||||
D_80153D80 = 20;
|
||||
gGameOverTimer = 20;
|
||||
if (1) {}
|
||||
v90 = VREG(90);
|
||||
v91 = VREG(91);
|
||||
|
@ -91,9 +89,9 @@ void GameOver_Update(GlobalContext* globalCtx) {
|
|||
break;
|
||||
|
||||
case GAMEOVER_DEATH_DELAY_MENU:
|
||||
D_80153D80--;
|
||||
gGameOverTimer--;
|
||||
|
||||
if (D_80153D80 == 0) {
|
||||
if (gGameOverTimer == 0) {
|
||||
globalCtx->pauseCtx.state = 8;
|
||||
gameOverCtx->state++;
|
||||
func_800AA15C();
|
||||
|
@ -102,13 +100,13 @@ void GameOver_Update(GlobalContext* globalCtx) {
|
|||
|
||||
case GAMEOVER_REVIVE_START:
|
||||
gameOverCtx->state++;
|
||||
D_80153D80 = 0;
|
||||
gGameOverTimer = 0;
|
||||
Environment_InitGameOverLights(globalCtx);
|
||||
ShrinkWindow_SetVal(0x20);
|
||||
return;
|
||||
|
||||
case GAMEOVER_REVIVE_RUMBLE:
|
||||
D_80153D80 = 50;
|
||||
gGameOverTimer = 50;
|
||||
gameOverCtx->state++;
|
||||
if (1) {}
|
||||
|
||||
|
@ -121,28 +119,28 @@ void GameOver_Update(GlobalContext* globalCtx) {
|
|||
break;
|
||||
|
||||
case GAMEOVER_REVIVE_WAIT_GROUND:
|
||||
D_80153D80--;
|
||||
gGameOverTimer--;
|
||||
|
||||
if (D_80153D80 == 0) {
|
||||
D_80153D80 = 64;
|
||||
if (gGameOverTimer == 0) {
|
||||
gGameOverTimer = 64;
|
||||
gameOverCtx->state++;
|
||||
}
|
||||
break;
|
||||
|
||||
case GAMEOVER_REVIVE_WAIT_FAIRY:
|
||||
D_80153D80--;
|
||||
gGameOverTimer--;
|
||||
|
||||
if (D_80153D80 == 0) {
|
||||
D_80153D80 = 50;
|
||||
if (gGameOverTimer == 0) {
|
||||
gGameOverTimer = 50;
|
||||
gameOverCtx->state++;
|
||||
}
|
||||
break;
|
||||
|
||||
case GAMEOVER_REVIVE_FADE_OUT:
|
||||
Environment_FadeOutGameOverLights(globalCtx);
|
||||
D_80153D80--;
|
||||
gGameOverTimer--;
|
||||
|
||||
if (D_80153D80 == 0) {
|
||||
if (gGameOverTimer == 0) {
|
||||
gameOverCtx->state = GAMEOVER_INACTIVE;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -111,7 +111,7 @@ void KaleidoSetup_Init(GlobalContext* globalCtx) {
|
|||
pauseCtx->nameDisplayTimer = 0;
|
||||
pauseCtx->nameColorSet = 0;
|
||||
pauseCtx->cursorColorSet = 4;
|
||||
pauseCtx->unk_264 = -1;
|
||||
pauseCtx->ocarinaSongIdx = -1;
|
||||
pauseCtx->cursorSpecialPos = 0;
|
||||
|
||||
View_Init(&pauseCtx->view, globalCtx->state.gfxCtx);
|
||||
|
|
|
@ -1,27 +1,34 @@
|
|||
#include "global.h"
|
||||
#include "message_data_static.h"
|
||||
|
||||
// To be moved to message_data_static header
|
||||
#define MESSAGE_NEWLINE '\x01'
|
||||
#define MESSAGE_END '\x02'
|
||||
// message_data_static symbols
|
||||
extern const char D_07000000[]; // start of file
|
||||
extern const char D_070380D4[]; // charset message (id 0xFFFC)
|
||||
extern const char D_0703811C[]; // end marker of last message
|
||||
|
||||
// stubbed in PAL
|
||||
void func_8006EE50(Font* font, s16 arg1, s16 arg2) {
|
||||
void func_8006EE50(Font* font, u16 arg1, u16 arg2) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a texture from nes_font_static for the requested `character` into the character texture buffer
|
||||
* at `codePointIndex`. The value of `character` is the ASCII codepoint subtract ' '/0x20.
|
||||
*/
|
||||
void Font_LoadChar(Font* font, u8 character, u16 codePointIndex) {
|
||||
DmaMgr_SendRequest1(&font->unk_8[codePointIndex], &_nes_font_staticSegmentRomStart[character * FONT_CHAR_TEX_SIZE],
|
||||
FONT_CHAR_TEX_SIZE, "../z_kanfont.c", 93);
|
||||
DmaMgr_SendRequest1(&font->charTexBuf[codePointIndex],
|
||||
&_nes_font_staticSegmentRomStart[character * FONT_CHAR_TEX_SIZE], FONT_CHAR_TEX_SIZE,
|
||||
"../z_kanfont.c", 93);
|
||||
}
|
||||
|
||||
void Font_LoadMessageBoxEndIcon(Font* font, u16 icon) {
|
||||
DmaMgr_SendRequest1(font->iconBuf, &_message_staticSegmentRomStart[4 * 0x1000 + icon * FONT_CHAR_TEX_SIZE],
|
||||
/**
|
||||
* Loads a message box icon from message_static, such as the ending triangle/square or choice arrow into the
|
||||
* icon buffer.
|
||||
* The different icons are given in the MessageBoxIcon enum.
|
||||
*/
|
||||
void Font_LoadMessageBoxIcon(Font* font, u16 icon) {
|
||||
DmaMgr_SendRequest1(font->iconBuf,
|
||||
&_message_staticSegmentRomStart[4 * MESSAGE_STATIC_TEX_SIZE + icon * FONT_CHAR_TEX_SIZE],
|
||||
FONT_CHAR_TEX_SIZE, "../z_kanfont.c", 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a full set of character textures based on their ordering in the message with text id 0xFFFC into
|
||||
* the font buffer.
|
||||
*/
|
||||
void Font_LoadOrderedFont(Font* font) {
|
||||
s32 len;
|
||||
s32 jj;
|
||||
|
@ -31,24 +38,29 @@ void Font_LoadOrderedFont(Font* font) {
|
|||
s32 fontBufIndex;
|
||||
s32 offset;
|
||||
|
||||
font->msgOffset = D_070380D4 - D_07000000;
|
||||
len = font->msgLength = D_0703811C - D_070380D4;
|
||||
font->msgOffset = _message_0xFFFC_nes - (const char*)_nes_message_data_staticSegmentStart;
|
||||
len = font->msgLength = _message_0xFFFD_nes - _message_0xFFFC_nes;
|
||||
|
||||
DmaMgr_SendRequest1(font->msgBuf, &_nes_message_data_staticSegmentRomStart[font->msgOffset], len, "../z_kanfont.c",
|
||||
122);
|
||||
osSyncPrintf("msg_data=%x, msg_data0=%x jj=%x\n", font->msgOffset, font->msgLength, jj = len);
|
||||
|
||||
len = jj;
|
||||
for (fontBufIndex = 0, codePointIndex = 0; font->msgBuf[codePointIndex] != MESSAGE_END; codePointIndex++) {
|
||||
if (codePointIndex > len) {
|
||||
osSyncPrintf("ERROR!! エラー!!! error───!!!!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (font->msgBuf[codePointIndex] != MESSAGE_NEWLINE) {
|
||||
fontBuf = font->fontBuf + fontBufIndex * 8;
|
||||
fontStatic = _nes_font_staticSegmentRomStart;
|
||||
|
||||
osSyncPrintf("nes_mes_buf[%d]=%d\n", codePointIndex, font->msgBuf[codePointIndex]);
|
||||
|
||||
offset = (font->msgBuf[codePointIndex] - '\x20') * FONT_CHAR_TEX_SIZE;
|
||||
DmaMgr_SendRequest1(fontBuf, fontStatic + offset, FONT_CHAR_TEX_SIZE, "../z_kanfont.c", 134);
|
||||
fontBufIndex += 0x10;
|
||||
fontBufIndex += FONT_CHAR_TEX_SIZE / 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -882,7 +882,7 @@ void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, Li
|
|||
}
|
||||
|
||||
if ((pauseCtx->state == 0) && (gameOverCtx->state == GAMEOVER_INACTIVE)) {
|
||||
if (((msgCtx->unk_E300 == 0) && (msgCtx->msgMode == 0)) || (((void)0, gSaveContext.gameMode) == 3)) {
|
||||
if (((msgCtx->msgLength == 0) && (msgCtx->msgMode == 0)) || (((void)0, gSaveContext.gameMode) == 3)) {
|
||||
if ((envCtx->unk_1A == 0) && !FrameAdvance_IsEnabled(globalCtx) &&
|
||||
(globalCtx->transitionMode == 0 || ((void)0, gSaveContext.gameMode) != 0)) {
|
||||
|
||||
|
@ -2029,7 +2029,7 @@ void func_80075B44(GlobalContext* globalCtx) {
|
|||
if ((Inventory_ReplaceItem(globalCtx, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
|
||||
Inventory_ReplaceItem(globalCtx, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO)) &&
|
||||
globalCtx->csCtx.state == 0 && !Player_InCsMode(globalCtx)) {
|
||||
func_8010B680(globalCtx, 0x3066, NULL);
|
||||
Message_StartTextbox(globalCtx, 0x3066, NULL);
|
||||
}
|
||||
globalCtx->envCtx.unk_E0++;
|
||||
}
|
||||
|
|
|
@ -63,10 +63,10 @@ void MapMark_Init(GlobalContext* globalCtx) {
|
|||
Overlay_Load(overlay->vromStart, overlay->vromEnd, overlay->vramStart, overlay->vramEnd, overlay->loadedRamAddr);
|
||||
|
||||
sLoadedMarkDataTable = gMapMarkDataTable;
|
||||
sLoadedMarkDataTable = (void*)(u32)((overlay->vramTable != NULL)
|
||||
? (void*)((u32)overlay->vramTable -
|
||||
(s32)((u32)overlay->vramStart - (u32)overlay->loadedRamAddr))
|
||||
: NULL);
|
||||
sLoadedMarkDataTable = (void*)(u32)(
|
||||
(overlay->vramTable != NULL)
|
||||
? (void*)((u32)overlay->vramTable - (s32)((u32)overlay->vramStart - (u32)overlay->loadedRamAddr))
|
||||
: NULL);
|
||||
}
|
||||
|
||||
void MapMark_ClearPointers(GlobalContext* globalCtx) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -227,8 +227,8 @@ s32 OnePointCutscene_SetInfo(GlobalContext* globalCtx, s16 camIdx, s16 csId, Act
|
|||
s16 sp7E;
|
||||
s16 sp7C;
|
||||
|
||||
func_8002F374(globalCtx, &player->actor, &sp82, &sp7E);
|
||||
func_8002F374(globalCtx, actor, &sp80, &sp7C);
|
||||
Actor_GetScreenPos(globalCtx, &player->actor, &sp82, &sp7E);
|
||||
Actor_GetScreenPos(globalCtx, actor, &sp80, &sp7C);
|
||||
if ((sp82 > 0) && (sp82 < 320) && (sp7E > 0) && (sp7E < 240) && (sp80 > 0) && (sp80 < 320) && (sp7C > 0) &&
|
||||
(sp7C < 240) &&
|
||||
!OnePointCutscene_BgCheckLineTest(&globalCtx->colCtx, &actor->focus.pos, &player->actor.focus.pos)) {
|
||||
|
|
|
@ -4,6 +4,11 @@
|
|||
#include "textures/do_action_static/do_action_static.h"
|
||||
#include "textures/icon_item_static/icon_item_static.h"
|
||||
|
||||
// TODO extract this information from the texture definitions themselves
|
||||
#define DO_ACTION_TEX_WIDTH 48
|
||||
#define DO_ACTION_TEX_HEIGHT 16
|
||||
#define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex))
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 scene;
|
||||
/* 0x01 */ u8 flags1;
|
||||
|
@ -700,7 +705,7 @@ void func_80083108(GlobalContext* globalCtx) {
|
|||
gSaveContext.buttonStatus[3] = BTN_DISABLED;
|
||||
Interface_ChangeAlpha(50);
|
||||
}
|
||||
} else if (msgCtx->msgMode == 0) {
|
||||
} else if (msgCtx->msgMode == MSGMODE_NONE) {
|
||||
if ((func_8008F2F8(globalCtx) >= 2) && (func_8008F2F8(globalCtx) < 5)) {
|
||||
if (gSaveContext.buttonStatus[0] != BTN_DISABLED) {
|
||||
sp28 = 1;
|
||||
|
@ -2031,30 +2036,32 @@ void func_80086D5C(s32* buf, u16 size) {
|
|||
}
|
||||
}
|
||||
|
||||
void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 arg2) {
|
||||
void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 loadOffset) {
|
||||
static void* sDoActionTextures[] = { gAttackDoActionENGTex, gCheckDoActionENGTex };
|
||||
|
||||
if (action >= 0x1D) {
|
||||
action = 0x0A;
|
||||
if (action >= DO_ACTION_MAX) {
|
||||
action = DO_ACTION_NONE;
|
||||
}
|
||||
|
||||
if (gSaveContext.language != 0) {
|
||||
action += 0x1D;
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
if (gSaveContext.language == 2) {
|
||||
action += 0x1D;
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
if ((action != 0x0A) && (action != 0x27) && (action != 0x44)) {
|
||||
if ((action != DO_ACTION_NONE) && (action != DO_ACTION_MAX + DO_ACTION_NONE) &&
|
||||
(action != 2 * DO_ACTION_MAX + DO_ACTION_NONE)) {
|
||||
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + (arg2 * 0x180),
|
||||
(u32)_do_action_staticSegmentRomStart + (action * 0x180), 0x180, 0,
|
||||
&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2145);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160,
|
||||
interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE),
|
||||
(u32)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE,
|
||||
0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2145);
|
||||
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
} else {
|
||||
gSegments[7] = VIRTUAL_TO_PHYSICAL(interfaceCtx->doActionSegment);
|
||||
func_80086D5C(SEGMENTED_TO_VIRTUAL(sDoActionTextures[arg2]), 0x180 / 4);
|
||||
func_80086D5C(SEGMENTED_TO_VIRTUAL(sDoActionTextures[loadOffset]), DO_ACTION_TEX_SIZE / 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2098,20 +2105,20 @@ void Interface_SetNaviCall(GlobalContext* globalCtx, u16 naviCallState) {
|
|||
void Interface_LoadActionLabelB(GlobalContext* globalCtx, u16 action) {
|
||||
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
|
||||
|
||||
if (gSaveContext.language != 0) {
|
||||
action += 0x1D;
|
||||
if (gSaveContext.language != LANGUAGE_ENG) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
if (gSaveContext.language == 2) {
|
||||
action += 0x1D;
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
action += DO_ACTION_MAX;
|
||||
}
|
||||
|
||||
interfaceCtx->unk_1FC = action;
|
||||
|
||||
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + 0x180,
|
||||
(u32)_do_action_staticSegmentRomStart + (action * 0x180), 0x180, 0, &interfaceCtx->loadQueue,
|
||||
NULL, "../z_parameter.c", 2228);
|
||||
DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE,
|
||||
(u32)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, 0,
|
||||
&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2228);
|
||||
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
interfaceCtx->unk_1FA = 1;
|
||||
|
@ -2445,9 +2452,9 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) {
|
|||
break;
|
||||
|
||||
case 7:
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && (msgCtx->msgMode == 0) &&
|
||||
(globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) && (globalCtx->sceneLoadFlag == 0) &&
|
||||
(globalCtx->transitionMode == 0) && !Gameplay_InCsMode(globalCtx)) {
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) &&
|
||||
(msgCtx->msgMode == MSGMODE_NONE) && (globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) &&
|
||||
(globalCtx->sceneLoadFlag == 0) && (globalCtx->transitionMode == 0) && !Gameplay_InCsMode(globalCtx)) {
|
||||
if ((gSaveContext.magic == 0) || ((func_8008F2F8(globalCtx) >= 2) && (func_8008F2F8(globalCtx) < 5)) ||
|
||||
((gSaveContext.equips.buttonItems[1] != ITEM_LENS) &&
|
||||
(gSaveContext.equips.buttonItems[2] != ITEM_LENS) &&
|
||||
|
@ -2633,8 +2640,9 @@ void func_80088B34(s16 arg0) {
|
|||
void Interface_DrawActionLabel(GraphicsContext* gfxCtx, void* texture) {
|
||||
OPEN_DISPS(gfxCtx, "../z_parameter.c", 2820);
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_IA, 48, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_IA, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
|
||||
G_TX_NOLOD);
|
||||
|
||||
gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
|
||||
|
||||
|
@ -2700,13 +2708,13 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) {
|
|||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + 0x300, G_IM_FMT_IA, 48, 16, 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||
G_TX_NOLOD, G_TX_NOLOD);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE * 2, G_IM_FMT_IA,
|
||||
DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
dxdy = (1 << 10) / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
width = 48.0f / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
height = 16.0f / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
width = DO_ACTION_TEX_WIDTH / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
height = DO_ACTION_TEX_HEIGHT / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
gSPTextureRectangle(
|
||||
OVERLAY_DISP++, R_START_LABEL_X(gSaveContext.language) << 2,
|
||||
R_START_LABEL_Y(gSaveContext.language) << 2, (R_START_LABEL_X(gSaveContext.language) + width) << 2,
|
||||
|
@ -3164,15 +3172,16 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
|
||||
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + 0x180, G_IM_FMT_IA, 48, 16, 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||
G_TX_NOLOD, G_TX_NOLOD);
|
||||
gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE, G_IM_FMT_IA,
|
||||
DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f);
|
||||
gSPTextureRectangle(OVERLAY_DISP++, R_B_LABEL_X(gSaveContext.language) << 2,
|
||||
R_B_LABEL_Y(gSaveContext.language) << 2, (R_B_LABEL_X(gSaveContext.language) + 48) << 2,
|
||||
(R_B_LABEL_Y(gSaveContext.language) + 16) << 2, G_TX_RENDERTILE, 0, 0, R_B_LABEL_DD,
|
||||
R_B_LABEL_DD);
|
||||
R_B_LABEL_Y(gSaveContext.language) << 2,
|
||||
(R_B_LABEL_X(gSaveContext.language) + DO_ACTION_TEX_WIDTH) << 2,
|
||||
(R_B_LABEL_Y(gSaveContext.language) + DO_ACTION_TEX_HEIGHT) << 2, G_TX_RENDERTILE, 0, 0,
|
||||
R_B_LABEL_DD, R_B_LABEL_DD);
|
||||
}
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
@ -3239,7 +3248,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
if ((interfaceCtx->unk_1EC < 2) || (interfaceCtx->unk_1EC == 3)) {
|
||||
Interface_DrawActionLabel(globalCtx->state.gfxCtx, interfaceCtx->doActionSegment);
|
||||
} else {
|
||||
Interface_DrawActionLabel(globalCtx->state.gfxCtx, interfaceCtx->doActionSegment + 0x180);
|
||||
Interface_DrawActionLabel(globalCtx->state.gfxCtx, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE);
|
||||
}
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
@ -3355,7 +3364,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer2State == 5) && (func_8010BDBC(&globalCtx->msgCtx) == 5)) {
|
||||
if ((gSaveContext.timer2State == 5) && (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT)) {
|
||||
// Trade quest timer reached 0
|
||||
D_8015FFE6 = 40;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
|
@ -3393,7 +3402,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) &&
|
||||
(globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) && (msgCtx->msgMode == 0) &&
|
||||
(globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) && (msgCtx->msgMode == MSGMODE_NONE) &&
|
||||
!(player->stateFlags2 & 0x01000000) && (globalCtx->sceneLoadFlag == 0) &&
|
||||
(globalCtx->transitionMode == 0) && !Gameplay_InCsMode(globalCtx) && (gSaveContext.minigameState != 1) &&
|
||||
(globalCtx->shootingGalleryStatus <= 1) &&
|
||||
|
@ -3474,7 +3483,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State >= 3) && (msgCtx->unk_E300 == 0)) {
|
||||
if ((gSaveContext.timer1State >= 3) && (msgCtx->msgLength == 0)) {
|
||||
D_8015FFE0--;
|
||||
if (D_8015FFE0 == 0) {
|
||||
if (gSaveContext.timer1Value != 0) {
|
||||
|
@ -3659,7 +3668,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
D_8015FFE6 = 40;
|
||||
gSaveContext.timer2State = 5;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
func_8010B680(globalCtx, 0x71B0, NULL);
|
||||
Message_StartTextbox(globalCtx, 0x71B0, NULL);
|
||||
func_8002DF54(globalCtx, NULL, 8);
|
||||
} else {
|
||||
D_8015FFE6 = 40;
|
||||
|
@ -3683,7 +3692,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
|
|||
gSaveContext.timer2Value++;
|
||||
if (gSaveContext.eventInf[1] & 1) {
|
||||
if (gSaveContext.timer2Value == 240) {
|
||||
func_8010B680(globalCtx, 0x6083, NULL);
|
||||
Message_StartTextbox(globalCtx, 0x6083, NULL);
|
||||
gSaveContext.eventInf[1] &= ~1;
|
||||
gSaveContext.timer2State = 0;
|
||||
}
|
||||
|
@ -3799,20 +3808,21 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
Input* debugInput = &globalCtx->state.input[2];
|
||||
|
||||
if (CHECK_BTN_ALL(debugInput->press.button, BTN_DLEFT)) {
|
||||
gSaveContext.language = 0;
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DUP)) {
|
||||
gSaveContext.language = 1;
|
||||
gSaveContext.language = LANGUAGE_GER;
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DRIGHT)) {
|
||||
gSaveContext.language = 2;
|
||||
gSaveContext.language = LANGUAGE_FRA;
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
}
|
||||
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0)) {
|
||||
if ((gSaveContext.minigameState == 1) || (gSaveContext.sceneSetupIndex < 4) ||
|
||||
((globalCtx->sceneNum == SCENE_SPOT20) && (gSaveContext.sceneSetupIndex == 4))) {
|
||||
if ((msgCtx->msgMode == 0) || ((msgCtx->msgMode != 0) && (globalCtx->sceneNum == SCENE_BOWLING))) {
|
||||
if ((msgCtx->msgMode == MSGMODE_NONE) ||
|
||||
((msgCtx->msgMode != MSGMODE_NONE) && (globalCtx->sceneNum == SCENE_BOWLING))) {
|
||||
if (globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) {
|
||||
func_80083108(globalCtx);
|
||||
}
|
||||
|
@ -3952,7 +3962,7 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
HealthMeter_Update(globalCtx);
|
||||
|
||||
if ((gSaveContext.timer1State >= 3) && (globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) &&
|
||||
(msgCtx->msgMode == 0) && !(player->stateFlags2 & 0x01000000) && (globalCtx->sceneLoadFlag == 0) &&
|
||||
(msgCtx->msgMode == MSGMODE_NONE) && !(player->stateFlags2 & 0x01000000) && (globalCtx->sceneLoadFlag == 0) &&
|
||||
(globalCtx->transitionMode == 0) && !Gameplay_InCsMode(globalCtx)) {}
|
||||
|
||||
if (gSaveContext.rupeeAccumulator != 0) {
|
||||
|
@ -4002,8 +4012,8 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
interfaceCtx->unk_1EC = 0;
|
||||
interfaceCtx->unk_1EE = interfaceCtx->unk_1F0;
|
||||
action = interfaceCtx->unk_1EE;
|
||||
if ((action == 0x1D) || (action == 0x1E)) {
|
||||
action = 0xA;
|
||||
if ((action == DO_ACTION_MAX) || (action == DO_ACTION_MAX + 1)) {
|
||||
action = DO_ACTION_NONE;
|
||||
}
|
||||
Interface_LoadActionLabel(interfaceCtx, action, 0);
|
||||
}
|
||||
|
@ -4022,8 +4032,8 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
interfaceCtx->unk_1EC = 0;
|
||||
interfaceCtx->unk_1EE = interfaceCtx->unk_1F0;
|
||||
action = interfaceCtx->unk_1EE;
|
||||
if ((action == 0x1D) || (action == 0x1E)) {
|
||||
action = 0xA;
|
||||
if ((action == DO_ACTION_MAX) || (action == DO_ACTION_MAX + 1)) {
|
||||
action = DO_ACTION_NONE;
|
||||
}
|
||||
Interface_LoadActionLabel(interfaceCtx, action, 0);
|
||||
}
|
||||
|
@ -4032,9 +4042,9 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
|
||||
WREG(7) = interfaceCtx->unk_1F4;
|
||||
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && (msgCtx->msgMode == 0) &&
|
||||
(globalCtx->sceneLoadFlag == 0) && (globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) &&
|
||||
(globalCtx->transitionMode == 0) &&
|
||||
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) &&
|
||||
(msgCtx->msgMode == MSGMODE_NONE) && (globalCtx->sceneLoadFlag == 0) &&
|
||||
(globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE) && (globalCtx->transitionMode == 0) &&
|
||||
((globalCtx->csCtx.state == CS_STATE_IDLE) || !Player_InCsMode(globalCtx))) {
|
||||
if ((gSaveContext.magicAcquired != 0) && (gSaveContext.magicLevel == 0)) {
|
||||
gSaveContext.magicLevel = gSaveContext.doubleMagic + 1;
|
||||
|
@ -4100,8 +4110,9 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
|
||||
if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) {
|
||||
// exit out of ocarina mode after suns song finishes playing
|
||||
if ((msgCtx->unk_E3F0 != 0x31) && (gSaveContext.sunsSongState == SUNSSONG_START)) {
|
||||
globalCtx->msgCtx.unk_E3EE = 4;
|
||||
if ((msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) &&
|
||||
(gSaveContext.sunsSongState == SUNSSONG_START)) {
|
||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||
}
|
||||
|
||||
// handle suns song in areas where time moves
|
||||
|
@ -4119,12 +4130,12 @@ void Interface_Update(GlobalContext* globalCtx) {
|
|||
if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime <= 0xC001)) {
|
||||
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
|
||||
gTimeIncrement = sPrevTimeIncrement;
|
||||
globalCtx->msgCtx.unk_E3EE = 4;
|
||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||
}
|
||||
} else if (gSaveContext.dayTime > 0xC001) {
|
||||
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
|
||||
gTimeIncrement = sPrevTimeIncrement;
|
||||
globalCtx->msgCtx.unk_E3EE = 4;
|
||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||
}
|
||||
} else if ((globalCtx->roomCtx.curRoom.unk_03 != 1) && (interfaceCtx->restrictions.sunsSong != 3)) {
|
||||
if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime < 0xC001)) {
|
||||
|
|
|
@ -226,7 +226,7 @@ void Gameplay_Init(GameState* thisx) {
|
|||
func_8005AC48(&globalCtx->mainCamera, 0xFF);
|
||||
Sram_Init(globalCtx, &globalCtx->sramCtx);
|
||||
func_80112098(globalCtx);
|
||||
func_80110F68(globalCtx);
|
||||
Message_Init(globalCtx);
|
||||
GameOver_Init(globalCtx);
|
||||
func_8006BA00(globalCtx);
|
||||
Effect_InitContext(globalCtx);
|
||||
|
@ -311,7 +311,7 @@ void Gameplay_Init(GameState* thisx) {
|
|||
gSaveContext.dogIsLost = true;
|
||||
if (Inventory_ReplaceItem(globalCtx, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
|
||||
Inventory_ReplaceItem(globalCtx, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO)) {
|
||||
func_8010B680(globalCtx, 0x3066, NULL);
|
||||
Message_StartTextbox(globalCtx, 0x3066, NULL);
|
||||
}
|
||||
gSaveContext.nextDayTime = 0xFFFE;
|
||||
} else {
|
||||
|
@ -773,7 +773,7 @@ void Gameplay_Update(GlobalContext* globalCtx) {
|
|||
LOG_NUM("1", 1, "../z_play.c", 3542);
|
||||
}
|
||||
|
||||
if ((gSaveContext.gameMode == 0) && (globalCtx->msgCtx.msgMode == 0) &&
|
||||
if ((gSaveContext.gameMode == 0) && (globalCtx->msgCtx.msgMode == MSGMODE_NONE) &&
|
||||
(globalCtx->gameOverCtx.state == GAMEOVER_INACTIVE)) {
|
||||
KaleidoSetup_Update(globalCtx);
|
||||
}
|
||||
|
@ -951,7 +951,7 @@ void Gameplay_Update(GlobalContext* globalCtx) {
|
|||
LOG_NUM("1", 1, "../z_play.c", 3733);
|
||||
}
|
||||
|
||||
func_8010F6F0(globalCtx);
|
||||
Message_Update(globalCtx);
|
||||
}
|
||||
|
||||
if (1 && HREG(63)) {
|
||||
|
@ -1045,7 +1045,7 @@ void Gameplay_DrawOverlayElements(GlobalContext* globalCtx) {
|
|||
Interface_Draw(globalCtx);
|
||||
}
|
||||
|
||||
func_8010F58C(globalCtx);
|
||||
Message_Draw(globalCtx);
|
||||
|
||||
if (globalCtx->gameOverCtx.state != GAMEOVER_INACTIVE) {
|
||||
GameOver_FadeInLights(globalCtx);
|
||||
|
|
|
@ -605,7 +605,7 @@ s32 func_8008F2F8(GlobalContext* globalCtx) {
|
|||
(((var == 0) && (this->currentTunic != PLAYER_TUNIC_GORON)) ||
|
||||
(((var == 1) || (var == 3)) && (this->currentBoots == PLAYER_BOOTS_IRON) &&
|
||||
(this->currentTunic != PLAYER_TUNIC_ZORA)))) {
|
||||
func_8010B680(globalCtx, triggerEntry->textId, NULL);
|
||||
Message_StartTextbox(globalCtx, triggerEntry->textId, NULL);
|
||||
gSaveContext.textTriggerFlags |= triggerEntry->flag;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -247,7 +247,7 @@ void func_80098904(GlobalContext* globalCtx, SceneCmd* cmd) {
|
|||
globalCtx->roomCtx.curRoom.unk_03 = cmd->roomBehavior.gpFlag1;
|
||||
globalCtx->roomCtx.curRoom.unk_02 = cmd->roomBehavior.gpFlag2 & 0xFF;
|
||||
globalCtx->roomCtx.curRoom.showInvisActors = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
|
||||
globalCtx->msgCtx.unk_E40C = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
|
||||
globalCtx->msgCtx.disableWarpSongs = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
|
||||
}
|
||||
|
||||
// Scene Command 0x0A: Mesh Header
|
||||
|
|
|
@ -22,7 +22,7 @@ typedef struct {
|
|||
/* 0x20 */ u8 doubleMagic;
|
||||
/* 0x21 */ u8 doubleDefense;
|
||||
/* 0x22 */ u8 bgsFlag;
|
||||
/* 0x23 */ u8 ocarinaGameReward;
|
||||
/* 0x23 */ u8 ocarinaGameRoundNum;
|
||||
/* 0x24 */ ItemEquips childEquips;
|
||||
/* 0x2E */ ItemEquips adultEquips;
|
||||
/* 0x38 */ u32 unk_38; // this may be incorrect, currently used for alignement
|
||||
|
@ -113,7 +113,7 @@ static SavePlayerData sNewSavePlayerData = {
|
|||
0, // doubleMagic
|
||||
0, // doubleDefense
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameReward
|
||||
0, // ocarinaGameRoundNum
|
||||
{
|
||||
{ ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
|
||||
{ SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
|
||||
|
@ -196,7 +196,7 @@ static SavePlayerData sDebugSavePlayerData = {
|
|||
0, // doubleMagic
|
||||
0, // doubleDefense
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameReward
|
||||
0, // ocarinaGameRoundNum
|
||||
{
|
||||
{ ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
|
||||
{ SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
|
||||
|
@ -845,8 +845,8 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
|
|||
gSaveContext.zTargetSetting = sramCtx->readBuff[SRAM_HEADER_ZTARGET] & 1;
|
||||
gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE];
|
||||
|
||||
if (gSaveContext.language > 2) {
|
||||
gSaveContext.language = 0;
|
||||
if (gSaveContext.language >= LANGUAGE_MAX) {
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language;
|
||||
Sram_WriteSramHeader(sramCtx);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue