1
0
Fork 0
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:
Tharo 2021-11-23 01:20:30 +00:00 committed by GitHub
parent 03636166b3
commit a497f33bda
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
216 changed files with 7052 additions and 16801 deletions

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}
}
}

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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)) {

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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),

View file

@ -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;

View file

@ -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);

View file

@ -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───\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;
}
}
}

View file

@ -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++;
}

View file

@ -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

View file

@ -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)) {

View file

@ -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)) {

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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

View file

@ -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);
}