diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/chooseFile.c | 236 | ||||
| -rw-r--r-- | src/code_0805436C.c | 4 | ||||
| -rw-r--r-- | src/code_0807CC3C.c | 6 | ||||
| -rw-r--r-- | src/entity.c | 2 | ||||
| -rw-r--r-- | src/ezloNag.c | 8 | ||||
| -rw-r--r-- | src/intro.c | 5 | ||||
| -rw-r--r-- | src/mainLoop.c | 2 | ||||
| -rw-r--r-- | src/npc/smith.c | 4 | ||||
| -rw-r--r-- | src/npc/teachers.c | 4 | ||||
| -rwxr-xr-x | src/object/object48.c | 2 |
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; } |
