From b6374f8e0ef3830e9f0ab4cd62812c7a91ddec6e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 11 Jun 2025 20:28:22 +0200 Subject: [PATCH] split ground main, palette file, unk file and debug field map file --- data/data_8115F5C.s | 11 - include/code_8099328.h | 7 - include/ground_main.h | 2 + ld_script.ld | 7 +- src/code_803DA7C_2.c | 3 +- src/code_8099328.c | 37 -- src/code_8099360.c | 1056 +------------------------------------ src/data/ground_main.h | 7 - src/debug_field_map.c | 272 ++++++++++ src/ground_lives.c | 1 - src/ground_main.c | 106 +++- src/main_loops.c | 2 +- src/palette_util.c | 720 +++++++++++++++++++++++++ src/post_office_guide2.c | 2 +- src/wonder_mail_802D098.c | 2 +- sym_ewram.txt | 2 +- 16 files changed, 1101 insertions(+), 1136 deletions(-) delete mode 100644 data/data_8115F5C.s delete mode 100644 include/code_8099328.h delete mode 100644 src/code_8099328.c delete mode 100644 src/data/ground_main.h create mode 100644 src/debug_field_map.c create mode 100644 src/palette_util.c diff --git a/data/data_8115F5C.s b/data/data_8115F5C.s deleted file mode 100644 index 2dbd93de8..000000000 --- a/data/data_8115F5C.s +++ /dev/null @@ -1,11 +0,0 @@ -.section .rodata - -.global gUnknown_811601C -gUnknown_811601C: @ 811601C -.string "fontsppa\0" -.align 2,0 - -.global gUnknown_8116028 -gUnknown_8116028: @ 8116028 -.string "fontpal\0" -.string "pksdir0\0" diff --git a/include/code_8099328.h b/include/code_8099328.h deleted file mode 100644 index 4f19774d2..000000000 --- a/include/code_8099328.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef GUARD_CODE_8099328_H -#define GUARD_CODE_8099328_H - -bool8 sub_80992E0(s16 *param_1, s16 *param_2); -bool8 sub_8099328(u8 *); - -#endif // GUARD_CODE_8099328_H \ No newline at end of file diff --git a/include/ground_main.h b/include/ground_main.h index d1d81757d..7a52bd791 100644 --- a/include/ground_main.h +++ b/include/ground_main.h @@ -22,6 +22,8 @@ bool8 GroundMainRescueRequest(s32 r0, s32 r1); bool32 GroundMainGameEndRequest(u32 r0); bool32 GroundMainGameCancelRequest(u32 r0); bool8 sub_8098D80(u32 speed); +bool8 sub_80992E0(s16 *param_1, s16 *param_2); +bool8 sub_8099328(u8 *); extern GroundConversionStruct gGroundConversion_811BAF4[10]; diff --git a/ld_script.ld b/ld_script.ld index e6e9a2532..48827a034 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -333,8 +333,9 @@ SECTIONS { src/exclusive_pokemon.o(.text); src/position_util.o(.text); src/ground_main.o(.text); - src/code_8099328.o(.text); + src/debug_field_map.o(.text); src/code_8099360.o(.text); + src/palette_util.o(.text); src/code_809A560.o(.text); src/code_809C5C4.o(.text); src/code_809D148.o(.text); @@ -706,7 +707,9 @@ SECTIONS { src/position_util.o(.rodata); data/data_8115EB8.o(.rodata); src/ground_main.o(.rodata); - data/data_8115F5C.o(.rodata); + src/debug_field_map.o(.rodata); + src/code_8099360.o(.rodata); + src/palette_util.o(.rodata); src/code_809A560.o(.rodata); data/data_8115F5C_2.o(.rodata); src/ground_bg.o(.rodata); diff --git a/src/code_803DA7C_2.c b/src/code_803DA7C_2.c index d247e8173..c56f0b9e7 100644 --- a/src/code_803DA7C_2.c +++ b/src/code_803DA7C_2.c @@ -14,8 +14,7 @@ #include "text_1.h" #include "text_3.h" #include "dungeon_config.h" - -extern u8 GetFloorType(void); +#include "run_dungeon.h" EWRAM_DATA OpenedFile *gUnknown_202EC94 = NULL; EWRAM_DATA OpenedFile *gUnknown_202EC98 = NULL; diff --git a/src/code_8099328.c b/src/code_8099328.c deleted file mode 100644 index 960f6e336..000000000 --- a/src/code_8099328.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "global.h" -#include "code_8099328.h" -#include "code_80A26CC.h" -#include "event_flag.h" - -bool8 sub_80992E0(s16 *param_1, s16 *param_2) -{ - s32 sVar2; - - sVar2 = (s16)GetScriptVarValue(NULL,DUNGEON_ENTER); - if ((((sVar2 != -1) && (sVar2 != 0x50)) && (sVar2 != 0x51)) && (sVar2 != 0x52)) { - *param_1 = sVar2; - *param_2 = GetScriptVarValue(NULL,DUNGEON_ENTER_INDEX); - return TRUE; - } - else { - *param_1 = -1; - *param_2 = -1; - return FALSE; - } -} - -bool8 sub_8099328(u8 *dungeonId) { - s16 script_disc; - DungeonInfo* dungeonInfo; - - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); - if (script_disc == 0x51) { - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); - dungeonInfo = (DungeonInfo *)GetDungeonInfo_80A2608(script_disc); - if(dungeonInfo->dungeonIndex < 0x3f) { - *dungeonId = dungeonInfo->dungeonIndex; - return TRUE; - } - } - return FALSE; -} diff --git a/src/code_8099360.c b/src/code_8099360.c index 94e016e6a..6317f1d99 100644 --- a/src/code_8099360.c +++ b/src/code_8099360.c @@ -1,334 +1,21 @@ #include "global.h" +#include "globaldata.h" #include "bg_palette_buffer.h" #include "graphics_memory.h" #include "game_options.h" -#include "code_800558C.h" -#include "code_80A26CC.h" #include "def_filearchives.h" #include "event_flag.h" #include "file_system.h" -#include "text_1.h" -#include "text_2.h" +#include "structs/str_3000400.h" extern u8 gUnknown_20398B8; -extern const u8 gUnknown_811601C[]; - extern void sub_8003600(void); extern s32 sub_800388C(u16, const u8 *, u8); -extern void sub_8099690(u32); -extern void sub_80A4B38(void); -extern void sub_80A4B54(void); - -bool8 sub_8099360(u8 *dungeonId) { - s16 script_disc; - DungeonInfo* dungeonInfo; - - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); - if (script_disc == 0x52) { - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); - dungeonInfo = (DungeonInfo *)GetDungeonInfo_80A2608(script_disc); - *dungeonId = dungeonInfo->dungeonIndex; - return TRUE; - } - return FALSE; -} - -bool8 sub_8099394(u8 *param) { - s16 script_disc; - - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); - if (script_disc == 0x50) { - script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); - *param = script_disc; - return TRUE; - } - return FALSE; -} - -void sub_80993C0(bool8 param) { - gUnknown_20398B8 = (param == FALSE); -} - -void sub_80993D8(void) { - sub_80A4B38(); -} - -void sub_80993E4(void) { - sub_80A4B54(); -} - -/* - TODO: this is a function that is never called - and is very long. I didn't want to split up the - file or spend time decomping so here it is in - asm(); -*/ - -NAKED -UNUSED static void sub_80993F0(void) -{ - asm_unified(" .text\n" -" push {r4-r7,lr}\n" -" mov r7, r10\n" -" mov r6, r9\n" -" mov r5, r8\n" -" push {r5-r7}\n" -" sub sp, 0x28\n" -" movs r0, 0\n" -" mov r10, r0\n" -" bl ResetSoundEffectCounters\n" -" movs r0, 0x10\n" -" bl FadeOutAllMusic\n" -" ldr r1, _0809948C\n" -" ldr r2, _08099490\n" -" adds r0, r2, 0\n" -" strh r0, [r1]\n" -" movs r0, 0\n" -" bl UpdateFadeInTile\n" -" movs r0, 0\n" -" movs r1, 0x14\n" -" bl sub_80095CC\n" -" movs r0, 0\n" -" movs r1, 0x1\n" -" movs r2, 0x1\n" -" bl ShowWindows\n" -" movs r0, 0\n" -" movs r1, 0x14\n" -" bl sub_8009408\n" -" bl sub_8099648\n" -" bl sub_809975C\n" -" bl sub_809D0AC\n" -" bl sub_8014144\n" -" movs r0, 0\n" -" movs r1, 0\n" -" bl sub_8005838\n" -" bl AllocGroundMapAction\n" -" mov r7, sp\n" -" add r0, sp, 0x8\n" -" mov r8, r0\n" -"_08099454:\n" -" bl sub_801D9E4\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _0809949C\n" -" mov r0, r10\n" -" bl sub_801DA58\n" -"_08099464:\n" -" movs r0, 0\n" -" movs r1, 0\n" -" bl sub_8005838\n" -" movs r0, 0\n" -" bl sub_8012A18\n" -" bl sub_801DA78\n" -" cmp r0, 0x2\n" -" beq _08099494\n" -" cmp r0, 0x3\n" -" bne _08099464\n" -" bl sub_801DAC0\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" mov r10, r0\n" -" b _080994A2\n" -" .align 2, 0\n" -"_0809948C: .4byte gUnknown_2026E4E\n" -"_08099490: .4byte 0x00000808\n" -"_08099494:\n" -" movs r1, 0x1\n" -" negs r1, r1\n" -" mov r10, r1\n" -" b _080994A2\n" -"_0809949C:\n" -" movs r2, 0x1\n" -" negs r2, r2\n" -" mov r10, r2\n" -"_080994A2:\n" -" bl sub_801DB0C\n" -" movs r0, 0x1\n" -" negs r0, r0\n" -" cmp r10, r0\n" -" bne _080994B0\n" -" b _08099624\n" -"_080994B0:\n" -" movs r0, 0\n" -" movs r1, 0x1\n" -" movs r2, 0x1\n" -" bl ShowWindows\n" -" bl GroundMap_Reset\n" -" bl sub_809D0BC\n" -" mov r0, r10\n" -" bl GroundMap_Select\n" -" mov r0, sp\n" -" mov r1, r8\n" -" bl sub_80A579C\n" -" ldr r0, [r7, 0x4]\n" -" movs r1, 0xC0\n" -" lsls r1, 4\n" -" adds r0, r1\n" -" str r0, [r7, 0x4]\n" -" mov r2, r8\n" -" ldr r0, [r2, 0x4]\n" -" adds r0, r1\n" -" str r0, [r2, 0x4]\n" -" ldr r0, [sp]\n" -" ldr r1, _08099520\n" -" adds r0, r1\n" -" str r0, [sp]\n" -" ldr r0, [r7, 0x4]\n" -" adds r0, r1\n" -" str r0, [r7, 0x4]\n" -" ldr r0, [sp, 0x8]\n" -" movs r2, 0x80\n" -" lsls r2, 3\n" -" adds r0, r2\n" -" str r0, [sp, 0x8]\n" -" mov r0, r8\n" -" ldr r1, [r0, 0x4]\n" -" adds r1, r2\n" -" str r1, [r0, 0x4]\n" -" ldr r2, [sp, 0x8]\n" -" ldr r0, [sp]\n" -" subs r0, r2, r0\n" -" str r0, [sp, 0x20]\n" -" ldr r0, [r7, 0x4]\n" -" subs r0, r1, r0\n" -" str r0, [sp, 0x24]\n" -" movs r4, 0\n" -" movs r5, 0\n" -" movs r0, 0x4\n" -" bl sub_80999E8\n" -" mov r9, r5\n" -" b _08099604\n" -" .align 2, 0\n" -"_08099520: .4byte 0xfffffc00\n" -"_08099524:\n" -" ldr r0, _0809953C\n" -" ldrh r1, [r0, 0x2]\n" -" ldrh r6, [r0]\n" -" movs r0, 0x4\n" -" ands r1, r0\n" -" cmp r1, 0\n" -" beq _08099540\n" -" bl sub_80999FC\n" -" movs r1, 0x1\n" -" mov r9, r1\n" -" b _080995AE\n" -" .align 2, 0\n" -"_0809953C: .4byte gRealInputs\n" -"_08099540:\n" -" adds r0, r6, 0\n" -" bl sub_809CFE8\n" -" lsls r0, 24\n" -" asrs r1, r0, 24\n" -" movs r2, 0x1\n" -" negs r2, r2\n" -" cmp r1, r2\n" -" beq _0809959A\n" -" add r0, sp, 0x10\n" -" movs r2, 0x80\n" -" lsls r2, 1\n" -" bl SetVecFromDirectionSpeed\n" -" ldr r2, [sp, 0x10]\n" -" ldr r3, [sp, 0x14]\n" -" movs r0, 0x2\n" -" ands r6, r0\n" -" cmp r6, 0\n" -" beq _0809956A\n" -" movs r0, 0x4\n" -"_0809956A:\n" -" adds r1, r0, 0\n" -" muls r1, r2\n" -" adds r1, r4\n" -" adds r4, r1, 0\n" -" muls r0, r3\n" -" adds r5, r0\n" -" cmp r1, 0\n" -" bge _0809957E\n" -" movs r4, 0\n" -" b _08099588\n" -"_0809957E:\n" -" ldr r0, [sp, 0x20]\n" -" cmp r4, r0\n" -" blt _08099588\n" -" adds r4, r0, 0\n" -" subs r4, 0x1\n" -"_08099588:\n" -" cmp r5, 0\n" -" bge _08099590\n" -" movs r5, 0\n" -" b _0809959A\n" -"_08099590:\n" -" ldr r1, [sp, 0x24]\n" -" cmp r5, r1\n" -" blt _0809959A\n" -" adds r5, r1, 0\n" -" subs r5, 0x1\n" -"_0809959A:\n" -" ldr r0, [sp]\n" -" adds r0, r4\n" -" str r0, [sp, 0x18]\n" -" ldr r0, [r7, 0x4]\n" -" adds r0, r5\n" -" add r1, sp, 0x18\n" -" str r0, [r1, 0x4]\n" -" movs r0, 0\n" -" bl sub_809D158\n" -"_080995AE:\n" -" bl sub_809D25C\n" -" bl sub_80A59DC\n" -" bl DrawDialogueBoxString\n" -" movs r0, 0\n" -" movs r1, 0\n" -" bl sub_8005838\n" -" bl sub_80060EC\n" -" ldr r0, _08099620\n" -" ldr r0, [r0]\n" -" ldrb r0, [r0, 0xA]\n" -" bl nullsub_8\n" -" bl sub_8005180\n" -" bl sub_8099BE4\n" -" bl sub_8099744\n" -" bl UpdateSoundEffectCounters\n" -" bl WaitForNextFrameAndAdvanceRNG\n" -" bl LoadBufferedInputs\n" -" bl nullsub_120\n" -" bl sub_80A5E70\n" -" bl xxx_call_update_bg_vram\n" -" bl CopySpritesToOam\n" -" bl sub_8005304\n" -" bl sub_8099750\n" -" bl DoScheduledMemCopies\n" -"_08099604:\n" -" bl xxx_call_update_bg_sound_input\n" -" movs r0, 0\n" -" bl ResetSprites\n" -" mov r2, r9\n" -" cmp r2, 0\n" -" beq _08099524\n" -" bl sub_8099B94\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" bne _080995AE\n" -" b _08099454\n" -" .align 2, 0\n" -"_08099620: .4byte gGameOptionsRef\n" -"_08099624:\n" -" movs r0, 0x10\n" -" bl FadeOutAllMusic\n" -" bl FreeGroundMapAction\n" -" bl sub_8099768\n" -" bl nullsub_103\n" -" add sp, 0x28\n" -" pop {r3-r5}\n" -" mov r8, r3\n" -" mov r9, r4\n" -" mov r10, r5\n" -" pop {r4-r7}\n" -" pop {r0}\n" -" bx r0\n"); -} +extern void sub_8003810(u16 idx, unkStruct_3000400 param_2); void sub_809965C(void); +void sub_8099690(u32 param_1); void sub_8099648(void) { @@ -342,18 +29,15 @@ void nullsub_103(void) void sub_809965C(void) { - OpenedFile *temp; + OpenedFile *file; sub_8099690(0); - // gUnknown_811601C -> "fontsppa" string - temp = OpenFileAndGetFileDataPtr(gUnknown_811601C, &gSystemFileArchive); + file = OpenFileAndGetFileDataPtr("fontsppa", &gSystemFileArchive); - sub_800388C(0x1f0, temp->data, 0x10); - CloseFile(temp); + sub_800388C(0x1f0, file->data, 0x10); + CloseFile(file); } -extern const u8 gUnknown_8116028[]; - void sub_8099690(u32 param_1) { OpenedFile *temp; @@ -363,7 +47,7 @@ void sub_8099690(u32 param_1) s32 index; - temp = OpenFileAndGetFileDataPtr(gUnknown_8116028, &gSystemFileArchive); + temp = OpenFileAndGetFileDataPtr("fontpal", &gSystemFileArchive); switch(param_1) { @@ -390,21 +74,6 @@ void sub_8099690(u32 param_1) CloseFile(temp); } -// TODO: figure out if a new file starts here... -#include "structs/str_3000400.h" -#include "code_8099360.h" - -extern void sub_8003810(u16 idx, unkStruct_3000400 param_2); -extern void sub_80039B8(void); -extern void TransferBGPaletteBuffer(void); -extern void sub_80037C8(u16, u32, unkStruct_3000400); -extern void sub_8003664(u16 param_1, u16 param_2); -extern void sub_80036AC(u16, u32, unkStruct_3000400); -extern void sub_80036F4(u16, u32, unkStruct_3000400); -extern void sub_8003780(u16, u32, unkStruct_3000400); - -void sub_809977C(void); - UNUSED static void sub_8099708(u16 a0, unkStruct_3000400 a1) { sub_8003810(a0, a1); @@ -418,710 +87,3 @@ void sub_809971C(u16 idx, unkStruct_3000400 *strPtrs, s32 n) sub_8003810(idx++, *strPtrs++); } } - -void sub_8099744(void) -{ - sub_80039B8(); -} - -void sub_8099750(void) -{ - TransferBGPaletteBuffer(); -} - -void sub_809975C(void) -{ - sub_809977C(); -} - -void sub_8099768(void) -{ - sub_809977C(); - sub_8099744(); - sub_8099750(); -} - -struct UnkStruct_2039958 -{ - s32 unk0; - s16 unk4; - s16 unk6; - u16 unk8; - u16 unkA; - u16 unkC; -}; - -struct UnkStruct_2039978 -{ - u32 unk0; - unkStruct_3000400 unk4; - struct UnkStruct_2039958 unk8; -}; - -static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039958 = {0}; -static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039968 = {0}; -static EWRAM_DATA struct UnkStruct_2039978 gUnknown_2039978 = {0}; -static EWRAM_DATA u8 gUnknown_2039990 = FALSE; -static EWRAM_DATA s16 gUnknown_2039992 = 0; -UNUSED static EWRAM_DATA s32 sUnused = 0; -#define ARR_COUNT_2039998 33 -static EWRAM_DATA u16 gUnknown_2039998[ARR_COUNT_2039998] = {0}; - -void sub_8099838(struct UnkStruct_2039958 *a0); -void sub_8099848(struct UnkStruct_2039958 *a0); -void sub_8099DD0(u16 a0); -void sub_8099E58(u16 a0); -void sub_8099E80(u16 a0, unkStruct_3000400 a1); - -void sub_809977C(void) -{ - s32 i; - - gUnknown_2039990 = FALSE; - gUnknown_2039992 = 0; - sub_8099838(&gUnknown_2039958); - sub_8099838(&gUnknown_2039968); - sub_8099838(&gUnknown_2039978.unk8); - gUnknown_2039978.unk0 = 0; - gUnknown_2039978.unk8.unkC = 0x100; - gUnknown_2039958.unkC = 0; - sub_8099DD0(0); - gUnknown_2039968.unkC = 0x100; - sub_8099E58(0x100); - for (i = 0; i < ARR_COUNT_2039998; i++) { - gUnknown_2039998[i] = 0; - } -} - -void sub_80997F4(u16 a0, u32 a1) -{ - gUnknown_2039998[a0] = a1; - sub_8099848(&gUnknown_2039958); - sub_8099848(&gUnknown_2039968); - sub_8099848(&gUnknown_2039978.unk8); -} - -UNUSED static u32 sub_8099828(u16 a0) -{ - return gUnknown_2039998[a0]; -} - -void sub_8099838(struct UnkStruct_2039958 *a0) -{ - a0->unk0 = 1; - a0->unkC = 0; - a0->unk4 = 0; - a0->unk6 = 0; -} - -void sub_8099848(struct UnkStruct_2039958 *a0) -{ - if (a0->unk0 == 0) { - a0->unk0 = 1; - } -} - -void sub_809985C(struct UnkStruct_2039958 *a0, s32 a1) -{ - if (a1 >= 0) { - if (a1 == 0) { - a0->unkC = 0x100; - a0->unk0 = 1; - } - else { - a0->unk0 = 2; - } - } - else { - a1 = 30; - a0->unk0 = 2; - } - - a0->unk4 = a1; - a0->unk6 = a1; -} - -void sub_8099880(struct UnkStruct_2039958 *a0, s32 a1) -{ - if (a1 >= 0) { - if (a1 == 0) { - a0->unkC = a1; - a0->unk0 = 1; - } - else { - a0->unk0 = 3; - } - } - else { - a1 = 30; - a0->unk0 = 3; - } - - a0->unk4 = a1; - a0->unk6 = a1; -} - -void sub_80998A0(struct UnkStruct_2039958 *a0, s32 a1, u16 a2, u16 a3) -{ - if (a1 < 0) a1 = 30; - - if (a2 > a3) { - a0->unk0 = 5; - a0->unkA = a2 - a3; - } - else if (a2 < a3) { - a0->unk0 = 4; - a0->unkA = a3 - a2; - } - else { - a0->unk0 = 1; - a0->unkA = 0; - } - - a0->unk4 = a1; - a0->unk6 = a1; - a0->unkC = a2; - a0->unk8 = a3; -} - -bool8 sub_80998E0(struct UnkStruct_2039958 *a0) -{ - switch (a0->unk0) { - case 0: - break; - case 1: - a0->unk0 = 0; - return TRUE; - case 2: - if (--a0->unk4 > 0) { - u16 var = 0x100 - ((a0->unk4 << 8) / a0->unk6); - if (a0->unkC < var) { - a0->unkC = var; - } - } - else { - a0->unkC = 0x100; - a0->unk0 = 0; - } - return TRUE; - case 3: - if (--a0->unk4 > 0) { - u16 var = (a0->unk4 << 8) / a0->unk6; - if (a0->unkC > var) { - a0->unkC = var; - } - } - else { - a0->unkC = 0; - a0->unk0 = 0; - } - return TRUE; - case 4: - if (--a0->unk4 > 0) { - a0->unkC = a0->unk8 - ((a0->unk4 * a0->unkA) / a0->unk6); - } - else { - a0->unkC = a0->unk8; - a0->unk0 = 0; - } - return TRUE; - case 5: - if (--a0->unk4 > 0) { - a0->unkC = a0->unk8 + ((a0->unk4 * a0->unkA) / a0->unk6); - } - else { - a0->unkC = a0->unk8; - a0->unk0 = 0; - } - return TRUE; - } - - return FALSE; -} - -void sub_80999D4(s32 a0) -{ - gUnknown_2039990 = TRUE; - gUnknown_2039992 = a0; -} - -void sub_80999E8(s32 a0) -{ - sub_809985C(&gUnknown_2039958, a0); -} - -void sub_80999FC(s32 a0) -{ - sub_8099880(&gUnknown_2039958, a0); -} - -void sub_8099A10(s32 a1, u16 a2, u16 a3) -{ - sub_80998A0(&gUnknown_2039958, a1, a2, a3); -} - -void sub_8099A34(s32 a0) -{ - sub_809985C(&gUnknown_2039968, a0); -} - -void sub_8099A48(s32 a0) -{ - sub_8099880(&gUnknown_2039968, a0); -} - -void sub_8099A5C(s32 a0, s32 a1, unkStruct_3000400 a2) -{ - gUnknown_2039978.unk0 = a0; - gUnknown_2039978.unk4 = a2; - gUnknown_2039978.unk8.unkC = 0; - sub_809985C(&gUnknown_2039978.unk8, a1); - - switch (a0) { - case 1: - case 3: - gUnknown_2039968.unkC = 0x100; - gUnknown_2039958.unkC = 0x100; - break; - case 9: - case 11: - gUnknown_2039968.unkC = 0x100; - break; - case 5: - case 7: - case 13: - case 14: - gUnknown_2039958.unkC = 0x100; - break; - } -} - -void sub_8099AFC(s32 a0, s32 a1, unkStruct_3000400 a2) -{ - gUnknown_2039978.unk0 = a0; - gUnknown_2039978.unk4 = a2; - gUnknown_2039978.unk8.unkC = 0x100; - sub_8099880(&gUnknown_2039978.unk8, a1); - - switch (a0) { - case 2: - case 4: - gUnknown_2039968.unkC = 0; - gUnknown_2039958.unkC = 0; - break; - case 10: - case 12: - gUnknown_2039968.unkC = 0; - break; - case 6: - case 8: - case 13: - case 14: - gUnknown_2039958.unkC = 0; - break; - } -} - -bool8 sub_8099B94(void) -{ - if (gUnknown_2039990) - return TRUE; - if (gUnknown_2039978.unk0 != 0) { - return (gUnknown_2039978.unk8.unk0 != 0); - } - return (gUnknown_2039958.unk0 != 0 || gUnknown_2039968.unk0 != 0); -} - -void sub_8099BE4(void) -{ - if (gUnknown_2039978.unk0 != 0 || gUnknown_2039978.unk8.unk0 != 0) { - if (sub_80998E0(&gUnknown_2039978.unk8)) { - sub_8099E80(gUnknown_2039978.unk8.unkC, gUnknown_2039978.unk4); - } - else if (gUnknown_2039978.unk8.unk0 == 0) { - switch (gUnknown_2039978.unk0) { - case 0: - break; - case 1: - case 3: - case 5: - case 7: - case 9: - case 11: - if (gUnknown_2039978.unk8.unkC >= 256) { - gUnknown_2039978.unk0 = 0; - } - else if (gUnknown_2039990) { - s32 var = 0; - switch (gUnknown_2039978.unk0) { - case 1: var = 2; break; - case 3: var = 4; break; - case 5: var = 6; break; - case 7: var = 8; break; - } - - if (var != 0) { - sub_8099AFC(var, gUnknown_2039992, gUnknown_2039978.unk4); - } - else { - gUnknown_2039978.unk0 = 0; - } - } - break; - case 2: - case 4: - case 6: - case 8: - case 10: - case 12: - case 13: - case 14: - if (gUnknown_2039978.unk8.unkC == 0) { - gUnknown_2039978.unk0 = 0; - } - else if (gUnknown_2039990) { - sub_8099AFC(gUnknown_2039978.unk0, gUnknown_2039992, gUnknown_2039978.unk4); - } - break; - } - } - } - else if (gUnknown_2039990) { - bool8 r5 = TRUE; - if (gUnknown_2039958.unkC != 0 || gUnknown_2039958.unk0 != 0) { - r5 = FALSE; - if (gUnknown_2039958.unk0 != 3) { - sub_8099880(&gUnknown_2039958, gUnknown_2039992); - } - if (sub_80998E0(&gUnknown_2039958)) { - sub_8099DD0(gUnknown_2039958.unkC); - } - } - if (gUnknown_2039968.unkC != 0 || gUnknown_2039968.unk0 != 0) { - r5 = FALSE; - if (gUnknown_2039968.unk0 != 3) { - sub_8099880(&gUnknown_2039968, gUnknown_2039992); - } - if (sub_80998E0(&gUnknown_2039968)) { - sub_8099E58(gUnknown_2039968.unkC); - } - } - - if (r5) { - gUnknown_2039990 = FALSE; - } - } - else { - if (sub_80998E0(&gUnknown_2039958)) { - sub_8099DD0(gUnknown_2039958.unkC); - } - if (sub_80998E0(&gUnknown_2039968)) { - sub_8099E58(gUnknown_2039968.unkC); - } - } -} - -void sub_8099DD0(u16 a0) -{ - s32 i; - - for (i = 0; i < 14; i++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i, 0x100); - } - else { - sub_8003664(i, a0); - } - } - - for (i = 16; i < 31; i++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i, 0x100); - } - else { - sub_8003664(i, a0); - } - } - - sub_8003664(32, a0); -} - -void sub_8099E58(u16 a0) -{ - sub_8003664(15, a0); - sub_8003664(14, a0); - sub_8003664(31, a0); -} - -void sub_8099E80(u16 param_1,unkStruct_3000400 param_2) -{ - s32 i; - - switch (gUnknown_2039978.unk0) { - case 0: - break; - case 1: - for (i = 0; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - - for (i = 16; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - break; - case 9: - for (i = 14; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - - for (i = 31; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - break; - case 5: - for (i = 0; i < 14; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - - for (i = 16; i < 31; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036AC(i,param_1,param_2); - } - } - break; - case 2: - for (i = 0; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - - for (i = 16; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - break; - case 10: - for (i = 14; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - - for (i = 31; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - break; - case 6: - for (i = 0; i < 14; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - - for (i = 16; i < 31; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_80036F4(i,param_1,param_2); - } - } - break; - case 3: - for (i = 0; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - - for (i = 16; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - break; - case 11: - for (i = 14; i < 16; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - - for (i = 31; i < 32; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - break; - case 7: - for (i = 0; i < 14; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - - for (i = 16; i < 31; i++) { - if (gUnknown_2039998[i] & 2) { - sub_8003664(i,0x100); - } - else { - sub_8003780(i,param_1,param_2); - } - } - break; - case 4: - for (i = 0; i < 16; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - - for (i = 16; i < 32; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - break; - case 12: - for (i = 14; i < 16; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - - for (i = 31; i < 32; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - break; - case 13: - case 14: - switch (gUnknown_2039978.unk0) { - case 13: - param_2.unk0[0] = 0x90; - param_2.unk0[1] = 0x90; - param_2.unk0[2] = 0xFF; - param_2.unk0[3] = 0xFF; - break; - case 14: - param_2.unk0[0] = 0xFF; - param_2.unk0[1] = 0xC0; - param_2.unk0[2] = 0x80; - param_2.unk0[3] = 0xFF; - break; - } - // NOTE: fallthrough needed here - case 8: - for (i = 0; i < 14; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - - for (i = 16; i < 31; i ++) { - if (gUnknown_2039998[i] & 1) { - sub_8003664(i,0x100); - } - else if (gUnknown_2039998[i] & 2) { - sub_8003664(i,param_1); - } - else { - sub_80037C8(i,param_1,param_2); - } - } - break; - } -} diff --git a/src/data/ground_main.h b/src/data/ground_main.h deleted file mode 100644 index 13aea2fdc..000000000 --- a/src/data/ground_main.h +++ /dev/null @@ -1,7 +0,0 @@ -ALIGNED(4) static const u8 sFmtGroundRequest[] = "GroundMain ground request %3d %3d"; -ALIGNED(4) static const u8 sFmtRescueRequest[] = "GroundMain recue request %3d %3d"; -ALIGNED(4) static const u8 sFmtUserRescueRequest[] = "GroundMain user rescue request %3d"; -ALIGNED(4) static const u8 sFmtGameEndRequest[] = "GroundMain game end request %3d"; -ALIGNED(4) static const u8 sFmtGameCancelRequest[] = "GroundMain game cancel request %3d"; -UNUSED static const u8 sFill1[] = _("pksdir0"); -UNUSED static const u8 sFill2[] = _("pksdir0"); \ No newline at end of file diff --git a/src/debug_field_map.c b/src/debug_field_map.c new file mode 100644 index 000000000..eb5e17866 --- /dev/null +++ b/src/debug_field_map.c @@ -0,0 +1,272 @@ +#include "global.h" +#include "globaldata.h" + +/* + TODO: this is a function that is never called + and is very long. I didn't want to split up the + file or spend time decomping so here it is in + asm(); +*/ + +NAKED +UNUSED static void sub_80993F0(void) +{ + asm_unified(" .text\n" +" push {r4-r7,lr}\n" +" mov r7, r10\n" +" mov r6, r9\n" +" mov r5, r8\n" +" push {r5-r7}\n" +" sub sp, 0x28\n" +" movs r0, 0\n" +" mov r10, r0\n" +" bl ResetSoundEffectCounters\n" +" movs r0, 0x10\n" +" bl FadeOutAllMusic\n" +" ldr r1, _0809948C\n" +" ldr r2, _08099490\n" +" adds r0, r2, 0\n" +" strh r0, [r1]\n" +" movs r0, 0\n" +" bl UpdateFadeInTile\n" +" movs r0, 0\n" +" movs r1, 0x14\n" +" bl sub_80095CC\n" +" movs r0, 0\n" +" movs r1, 0x1\n" +" movs r2, 0x1\n" +" bl ShowWindows\n" +" movs r0, 0\n" +" movs r1, 0x14\n" +" bl sub_8009408\n" +" bl sub_8099648\n" +" bl sub_809975C\n" +" bl sub_809D0AC\n" +" bl sub_8014144\n" +" movs r0, 0\n" +" movs r1, 0\n" +" bl sub_8005838\n" +" bl AllocGroundMapAction\n" +" mov r7, sp\n" +" add r0, sp, 0x8\n" +" mov r8, r0\n" +"_08099454:\n" +" bl sub_801D9E4\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0809949C\n" +" mov r0, r10\n" +" bl sub_801DA58\n" +"_08099464:\n" +" movs r0, 0\n" +" movs r1, 0\n" +" bl sub_8005838\n" +" movs r0, 0\n" +" bl sub_8012A18\n" +" bl sub_801DA78\n" +" cmp r0, 0x2\n" +" beq _08099494\n" +" cmp r0, 0x3\n" +" bne _08099464\n" +" bl sub_801DAC0\n" +" lsls r0, 16\n" +" asrs r0, 16\n" +" mov r10, r0\n" +" b _080994A2\n" +" .align 2, 0\n" +"_0809948C: .4byte gUnknown_2026E4E\n" +"_08099490: .4byte 0x00000808\n" +"_08099494:\n" +" movs r1, 0x1\n" +" negs r1, r1\n" +" mov r10, r1\n" +" b _080994A2\n" +"_0809949C:\n" +" movs r2, 0x1\n" +" negs r2, r2\n" +" mov r10, r2\n" +"_080994A2:\n" +" bl sub_801DB0C\n" +" movs r0, 0x1\n" +" negs r0, r0\n" +" cmp r10, r0\n" +" bne _080994B0\n" +" b _08099624\n" +"_080994B0:\n" +" movs r0, 0\n" +" movs r1, 0x1\n" +" movs r2, 0x1\n" +" bl ShowWindows\n" +" bl GroundMap_Reset\n" +" bl sub_809D0BC\n" +" mov r0, r10\n" +" bl GroundMap_Select\n" +" mov r0, sp\n" +" mov r1, r8\n" +" bl sub_80A579C\n" +" ldr r0, [r7, 0x4]\n" +" movs r1, 0xC0\n" +" lsls r1, 4\n" +" adds r0, r1\n" +" str r0, [r7, 0x4]\n" +" mov r2, r8\n" +" ldr r0, [r2, 0x4]\n" +" adds r0, r1\n" +" str r0, [r2, 0x4]\n" +" ldr r0, [sp]\n" +" ldr r1, _08099520\n" +" adds r0, r1\n" +" str r0, [sp]\n" +" ldr r0, [r7, 0x4]\n" +" adds r0, r1\n" +" str r0, [r7, 0x4]\n" +" ldr r0, [sp, 0x8]\n" +" movs r2, 0x80\n" +" lsls r2, 3\n" +" adds r0, r2\n" +" str r0, [sp, 0x8]\n" +" mov r0, r8\n" +" ldr r1, [r0, 0x4]\n" +" adds r1, r2\n" +" str r1, [r0, 0x4]\n" +" ldr r2, [sp, 0x8]\n" +" ldr r0, [sp]\n" +" subs r0, r2, r0\n" +" str r0, [sp, 0x20]\n" +" ldr r0, [r7, 0x4]\n" +" subs r0, r1, r0\n" +" str r0, [sp, 0x24]\n" +" movs r4, 0\n" +" movs r5, 0\n" +" movs r0, 0x4\n" +" bl sub_80999E8\n" +" mov r9, r5\n" +" b _08099604\n" +" .align 2, 0\n" +"_08099520: .4byte 0xfffffc00\n" +"_08099524:\n" +" ldr r0, _0809953C\n" +" ldrh r1, [r0, 0x2]\n" +" ldrh r6, [r0]\n" +" movs r0, 0x4\n" +" ands r1, r0\n" +" cmp r1, 0\n" +" beq _08099540\n" +" bl sub_80999FC\n" +" movs r1, 0x1\n" +" mov r9, r1\n" +" b _080995AE\n" +" .align 2, 0\n" +"_0809953C: .4byte gRealInputs\n" +"_08099540:\n" +" adds r0, r6, 0\n" +" bl sub_809CFE8\n" +" lsls r0, 24\n" +" asrs r1, r0, 24\n" +" movs r2, 0x1\n" +" negs r2, r2\n" +" cmp r1, r2\n" +" beq _0809959A\n" +" add r0, sp, 0x10\n" +" movs r2, 0x80\n" +" lsls r2, 1\n" +" bl SetVecFromDirectionSpeed\n" +" ldr r2, [sp, 0x10]\n" +" ldr r3, [sp, 0x14]\n" +" movs r0, 0x2\n" +" ands r6, r0\n" +" cmp r6, 0\n" +" beq _0809956A\n" +" movs r0, 0x4\n" +"_0809956A:\n" +" adds r1, r0, 0\n" +" muls r1, r2\n" +" adds r1, r4\n" +" adds r4, r1, 0\n" +" muls r0, r3\n" +" adds r5, r0\n" +" cmp r1, 0\n" +" bge _0809957E\n" +" movs r4, 0\n" +" b _08099588\n" +"_0809957E:\n" +" ldr r0, [sp, 0x20]\n" +" cmp r4, r0\n" +" blt _08099588\n" +" adds r4, r0, 0\n" +" subs r4, 0x1\n" +"_08099588:\n" +" cmp r5, 0\n" +" bge _08099590\n" +" movs r5, 0\n" +" b _0809959A\n" +"_08099590:\n" +" ldr r1, [sp, 0x24]\n" +" cmp r5, r1\n" +" blt _0809959A\n" +" adds r5, r1, 0\n" +" subs r5, 0x1\n" +"_0809959A:\n" +" ldr r0, [sp]\n" +" adds r0, r4\n" +" str r0, [sp, 0x18]\n" +" ldr r0, [r7, 0x4]\n" +" adds r0, r5\n" +" add r1, sp, 0x18\n" +" str r0, [r1, 0x4]\n" +" movs r0, 0\n" +" bl sub_809D158\n" +"_080995AE:\n" +" bl sub_809D25C\n" +" bl sub_80A59DC\n" +" bl DrawDialogueBoxString\n" +" movs r0, 0\n" +" movs r1, 0\n" +" bl sub_8005838\n" +" bl sub_80060EC\n" +" ldr r0, _08099620\n" +" ldr r0, [r0]\n" +" ldrb r0, [r0, 0xA]\n" +" bl nullsub_8\n" +" bl sub_8005180\n" +" bl sub_8099BE4\n" +" bl sub_8099744\n" +" bl UpdateSoundEffectCounters\n" +" bl WaitForNextFrameAndAdvanceRNG\n" +" bl LoadBufferedInputs\n" +" bl nullsub_120\n" +" bl sub_80A5E70\n" +" bl xxx_call_update_bg_vram\n" +" bl CopySpritesToOam\n" +" bl sub_8005304\n" +" bl sub_8099750\n" +" bl DoScheduledMemCopies\n" +"_08099604:\n" +" bl xxx_call_update_bg_sound_input\n" +" movs r0, 0\n" +" bl ResetSprites\n" +" mov r2, r9\n" +" cmp r2, 0\n" +" beq _08099524\n" +" bl sub_8099B94\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _080995AE\n" +" b _08099454\n" +" .align 2, 0\n" +"_08099620: .4byte gGameOptionsRef\n" +"_08099624:\n" +" movs r0, 0x10\n" +" bl FadeOutAllMusic\n" +" bl FreeGroundMapAction\n" +" bl sub_8099768\n" +" bl nullsub_103\n" +" add sp, 0x28\n" +" pop {r3-r5}\n" +" mov r8, r3\n" +" mov r9, r4\n" +" mov r10, r5\n" +" pop {r4-r7}\n" +" pop {r0}\n" +" bx r0\n"); +} diff --git a/src/ground_lives.c b/src/ground_lives.c index 0390f0aaa..f39fd972b 100644 --- a/src/ground_lives.c +++ b/src/ground_lives.c @@ -10,7 +10,6 @@ #include "pokemon.h" #include "friend_area.h" #include "random.h" -#include "code_8099328.h" #include "code_80958E8.h" #include "debug.h" #include "other_random.h" diff --git a/src/ground_main.c b/src/ground_main.c index 342dbe5e0..bf98fc8c1 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -36,8 +36,6 @@ EWRAM_DATA u8 gUnknown_2039950 = 0; EWRAM_INIT bool8 gUnknown_203B49C = {0}; EWRAM_INIT u8 gUnknown_203B49D = {0}; -#include "data/ground_main.h" - extern void sub_809B57C(); extern void GroundScript_Unlock(); extern void sub_809D25C(); @@ -66,7 +64,6 @@ extern s16 sub_80A2654(s16 r0); extern void sub_809A71C(s32); extern bool8 sub_809AFAC(void); extern bool8 sub_80048BC(void); -void FadeOutAllMusic(u16 speed); extern u8 sub_80023E4(u32); extern bool8 sub_809C740(void); extern bool8 sub_8099B94(void); @@ -115,8 +112,6 @@ extern void sub_809CA20(void); extern void sub_80A6E80(void); extern void sub_8099BE4(void); extern void sub_8099744(void); -extern void UpdateSoundEffectCounters(void); -extern void IncrementPlayTime(struct PlayTimeStruct *); extern void WaitForNextFrameAndAdvanceRNG(void); extern void LoadBufferedInputs(void); extern void nullsub_120(void); @@ -566,7 +561,7 @@ bool8 GroundMainGroundRequest(s32 r0, s32 r1, s32 r2) s32 temp = (s16) r0; // force a asr shift if(gUnknown_20398A8 == 0) { - Log(0, sFmtGroundRequest, temp, r2); + Log(0, "GroundMain ground request %3d %3d", temp, r2); gUnknown_20398A8 = 1; gUnknown_20398AC = 1; gUnknown_20398B0 = r2; @@ -618,7 +613,7 @@ bool8 GroundMainRescueRequest(s32 r0, s32 r1) s32 r5 = r2; if(gUnknown_20398A8 == 0) { - Log(0, sFmtRescueRequest, r2, r1); + Log(0, "GroundMain recue request %3d %3d", r2, r1); if(gUnknown_203B49D != 0) { gUnknown_20398A8 = 7; @@ -648,7 +643,7 @@ UNUSED static bool8 GroundMainUserRescueRequest(u32 r0) { if (gUnknown_20398A8 == 0) { if(gUnknown_203B49D != 0) { - Log(0, sFmtUserRescueRequest, r0); + Log(0, "GroundMain user rescue request %3d", r0); gUnknown_20398A8 = 7; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; @@ -662,7 +657,7 @@ UNUSED static bool8 GroundMainUserRescueRequest(u32 r0) bool32 GroundMainGameEndRequest(u32 r0) { if (gUnknown_20398A8 == 0) { - Log(0, sFmtGameEndRequest, r0); + Log(0, "GroundMain game end request %3d", r0); gUnknown_20398A8 = 9; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; @@ -675,7 +670,7 @@ bool32 GroundMainGameEndRequest(u32 r0) bool32 GroundMainGameCancelRequest(u32 r0) { if (gUnknown_20398A8 == 0) { - Log(0, sFmtGameCancelRequest, r0); + Log(0, "GroundMain game cancel request %3d", r0); gUnknown_20398A8 = 10; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; @@ -695,7 +690,7 @@ bool8 GetScriptMode(void) return gScriptMode; } -s16 sub_8098FA0(void) +UNUSED static s16 sub_8098FA0(void) { return GetScriptVarValue(NULL, GROUND_PLACE); } @@ -741,16 +736,13 @@ s16 sub_8098FCC(u32 unused) return iVar3->unk4; } -const char *sub_80990B8(void) +UNUSED static const char *sub_80990B8(void) { - s16 index; - index = sub_8098FCC(0xB); - if(index != -1) - { + s16 index = sub_8098FCC(0xB); + if (index != -1) { return sub_80A2B18(gGroundConversion_811BAF4[index].unk2); } - else - { + else { return sub_8098FB4(); } } @@ -865,3 +857,81 @@ void sub_809927C(u8 param_1) gUnknown_20398C8.sub0.unk4 = 0; gUnknown_20398C8.sub0.unkD = 0; } + +bool8 sub_80992E0(s16 *param_1, s16 *param_2) +{ + s32 sVar2; + + sVar2 = (s16)GetScriptVarValue(NULL,DUNGEON_ENTER); + if ((((sVar2 != -1) && (sVar2 != 0x50)) && (sVar2 != 0x51)) && (sVar2 != 0x52)) { + *param_1 = sVar2; + *param_2 = GetScriptVarValue(NULL,DUNGEON_ENTER_INDEX); + return TRUE; + } + else { + *param_1 = -1; + *param_2 = -1; + return FALSE; + } +} + +bool8 sub_8099328(u8 *dungeonId) +{ + s16 script_disc; + const DungeonInfo* dungeonInfo; + + script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); + if (script_disc == 0x51) { + script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); + dungeonInfo = GetDungeonInfo_80A2608(script_disc); + if (dungeonInfo->dungeonIndex < 0x3f) { + *dungeonId = dungeonInfo->dungeonIndex; + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8099360(u8 *dungeonId) +{ + s16 script_disc; + const DungeonInfo* dungeonInfo; + + script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); + if (script_disc == 0x52) { + script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); + dungeonInfo = GetDungeonInfo_80A2608(script_disc); + *dungeonId = dungeonInfo->dungeonIndex; + return TRUE; + } + return FALSE; +} + +bool8 sub_8099394(u8 *param) +{ + s16 script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER); + if (script_disc == 0x50) { + script_disc = GetScriptVarValue(NULL, DUNGEON_ENTER_INDEX); + *param = script_disc; + return TRUE; + } + return FALSE; +} + +void sub_80993C0(bool8 param) +{ + gUnknown_20398B8 = (param == FALSE); +} + +extern void sub_80A4B38(void); +extern void sub_80A4B54(void); + +void sub_80993D8(void) +{ + sub_80A4B38(); +} + +void sub_80993E4(void) +{ + sub_80A4B54(); +} diff --git a/src/main_loops.c b/src/main_loops.c index 29b0e8b41..a649c6f57 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -14,7 +14,6 @@ #include "code_8094F88.h" #include "code_80958E8.h" #include "code_8097670.h" -#include "code_8099328.h" #include "code_8099360.h" #include "code_80A26CC.h" #include "cpu.h" @@ -24,6 +23,7 @@ #include "exclusive_pokemon.h" #include "friend_area.h" #include "game_options.h" +#include "ground_main.h" #include "main_loops.h" #include "main_menu1.h" #include "main_menu2.h" diff --git a/src/palette_util.c b/src/palette_util.c new file mode 100644 index 000000000..6b2f663b1 --- /dev/null +++ b/src/palette_util.c @@ -0,0 +1,720 @@ +#include "global.h" +#include "globaldata.h" +#include "bg_palette_buffer.h" +#include "structs/str_3000400.h" + +extern void sub_80039B8(void); +extern void TransferBGPaletteBuffer(void); +extern void sub_80037C8(u16, u32, unkStruct_3000400); +extern void sub_8003664(u16 param_1, u16 param_2); +extern void sub_80036AC(u16, u32, unkStruct_3000400); +extern void sub_80036F4(u16, u32, unkStruct_3000400); +extern void sub_8003780(u16, u32, unkStruct_3000400); + +struct UnkStruct_2039958 +{ + s32 unk0; + s16 unk4; + s16 unk6; + u16 unk8; + u16 unkA; + u16 unkC; +}; + +struct UnkStruct_2039978 +{ + u32 unk0; + unkStruct_3000400 unk4; + struct UnkStruct_2039958 unk8; +}; + +static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039958 = {0}; +static EWRAM_DATA struct UnkStruct_2039958 gUnknown_2039968 = {0}; +static EWRAM_DATA struct UnkStruct_2039978 gUnknown_2039978 = {0}; +static EWRAM_DATA u8 gUnknown_2039990 = FALSE; +static EWRAM_DATA s16 gUnknown_2039992 = 0; +UNUSED static EWRAM_DATA s32 sUnused = 0; +#define ARR_COUNT_2039998 33 +static EWRAM_DATA u16 gUnknown_2039998[ARR_COUNT_2039998] = {0}; + +void sub_809977C(void); +static void sub_8099838(struct UnkStruct_2039958 *a0); +static void sub_8099848(struct UnkStruct_2039958 *a0); +static void sub_8099DD0(u16 a0); +static void sub_8099E58(u16 a0); +static void sub_8099E80(u16 a0, unkStruct_3000400 a1); + +void sub_8099744(void) +{ + sub_80039B8(); +} + +void sub_8099750(void) +{ + TransferBGPaletteBuffer(); +} + +void sub_809975C(void) +{ + sub_809977C(); +} + +void sub_8099768(void) +{ + sub_809977C(); + sub_8099744(); + sub_8099750(); +} + +void sub_809977C(void) +{ + s32 i; + + gUnknown_2039990 = FALSE; + gUnknown_2039992 = 0; + sub_8099838(&gUnknown_2039958); + sub_8099838(&gUnknown_2039968); + sub_8099838(&gUnknown_2039978.unk8); + gUnknown_2039978.unk0 = 0; + gUnknown_2039978.unk8.unkC = 0x100; + gUnknown_2039958.unkC = 0; + sub_8099DD0(0); + gUnknown_2039968.unkC = 0x100; + sub_8099E58(0x100); + for (i = 0; i < ARR_COUNT_2039998; i++) { + gUnknown_2039998[i] = 0; + } +} + +void sub_80997F4(u16 a0, u32 a1) +{ + gUnknown_2039998[a0] = a1; + sub_8099848(&gUnknown_2039958); + sub_8099848(&gUnknown_2039968); + sub_8099848(&gUnknown_2039978.unk8); +} + +UNUSED static u32 sub_8099828(u16 a0) +{ + return gUnknown_2039998[a0]; +} + +static void sub_8099838(struct UnkStruct_2039958 *a0) +{ + a0->unk0 = 1; + a0->unkC = 0; + a0->unk4 = 0; + a0->unk6 = 0; +} + +static void sub_8099848(struct UnkStruct_2039958 *a0) +{ + if (a0->unk0 == 0) { + a0->unk0 = 1; + } +} + +static void sub_809985C(struct UnkStruct_2039958 *a0, s32 a1) +{ + if (a1 >= 0) { + if (a1 == 0) { + a0->unkC = 0x100; + a0->unk0 = 1; + } + else { + a0->unk0 = 2; + } + } + else { + a1 = 30; + a0->unk0 = 2; + } + + a0->unk4 = a1; + a0->unk6 = a1; +} + +static void sub_8099880(struct UnkStruct_2039958 *a0, s32 a1) +{ + if (a1 >= 0) { + if (a1 == 0) { + a0->unkC = a1; + a0->unk0 = 1; + } + else { + a0->unk0 = 3; + } + } + else { + a1 = 30; + a0->unk0 = 3; + } + + a0->unk4 = a1; + a0->unk6 = a1; +} + +static void sub_80998A0(struct UnkStruct_2039958 *a0, s32 a1, u16 a2, u16 a3) +{ + if (a1 < 0) a1 = 30; + + if (a2 > a3) { + a0->unk0 = 5; + a0->unkA = a2 - a3; + } + else if (a2 < a3) { + a0->unk0 = 4; + a0->unkA = a3 - a2; + } + else { + a0->unk0 = 1; + a0->unkA = 0; + } + + a0->unk4 = a1; + a0->unk6 = a1; + a0->unkC = a2; + a0->unk8 = a3; +} + +static bool8 sub_80998E0(struct UnkStruct_2039958 *a0) +{ + switch (a0->unk0) { + case 0: + break; + case 1: + a0->unk0 = 0; + return TRUE; + case 2: + if (--a0->unk4 > 0) { + u16 var = 0x100 - ((a0->unk4 << 8) / a0->unk6); + if (a0->unkC < var) { + a0->unkC = var; + } + } + else { + a0->unkC = 0x100; + a0->unk0 = 0; + } + return TRUE; + case 3: + if (--a0->unk4 > 0) { + u16 var = (a0->unk4 << 8) / a0->unk6; + if (a0->unkC > var) { + a0->unkC = var; + } + } + else { + a0->unkC = 0; + a0->unk0 = 0; + } + return TRUE; + case 4: + if (--a0->unk4 > 0) { + a0->unkC = a0->unk8 - ((a0->unk4 * a0->unkA) / a0->unk6); + } + else { + a0->unkC = a0->unk8; + a0->unk0 = 0; + } + return TRUE; + case 5: + if (--a0->unk4 > 0) { + a0->unkC = a0->unk8 + ((a0->unk4 * a0->unkA) / a0->unk6); + } + else { + a0->unkC = a0->unk8; + a0->unk0 = 0; + } + return TRUE; + } + + return FALSE; +} + +void sub_80999D4(s32 a0) +{ + gUnknown_2039990 = TRUE; + gUnknown_2039992 = a0; +} + +void sub_80999E8(s32 a0) +{ + sub_809985C(&gUnknown_2039958, a0); +} + +void sub_80999FC(s32 a0) +{ + sub_8099880(&gUnknown_2039958, a0); +} + +void sub_8099A10(s32 a1, u16 a2, u16 a3) +{ + sub_80998A0(&gUnknown_2039958, a1, a2, a3); +} + +void sub_8099A34(s32 a0) +{ + sub_809985C(&gUnknown_2039968, a0); +} + +void sub_8099A48(s32 a0) +{ + sub_8099880(&gUnknown_2039968, a0); +} + +void sub_8099A5C(s32 a0, s32 a1, unkStruct_3000400 a2) +{ + gUnknown_2039978.unk0 = a0; + gUnknown_2039978.unk4 = a2; + gUnknown_2039978.unk8.unkC = 0; + sub_809985C(&gUnknown_2039978.unk8, a1); + + switch (a0) { + case 1: + case 3: + gUnknown_2039968.unkC = 0x100; + gUnknown_2039958.unkC = 0x100; + break; + case 9: + case 11: + gUnknown_2039968.unkC = 0x100; + break; + case 5: + case 7: + case 13: + case 14: + gUnknown_2039958.unkC = 0x100; + break; + } +} + +void sub_8099AFC(s32 a0, s32 a1, unkStruct_3000400 a2) +{ + gUnknown_2039978.unk0 = a0; + gUnknown_2039978.unk4 = a2; + gUnknown_2039978.unk8.unkC = 0x100; + sub_8099880(&gUnknown_2039978.unk8, a1); + + switch (a0) { + case 2: + case 4: + gUnknown_2039968.unkC = 0; + gUnknown_2039958.unkC = 0; + break; + case 10: + case 12: + gUnknown_2039968.unkC = 0; + break; + case 6: + case 8: + case 13: + case 14: + gUnknown_2039958.unkC = 0; + break; + } +} + +bool8 sub_8099B94(void) +{ + if (gUnknown_2039990) + return TRUE; + if (gUnknown_2039978.unk0 != 0) { + return (gUnknown_2039978.unk8.unk0 != 0); + } + return (gUnknown_2039958.unk0 != 0 || gUnknown_2039968.unk0 != 0); +} + +void sub_8099BE4(void) +{ + if (gUnknown_2039978.unk0 != 0 || gUnknown_2039978.unk8.unk0 != 0) { + if (sub_80998E0(&gUnknown_2039978.unk8)) { + sub_8099E80(gUnknown_2039978.unk8.unkC, gUnknown_2039978.unk4); + } + else if (gUnknown_2039978.unk8.unk0 == 0) { + switch (gUnknown_2039978.unk0) { + case 0: + break; + case 1: + case 3: + case 5: + case 7: + case 9: + case 11: + if (gUnknown_2039978.unk8.unkC >= 256) { + gUnknown_2039978.unk0 = 0; + } + else if (gUnknown_2039990) { + s32 var = 0; + switch (gUnknown_2039978.unk0) { + case 1: var = 2; break; + case 3: var = 4; break; + case 5: var = 6; break; + case 7: var = 8; break; + } + + if (var != 0) { + sub_8099AFC(var, gUnknown_2039992, gUnknown_2039978.unk4); + } + else { + gUnknown_2039978.unk0 = 0; + } + } + break; + case 2: + case 4: + case 6: + case 8: + case 10: + case 12: + case 13: + case 14: + if (gUnknown_2039978.unk8.unkC == 0) { + gUnknown_2039978.unk0 = 0; + } + else if (gUnknown_2039990) { + sub_8099AFC(gUnknown_2039978.unk0, gUnknown_2039992, gUnknown_2039978.unk4); + } + break; + } + } + } + else if (gUnknown_2039990) { + bool8 r5 = TRUE; + if (gUnknown_2039958.unkC != 0 || gUnknown_2039958.unk0 != 0) { + r5 = FALSE; + if (gUnknown_2039958.unk0 != 3) { + sub_8099880(&gUnknown_2039958, gUnknown_2039992); + } + if (sub_80998E0(&gUnknown_2039958)) { + sub_8099DD0(gUnknown_2039958.unkC); + } + } + if (gUnknown_2039968.unkC != 0 || gUnknown_2039968.unk0 != 0) { + r5 = FALSE; + if (gUnknown_2039968.unk0 != 3) { + sub_8099880(&gUnknown_2039968, gUnknown_2039992); + } + if (sub_80998E0(&gUnknown_2039968)) { + sub_8099E58(gUnknown_2039968.unkC); + } + } + + if (r5) { + gUnknown_2039990 = FALSE; + } + } + else { + if (sub_80998E0(&gUnknown_2039958)) { + sub_8099DD0(gUnknown_2039958.unkC); + } + if (sub_80998E0(&gUnknown_2039968)) { + sub_8099E58(gUnknown_2039968.unkC); + } + } +} + +static void sub_8099DD0(u16 a0) +{ + s32 i; + + for (i = 0; i < 14; i++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i, 0x100); + } + else { + sub_8003664(i, a0); + } + } + + for (i = 16; i < 31; i++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i, 0x100); + } + else { + sub_8003664(i, a0); + } + } + + sub_8003664(32, a0); +} + +static void sub_8099E58(u16 a0) +{ + sub_8003664(15, a0); + sub_8003664(14, a0); + sub_8003664(31, a0); +} + +static void sub_8099E80(u16 param_1,unkStruct_3000400 param_2) +{ + s32 i; + + switch (gUnknown_2039978.unk0) { + case 0: + break; + case 1: + for (i = 0; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + + for (i = 16; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + break; + case 9: + for (i = 14; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + + for (i = 31; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + break; + case 5: + for (i = 0; i < 14; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + + for (i = 16; i < 31; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036AC(i,param_1,param_2); + } + } + break; + case 2: + for (i = 0; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + + for (i = 16; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + break; + case 10: + for (i = 14; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + + for (i = 31; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + break; + case 6: + for (i = 0; i < 14; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + + for (i = 16; i < 31; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_80036F4(i,param_1,param_2); + } + } + break; + case 3: + for (i = 0; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + + for (i = 16; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + break; + case 11: + for (i = 14; i < 16; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + + for (i = 31; i < 32; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + break; + case 7: + for (i = 0; i < 14; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + + for (i = 16; i < 31; i++) { + if (gUnknown_2039998[i] & 2) { + sub_8003664(i,0x100); + } + else { + sub_8003780(i,param_1,param_2); + } + } + break; + case 4: + for (i = 0; i < 16; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + + for (i = 16; i < 32; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + break; + case 12: + for (i = 14; i < 16; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + + for (i = 31; i < 32; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + break; + case 13: + case 14: + switch (gUnknown_2039978.unk0) { + case 13: + param_2.unk0[0] = 0x90; + param_2.unk0[1] = 0x90; + param_2.unk0[2] = 0xFF; + param_2.unk0[3] = 0xFF; + break; + case 14: + param_2.unk0[0] = 0xFF; + param_2.unk0[1] = 0xC0; + param_2.unk0[2] = 0x80; + param_2.unk0[3] = 0xFF; + break; + } + // NOTE: fallthrough needed here + case 8: + for (i = 0; i < 14; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + + for (i = 16; i < 31; i ++) { + if (gUnknown_2039998[i] & 1) { + sub_8003664(i,0x100); + } + else if (gUnknown_2039998[i] & 2) { + sub_8003664(i,param_1); + } + else { + sub_80037C8(i,param_1,param_2); + } + } + break; + } +} diff --git a/src/post_office_guide2.c b/src/post_office_guide2.c index ac15c3e7b..56524260b 100644 --- a/src/post_office_guide2.c +++ b/src/post_office_guide2.c @@ -7,7 +7,6 @@ #include "code_8094F88.h" #include "code_80958E8.h" #include "code_80972F4.h" -#include "code_8099328.h" #include "code_8099360.h" #include "code_80A26CC.h" #include "input.h" @@ -19,6 +18,7 @@ #include "string_format.h" #include "text_1.h" #include "text_3.h" +#include "ground_main.h" static EWRAM_INIT unkStruct_203B330 *sUnknown_203B330 = {NULL}; diff --git a/src/wonder_mail_802D098.c b/src/wonder_mail_802D098.c index b87467ee3..518cb2d37 100644 --- a/src/wonder_mail_802D098.c +++ b/src/wonder_mail_802D098.c @@ -5,7 +5,6 @@ #include "code_803B050.h" #include "code_80958E8.h" #include "code_80972F4.h" -#include "code_8099328.h" #include "code_8099360.h" #include "common_strings.h" #include "input.h" @@ -16,6 +15,7 @@ #include "text_1.h" #include "wonder_mail_802C4C8.h" #include "wonder_mail_802D098.h" +#include "ground_main.h" enum WonderMailRescueStates { diff --git a/sym_ewram.txt b/sym_ewram.txt index 1900e4a3e..ba9a6aa68 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -79,7 +79,7 @@ .space 4 .include "src/ground_main.o" .space 4 - .include "src/code_8099360.o" + .include "src/palette_util.o" .include "src/code_809A560.o" .include "src/code_809C5C4.o" .space 4