summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2020-08-16 14:57:09 -0500
committerMarcus Huderle <huderlem@gmail.com>2020-08-16 14:57:09 -0500
commit2e782891124bbd71e1d2b4a59eb116aeac2cb6ca (patch)
tree5648fc0bef09c0e4443bae0a1316a1facb00c7ed /src
parent79cb86022ecd20cb3696588c634ecfd29b0dd08b (diff)
Start decompiling chooseFile.c
Diffstat (limited to 'src')
-rwxr-xr-xsrc/chooseFile.c236
-rw-r--r--src/code_0805436C.c4
-rw-r--r--src/code_0807CC3C.c6
-rw-r--r--src/entity.c2
-rw-r--r--src/ezloNag.c8
-rw-r--r--src/intro.c5
-rw-r--r--src/mainLoop.c2
-rw-r--r--src/npc/smith.c4
-rw-r--r--src/npc/teachers.c4
-rwxr-xr-xsrc/object/object48.c2
10 files changed, 251 insertions, 22 deletions
diff --git a/src/chooseFile.c b/src/chooseFile.c
new file mode 100755
index 00000000..6df4fec6
--- /dev/null
+++ b/src/chooseFile.c
@@ -0,0 +1,236 @@
+#include "global.h"
+#include "functions.h"
+#include "main.h"
+#include "screen.h"
+
+typedef struct {
+ u8 filler0[0x30];
+} ChooseFileState;
+
+// TODO: This occupies the same memory region as gMenu
+extern ChooseFileState gChooseFileState;
+
+typedef struct {
+ u8 filler0[0x10];
+ u16 unk10;
+ u8 filler12[0x6];
+} struct_080FC844;
+
+typedef struct {
+ u8 filler0[0x4];
+} struct_020227E8;
+
+extern struct_020227E8 gUnk_020227E8;
+
+typedef struct {
+ u8 filler0[0x800];
+} struct_02034CB0;
+
+extern struct_02034CB0 gUnk_02034CB0;
+extern struct_02034CB0 gUnk_02021F30;
+extern SaveFile gSaveFiles[];
+extern u32 gUsedPalettes;
+
+static void sub_08050624(u32);
+static void sub_0805066C(void);
+
+extern void sub_0801D66C(const void* src, void* dest, u32 size);
+extern void sub_08056FEC(u32, struct_020227E8*);
+extern void sub_0805F46C(u32, struct_080FC844*);
+extern void sub_0801C4A0(u32, u32);
+extern void sub_0801D66C(const void* src, void* dest, u32 size);
+extern void sub_080507FC(void);
+extern void sub_08080668(void);
+extern void sub_0805194C(u32);
+extern void LoadPalettes(const u8*, int, int);
+
+extern const struct_080FC844 gUnk_080FC844;
+extern const u16 gUnk_080FC85C[][3];
+extern void (*const gUnk_080FC8A4[])(void);
+extern void (*const gUnk_080FC8B0[])(void);
+extern const u8 gUnk_080FC8D0[];
+extern const u16 gUnk_080FC8DE[];
+extern const u8 gGlobalGfxAndPalettes[];
+
+void sub_08050318(u32 arg0, u32 arg1) {
+ u32 sfx;
+ struct_080FC844 var0;
+
+ sub_08050384();
+ sub_0801D66C(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844));
+ sub_08056FEC(arg1, &gUnk_020227E8);
+ var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC;
+ sub_0805F46C(gUnk_080FC85C[arg0][1], &var0);
+ sfx = gUnk_080FC85C[arg0][2];
+ if (sfx) {
+ PlaySFX(sfx);
+ }
+ gScreen.bg.bg3Control = 1;
+}
+
+void sub_08050384(void) {
+ sub_0801C4A0(0, 0);
+ _DmaZero(&gUnk_02034CB0, sizeof(gUnk_02034CB0));
+ gScreen.bg.bg3Control = 1;
+}
+
+void sub_080503A8(u32 gfxGroup) {
+ LoadGfxGroup(gfxGroup);
+ gScreen.bg.bg2yOffset = 1;
+ gScreen.affine.unk = 1;
+}
+
+void sub_080503BC(u8 state) {
+ gUnk_02032EC0.state = state;
+ _DmaZero(&gUnk_02034CB0, sizeof(gUnk_02034CB0));
+ _DmaZero(&gUnk_02021F30, sizeof(gUnk_02021F30));
+}
+
+void sub_080503E4(u32 saveFileId) {
+ u8 messageSpeed;
+ u8 brightnessPref;
+
+ if (saveFileId > 2) {
+ messageSpeed = 1;
+ brightnessPref = 1;
+ } else {
+ SaveFile* saveFile = &gSaveFiles[saveFileId];
+ messageSpeed = saveFile->messageSpeed;
+ brightnessPref = saveFile->brightnessPref;
+ }
+
+ ((struct_02000000 *)0x2000000)->messageSpeed = messageSpeed;
+ ((struct_02000000 *)0x2000000)->brightnessPref = brightnessPref;
+ gUsedPalettes = 0xFFFFFFFF;
+}
+
+void sub_0805041C(u32 saveFileId) {
+ SaveFile* saveFile;
+
+ if (saveFileId < 3) {
+ ((struct_02000000 *)0x2000000)->saveFileId = saveFileId;
+ saveFile = &gSaveFiles[saveFileId];
+ sub_0801D66C(saveFile, &gUnk_02002A40, sizeof(*saveFile));
+ }
+ sub_080503E4(saveFileId);
+}
+
+void HandleChooseFileScreen(void) {
+ sub_080AD90C();
+ gUnk_080FC8A4[gUnk_03001000.funcIndex]();
+ if (gUnk_02032EC0.transitionType != gUnk_02032EC0.state) {
+ gUnk_02032EC0.transitionType = gUnk_02032EC0.state;
+ gScreen.bg.bg1Control = 0;
+ gScreen.bg.bg2Control = 0;
+ gScreen.bg.bg1yOffset = 0;
+ gScreen.bg.bg2xOffset = 0;
+ gScreen.affine.bg2xOffset = 0;
+ gScreen.affine.bg2yOffset = 0;
+ _DmaZero(&gChooseFileState, sizeof(gChooseFileState));
+ }
+
+ sub_080507FC();
+ gUnk_080FC8B0[gUnk_02032EC0.transitionType]();
+ gUnk_02019EE0.unk0 = 0;
+ sub_0805E5C0();
+ sub_0805066C();
+ sub_0801C1D4();
+ sub_0801C208();
+ sub_080AD9B0();
+ sub_080AD918();
+ if (gUnk_02019EE0.unk3 != ((struct_02000000 *)0x2000000)->gameLanguage) {
+ gUnk_02019EE0.unk3 = ((struct_02000000 *)0x2000000)->gameLanguage;
+ sub_080503A8(0x6);
+ sub_080503A8(0xF);
+ }
+}
+
+void sub_080504F4(void) {
+ u32 i;
+
+ sub_0801DA90(1);
+ sub_080A3210();
+ _DmaZero((void*)VRAM, 0x80);
+ sub_08056418();
+ EraseAllEntities();
+ sub_08080668();
+ sub_080ADD30();
+ sub_0801CFA8(0);
+ _DmaZero(&gUnk_0200AF00, sizeof(gUnk_0200AF00));
+ _DmaZero(&gUnk_02019EE0, sizeof(gUnk_02019EE0));
+ gUnk_02019EE0.unk3 = 7;
+ gUnk_02019EE0.unk6 = ((struct_02000000 *)0x2000000)->gameLanguage > 1 ? 3 : 0;
+ _DmaZero(&gUnk_02032EC0, sizeof(gUnk_02032EC0));
+ gUnk_02032EC0.transitionType = 8;
+ sub_080503BC(0);
+ sub_0805616C();
+ sub_08050624(0);
+ sub_08050624(1);
+ sub_08050624(2);
+ sub_08056208();
+ sub_080503A8(0x5);
+ LoadPaletteGroup(0x9);
+ for (i = 0; i < 26; i++) {
+ CreateObject(0x48, i, 0);
+ }
+
+ sub_080A70AC(gUnk_080FC8D0);
+ sub_080507FC();
+ gScreen.lcd.displayControl |= 0x1F00;
+ gScreen.affine.bg3Control = 0x1E0B;
+ gScreen.controls.layerFXControl = 0x844;
+ gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10);
+ gUnk_02024490.unk0 = 1;
+ gUnk_03001000.funcIndex = 1;
+ PlaySFX(0x7);
+ DoFade(4, 8);
+}
+
+void nullsub_479(void) {
+}
+
+void sub_0805060C(void) {
+ if (!gFadeControl.active) {
+ InitScreen(SCREEN_GAMEPLAY);
+ }
+}
+
+static void sub_08050624(u32 saveFileId) {
+ SaveFile* saveFile = &gSaveFiles[saveFileId];
+ int var0 = sub_0807CF28(saveFileId, saveFile);
+ switch (var0) {
+ case -1:
+ sub_0807CF48(saveFileId);
+ // fallthrough
+ case 0:
+ sub_0805194C(saveFileId);
+ break;
+ }
+ gUnk_02019EE0.unk8[saveFileId] = var0;
+}
+
+static void sub_0805066C(void) {
+ u32 loadNewPalette;
+ const u8* paletteOffset;
+
+ loadNewPalette = FALSE;
+ if (--gUnk_02019EE0.unk1 == 0) {
+ gUnk_02019EE0.unk1 = 16;
+ gUnk_02019EE0.unk2 = (gUnk_02019EE0.unk2 + 1) % 15;
+ loadNewPalette = TRUE;
+ }
+
+ if (gUnk_02019EE0.unk2 == 0) {
+ gUnk_02019EE0.unk2 = 1;
+ gUnk_02019EE0.unk1 = (Random() & 0x7) * 16 + 8;
+ loadNewPalette = TRUE;
+ }
+
+ if (loadNewPalette) {
+ paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gUnk_02019EE0.unk2]];
+ LoadPalettes(&paletteOffset[0x11AA0], 11, 1);
+ LoadPalettes(&paletteOffset[0x11BA0], 12, 1);
+ LoadPalettes(&paletteOffset[0x11CA0], 13, 1);
+ LoadPalettes(&paletteOffset[0x11DA0], 14, 1);
+ }
+}
diff --git a/src/code_0805436C.c b/src/code_0805436C.c
index 47f8f4d2..4999aef0 100644
--- a/src/code_0805436C.c
+++ b/src/code_0805436C.c
@@ -7,7 +7,7 @@
typedef struct {
u8 filler[0xa8];
Stats stats;
-} struct_02002A40;
+} SaveFile;
typedef struct {
u8 unk;
@@ -19,7 +19,7 @@ typedef struct {
u8 unk;
} ScreenTransition;
-extern struct_02002A40 gUnk_02002A40;
+extern SaveFile gUnk_02002A40;
extern struct_080FD5B4 gUnk_080FD5B4[];
extern ScreenTransition gScreenTransition;
diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c
index e0cbbe90..45f67fd8 100644
--- a/src/code_0807CC3C.c
+++ b/src/code_0807CC3C.c
@@ -35,10 +35,10 @@ u32 sub_0807CDE8(u32 arg0) {
sub_0805616C();
switch (arg0) {
case 0:
- temp = sub_0807CF08(gUnk_02000000->saveFile, gUnk_02002A40.filler0);
+ temp = sub_0807CF08(gUnk_02000000->saveFileId, gUnk_02002A40.filler0);
break;
case 1:
- sub_0807CF48(gUnk_02000000->saveFile);
+ sub_0807CF48(gUnk_02000000->saveFileId);
temp = 1;
break;
case 2:
@@ -113,7 +113,7 @@ u32 sub_0807CF1C(u8* arg0) {
return sub_0807CF88(5, arg0);
}
-u32 sub_0807CF28(u32 arg0, void* arg1) {
+int sub_0807CF28(u32 arg0, SaveFile* arg1) {
return sub_0807D008(arg0, arg1);
}
diff --git a/src/entity.c b/src/entity.c
index 1ceabce4..cae8ee22 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -215,7 +215,7 @@ void sub_0805E92C(u32 param_1)
}
extern Entity gUnk_020369F0;
-extern void sub_0801D66C(void* dst, void* src, size_t size); // dma copy
+extern void sub_0801D66C(const void* src, void* dest, size_t size); // dma copy
extern void sub_0805E98C(void);
void sub_0805E958(void)
diff --git a/src/ezloNag.c b/src/ezloNag.c
index bce5c8d5..67cb5113 100644
--- a/src/ezloNag.c
+++ b/src/ezloNag.c
@@ -2,6 +2,7 @@
#include "entity.h"
#include "functions.h"
#include "textbox.h"
+#include "structures.h"
typedef struct {
s8 unk0;
@@ -23,13 +24,6 @@ typedef struct {
u8 unk13;
} Element;
-typedef struct {
- u8 unk0[0x24];
- u8 ezloNagFuncIndex;
-} struct_0200AF00;
-
-extern struct_0200AF00 gUnk_0200AF00;
-
///////////////////////////////////////////////////////////////
extern void sub_0805ECEC(u32, u32, u32, u32);
diff --git a/src/intro.c b/src/intro.c
index 261becd8..53466e3b 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -22,6 +22,7 @@ typedef struct {
int swordBgScaleRatio;
} IntroState;
+// TODO: This occupies the same memory region as gMenu
extern IntroState gIntroState;
enum {
@@ -125,8 +126,6 @@ static void HandleNintendoCapcomLogos(void)
extern u16 gUnk_03001010[5];
-extern u8 gUnk_02024490;
-
static void HandleTitlescreen(void)
{
int advance;
@@ -142,7 +141,7 @@ static void HandleTitlescreen(void)
EraseAllEntities();
sub_0801CFA8(0);
sub_080ADD30();
- gUnk_02024490 = 1;
+ gUnk_02024490.unk0 = 1;
LoadGfxGroup(2);
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
paletteGroup = 3;
diff --git a/src/mainLoop.c b/src/mainLoop.c
index a09d1c97..c46fd8bf 100644
--- a/src/mainLoop.c
+++ b/src/mainLoop.c
@@ -34,7 +34,7 @@ void MainLoop(void) {
sub_08056208();
gUnk_02000010.field_0x4 = 193;
sub_0804FFE4();
- DmaSet(3, 0x5000000U, gPaletteBuffer, 0x84000080U);
+ DmaCopy32(3, BG_PLTT, gPaletteBuffer, BG_PLTT_SIZE);
sub_0804FF84(1);
sub_08056418();
sub_080ADD30();
diff --git a/src/npc/smith.c b/src/npc/smith.c
index ca588dba..dc222709 100644
--- a/src/npc/smith.c
+++ b/src/npc/smith.c
@@ -5,7 +5,7 @@
typedef struct {
u8 filler[8];
u8 unk;
-} struct_02002A40;
+} SaveFile;
extern u32 GetFacingDirection(Entity*, Entity*);
extern u32 sub_0806F5A4(u32);
@@ -33,7 +33,7 @@ extern void (*const gUnk_0811036C[])(Entity*);
extern u16 gUnk_08110380[];
extern SpriteLoadData gUnk_08110354;
-extern struct_02002A40 gUnk_02002A40;
+extern SaveFile gUnk_02002A40;
extern u32 gUnk_08110390[];
extern u16 gUnk_081103D0[];
extern u32 gUnk_081103E0;
diff --git a/src/npc/teachers.c b/src/npc/teachers.c
index 0d3a9527..53d4a11a 100644
--- a/src/npc/teachers.c
+++ b/src/npc/teachers.c
@@ -5,7 +5,7 @@
typedef struct {
u8 filler[8];
u8 unk;
-} struct_02002A40;
+} SaveFile;
extern SpriteLoadData gUnk_08113910[];
extern void sub_0805E3A0(Entity*, u32);
@@ -20,7 +20,7 @@ extern u32 UpdateFuseInteraction(Entity*);
extern void sub_0807000C(Entity*);
extern void ShowNPCDialogue(Entity*, u16*);
-extern struct_02002A40 gUnk_02002A40;
+extern SaveFile gUnk_02002A40;
extern u16 gUnk_08113930[];
void Teachers(Entity* this) {
diff --git a/src/object/object48.c b/src/object/object48.c
index bbac3950..7f93ea16 100755
--- a/src/object/object48.c
+++ b/src/object/object48.c
@@ -458,7 +458,7 @@ void sub_0808EF24(Entity* this) {
} else {
this->spriteSettings.b.draw = 2;
if (this->entityType.form == 21) {
- var0 = ((struct_02000000 *)0x2000000)->field_0x5;
+ var0 = ((struct_02000000 *)0x2000000)->messageSpeed;
} else {
var0 = ((struct_02000000 *)0x2000000)->brightnessPref;
}