split ground main, palette file, unk file and debug field map file

This commit is contained in:
DizzyEggg
2025-06-11 20:28:22 +02:00
parent bcdf4d672f
commit b6374f8e0e
16 changed files with 1101 additions and 1136 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

272
src/debug_field_map.c Normal file
View File

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

View File

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

View File

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

View File

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

720
src/palette_util.c Normal file
View File

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

View File

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

View File

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

View File

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