Get rid of unkStruct_20398C8

This commit is contained in:
DizzyEggg 2025-05-29 19:08:09 +02:00
parent 69f0d89ce1
commit 3ec12aaa44
7 changed files with 57 additions and 65 deletions

View File

@ -4,22 +4,6 @@
#include "structs/str_pokemon.h"
#include "structs/str_wonder_mail.h"
struct unkStruct_20398C8
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 fill5[0xB - 0x5];
u8 unkB;
u8 unkC;
u8 unkD;
DungeonMailSeed unk10;
PokemonStruct1 unk18;
u8 fill70[0x88 - 0x70];
};
// size: 0xC
typedef struct GroundConversionStruct
{

View File

@ -1,7 +1,7 @@
#ifndef GUARD_RUN_DUNGEON_H
#define GUARD_RUN_DUNGEON_H
#include "structs/str_dungeon_8042F6C.h"
#include "structs/str_dungeon_setup.h"
struct UnkStruct_203B414
{
@ -15,7 +15,7 @@ struct UnkStruct_203B414
extern struct UnkStruct_203B414 *gUnknown_203B414;
void RunDungeon_Async(UnkStruct_RunDungeon *r8);
void RunDungeon_Async(DungeonSetupStruct *r8);
void sub_8043CD8(void);
bool8 sub_8043CE4(s32 dungeonId);
u8 GetFloorType(void);

View File

@ -1,5 +1,5 @@
#ifndef GUARD_STR_DUNGEON_8042F6C_H
#define GUARD_STR_DUNGEON_8042F6C_H
#ifndef GUARD_STR_DUNGEON_SETUP_H
#define GUARD_STR_DUNGEON_SETUP_H
#include "structs/str_dungeon.h"
#include "structs/str_dungeon_location.h"
@ -7,28 +7,34 @@
#include "structs/str_pokemon.h"
#include "structs/str_wonder_mail.h"
typedef struct UnkStruct_RunDungeon
typedef struct DungeonSetupInfo
{
u8 unk0;
DungeonLocation unk4;
DungeonLocation unk0;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u8 unk10;
u8 unk11;
DungeonMailSeed dungeonSeed;
PokemonStruct1 unk1C;
PokemonStruct1 unk18;
u8 *unk74;
Dungeon *unk78;
s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed)
u8 unk7E;
DungeonLocation unk80;
DungeonMailSeed unk84;
} UnkStruct_RunDungeon;
} DungeonSetupInfo;
#endif // GUARD_STR_DUNGEON_8042F6C_H
typedef struct DungeonSetupStruct
{
s32 unk0;
DungeonSetupInfo info;
u8 fill8C[44];
} DungeonSetupStruct;
#endif // GUARD_STR_DUNGEON_SETUP_H

View File

@ -2,6 +2,7 @@
#include "constants/dungeon.h"
#include "constants/move_id.h"
#include "structs/str_wonder_mail.h"
#include "structs/str_dungeon_setup.h"
#include "code_8009804.h"
#include "code_800C9CC.h"
#include "code_80118A4.h"
@ -29,7 +30,7 @@ EWRAM_DATA u16 gUnknown_20398BC = {0};
EWRAM_DATA s16 gUnknown_20398BE = {0};
EWRAM_DATA u32 gUnknown_20398C0 = {0};
EWRAM_DATA s16 gUnknown_20398C4 = {0};
EWRAM_DATA struct unkStruct_20398C8 gUnknown_20398C8 = {0};
EWRAM_DATA struct DungeonSetupInfo gUnknown_20398C8 = {0};
EWRAM_DATA u8 gUnknown_2039950 = 0;
EWRAM_INIT bool8 gUnknown_203B49C = {0};
@ -755,7 +756,7 @@ const char *sub_80990B8(void)
}
}
static inline bool8 sub_80990EC_sub(struct unkStruct_20398C8 *iVar1, u32 iVar2)
static inline bool8 sub_80990EC_sub(struct DungeonSetupInfo *iVar1, u32 iVar2)
{
bool8 flag = FALSE;
iVar1->unkB = 0;
@ -769,7 +770,7 @@ static inline bool8 sub_80990EC_sub(struct unkStruct_20398C8 *iVar1, u32 iVar2)
extern void sub_80A8EC0(u8 *, u32);
u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2)
u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2)
{
const DungeonInfo *iVar1;
u8 auStack_98 [24];
@ -780,8 +781,8 @@ u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2)
iVar1 = GetDungeonInfo_80A2608(param_2);
dungeonIndex = iVar1->dungeonIndex;
r5 = 0;
param_1->unk0 = dungeonIndex;
param_1->unk1 = 1;
param_1->unk0.id = dungeonIndex;
param_1->unk0.floor = 1;
param_1->unkC = r5;
switch(sub_80A2750(param_2))
@ -823,11 +824,11 @@ u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2)
return iVar1->unk11;
}
u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2)
u8 sub_80991E0(struct DungeonSetupInfo *param_1,short *param_2)
{
*param_2 = gUnknown_20398C4;
if (gUnknown_203B49C) {
memcpy(param_1, &gUnknown_20398C8, sizeof(struct unkStruct_20398C8));
memcpy(param_1, &gUnknown_20398C8, sizeof(struct DungeonSetupInfo));
return TRUE;
}
else {
@ -835,7 +836,7 @@ u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2)
}
}
void sub_8099220(struct unkStruct_20398C8 *param_1, s16 param_2)
void sub_8099220(struct DungeonSetupInfo *param_1, s16 param_2)
{
s32 param_2_s32 = (s16)param_2;
if (param_1 != NULL)
@ -843,7 +844,7 @@ void sub_8099220(struct unkStruct_20398C8 *param_1, s16 param_2)
gUnknown_203B49C = TRUE;
gUnknown_203B49D = 0;
gUnknown_20398C4 = param_2_s32;
memcpy(&gUnknown_20398C8, param_1, sizeof(struct unkStruct_20398C8));
memcpy(&gUnknown_20398C8, param_1, sizeof(struct DungeonSetupInfo));
}
else {
gUnknown_203B49C = FALSE;
@ -860,7 +861,7 @@ void sub_809927C(u8 param_1)
gUnknown_2039950 = param_1;
SetScriptVarValue(0x0,DUNGEON_ENTER,0x50);
SetScriptVarValue(0x0,DUNGEON_ENTER_INDEX,gUnknown_2039950);
sub_8095494(&gUnknown_20398C8.unk10,param_1);
sub_8095494(&gUnknown_20398C8.dungeonSeed,param_1);
gUnknown_20398C8.unkB = 1;
gUnknown_20398C8.unkC = 0;
gUnknown_20398C8.unk4 = 0;

View File

@ -39,6 +39,7 @@
#include "pokemon.h"
#include "wigglytuff_shop1.h"
#include "wonder_mail.h"
#include "structs/str_dungeon_setup.h"
void GroundMap_Select(s16);
@ -140,7 +141,7 @@ bool8 sub_809B18C(s32 *sp);
bool8 sub_809AFFC(u8 *);
bool8 sub_809D234(void);
s32 sub_80A14E8(Action *, u8, u32, s32);
u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s32 param_2);
u8 sub_80990EC(struct DungeonSetupInfo *param_1, s32 param_2);
extern char gUnknown_81165D4[];
extern char gUnknown_81165F4[];
@ -1033,13 +1034,13 @@ s16 HandleAction(Action *action, DebugLocation *debug)
if (action->scriptData.branchDiscriminant == 1) {
s32 dungeonEnter;
u32 res;
struct unkStruct_20398C8 unkStruct;
struct DungeonSetupInfo unkStruct;
dungeonEnter = (s16)GetScriptVarValue(NULL, 19);
if (sub_80990EC(&unkStruct, dungeonEnter)) {
s32 val;
sub_8099220(&unkStruct, dungeonEnter);
val = sub_80023E4(6);
res = sub_809034C(unkStruct.unk0, 0, gUnknown_203B4B0, val, 0);
res = sub_809034C(unkStruct.unk0.id, 0, gUnknown_203B4B0, val, 0);
gUnknown_2039DA4 = res;
switch (res) {
case 2: {

View File

@ -2,7 +2,7 @@
#include "globaldata.h"
#include "constants/bg_music.h"
#include "constants/main_menu.h"
#include "structs/str_dungeon_8042F6C.h"
#include "structs/str_dungeon_setup.h"
#include "bg_control.h"
#include "bg_palette_buffer.h"
#include "code_800558C.h"
@ -72,7 +72,7 @@ static void NDS_LoadOverlay_GroundMain();
static u32 sub_80009D0(u32 param_1);
/* static */ // TODO: Uncomment
void sub_80011E8(u8 *param_1);
static void LoadAndRunDungeon_Async(UnkStruct_RunDungeon *r0);
static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0);
/* static */ // TODO: Uncomment
u32 xxx_script_related_8001334(u32 r0);
static void MainLoops_RunFrameActions(u32 unused);
@ -1217,7 +1217,7 @@ static u32 sub_80009D0(u32 param_1)
// It'd also be cool to see what happens if a quicksave load fails and the dungeon is skipped entirely
// arm9.bin::0200D01C
/* static */ // TODO: Uncomment
void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1)
void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1)
{
u8 quickSaveValid;
s32 quickSaveStatus;
@ -1231,11 +1231,11 @@ void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1)
sub_8014144();
sub_8043D50(&local_1c, &local_18);
param_1->unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800
param_1->unk78 = MemoryAlloc(local_18, 7); // size: sizeof(Dungeon)
param_1->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800
param_1->info.unk78 = MemoryAlloc(local_18, 7); // size: sizeof(Dungeon)
if (param_1->unk8) {
PrepareQuickSaveRead(param_1->unk74, local_1c);
if (param_1->info.unk4) {
PrepareQuickSaveRead(param_1->info.unk74, local_1c);
while (TRUE) {
if (!ReadQuickSave())
@ -1267,26 +1267,26 @@ void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1)
sub_8099690(0);
}
else
param_1->unk7C = 5;
param_1->info.unk7C = 5;
if (param_1->unk7C == -2)
sub_809542C(&param_1->unk84);
if (param_1->info.unk7C == -2)
sub_809542C(&param_1->info.unk84);
if (param_1->unk7C == 3 || param_1->unk7C == -2) {
SetDungeonLocationInfo(&param_1->unk80);
if (param_1->info.unk7C == 3 || param_1->info.unk7C == -2) {
SetDungeonLocationInfo(&param_1->info.unk80);
xxx_call_stop_bgm();
if (param_1->unk7C == -2)
PrepareQuickSaveWrite(param_1->unk74, local_1c, 1);
if (param_1->info.unk7C == -2)
PrepareQuickSaveWrite(param_1->info.unk74, local_1c, 1);
else
PrepareQuickSaveWrite(param_1->unk74, local_1c, 0);
PrepareQuickSaveWrite(param_1->info.unk74, local_1c, 0);
while ((quickSaveStatus = WriteQuickSave(), (quickSaveStatus != 2))) {
if (quickSaveStatus == 3)
break;
if (quickSaveStatus == 1) {
MemoryFree(param_1->unk78);
MemoryFree(param_1->unk74);
MemoryFree(param_1->info.unk78);
MemoryFree(param_1->info.unk74);
}
MainLoops_RunFrameActions(0);
@ -1295,8 +1295,8 @@ void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1)
}
else {
sub_808ED00();
MemoryFree(param_1->unk78);
MemoryFree(param_1->unk74);
MemoryFree(param_1->info.unk78);
MemoryFree(param_1->info.unk74);
}
}
@ -1456,7 +1456,7 @@ static void NDS_LoadOverlay_GroundMain()
}
// arm9.bin::0200CADC
static void nullsub_2(UnkStruct_RunDungeon *r0)
static void nullsub_2(DungeonSetupStruct *r0)
{
// (not a nullsub in the NDS)
// Probably loads the dungeon overlay?
@ -1470,7 +1470,7 @@ u32 xxx_script_related_8001334(u32 r0)
}
// arm9.bin::0200CA1C
static void LoadAndRunDungeon_Async(UnkStruct_RunDungeon *r0)
static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0)
{
nullsub_2(r0);
RunDungeon_Async(r0);

View File

@ -141,7 +141,7 @@ static const s16 sDeoxysForms[4] = {MONSTER_DEOXYS_NORMAL, MONSTER_DEOXYS_ATTACK
// This functions is the main 'loop' when the player is in a Dungeon. It runs from the moment the player enters a dungeon, until they leave(by completing or by fainting).
// arm9.bin::0206A848
void RunDungeon_Async(UnkStruct_RunDungeon *r8)
void RunDungeon_Async(DungeonSetupStruct *r8)
{
bool8 check;
Entity *leader;