From 69f0d89ce1ff1627756b223402711595cd2e51a6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 18:45:49 +0200 Subject: [PATCH 1/8] Unify WonderMailSub and unkStruct_Dungeon64C into DungeonMailSeed --- include/code_8094F88.h | 2 +- include/code_80958E8.h | 4 +- include/friend_areas_map.h | 1 + include/ground_main.h | 2 +- include/structs/str_802C39C.h | 4 +- include/structs/str_dungeon.h | 11 +- include/structs/str_dungeon_8042F6C.h | 5 +- include/structs/str_dungeon_mail_seed.h | 13 ++ include/structs/str_wonder_mail.h | 12 +- include/world_map.h | 5 +- src/code_803C1B4.c | 14 +- src/code_8094F88.c | 22 ++-- src/code_80958E8.c | 162 ++++++++++++------------ src/dungeon_jobs.c | 10 +- src/friend_rescue.c | 2 +- src/ground_main.c | 2 +- src/ground_script.c | 2 +- src/mailbox.c | 6 +- src/main_loops.c | 4 +- src/pokemon_mail.c | 44 +++---- src/pokemon_news3.c | 2 +- src/post_office_guide2.c | 6 +- src/rescue_password_menu.c | 2 +- src/run_dungeon.c | 10 +- src/thank_you_wonder_mail.c | 2 +- src/wonder_mail.c | 2 +- src/wonder_mail_2.c | 4 +- src/wonder_mail_4.c | 2 +- src/wonder_mail_5.c | 2 +- src/wonder_mail_802C860.c | 2 +- src/wonder_mail_802D098.c | 8 +- src/world_map.c | 2 +- 32 files changed, 186 insertions(+), 185 deletions(-) create mode 100644 include/structs/str_dungeon_mail_seed.h diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 240498dd9..e7a6cf277 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -48,6 +48,6 @@ s32 GetMailIndex(u8 mailType, u32); s32 GetFirstIndexofMailType(u8 mailType); void sub_8095824(DataSerializer *a, unkStruct_203B480 *b); void sub_8095774(DataSerializer *a, unkStruct_203B480 *b); -void sub_809542C(WonderMailSub *param_1); +void sub_809542C(DungeonMailSeed *param_1); #endif // GUARD_CODE_8094F88_H \ No newline at end of file diff --git a/include/code_80958E8.h b/include/code_80958E8.h index 22556aa3a..57f7850d8 100644 --- a/include/code_80958E8.h +++ b/include/code_80958E8.h @@ -8,7 +8,7 @@ // size: 0xC typedef struct subStruct_203B490 { - WonderMailSub sub; + DungeonMailSeed dungeonSeed; /* 0x8 */ s32 checksum; // really dumb checksum that just adds all the fields of WonderMail struct } subStruct_203B490; @@ -73,4 +73,4 @@ void sub_8096EEC(WonderMail *mail); bool8 ValidateWonderMail(WonderMail *data); void WriteWonderMailBits(DataSerializer *a, WonderMail *b); -#endif // GUARD_CODE_80958E8_H \ No newline at end of file +#endif // GUARD_CODE_80958E8_H diff --git a/include/friend_areas_map.h b/include/friend_areas_map.h index 78fbccb4c..8a9eac10e 100644 --- a/include/friend_areas_map.h +++ b/include/friend_areas_map.h @@ -100,6 +100,7 @@ struct struct_unk800F990 u8 unk5; struct FriendAreasMap *friendAreasMapPtr; u8 unkC; + u8 fillD[168]; }; void ShowFriendAreasMap_Async(struct struct_unk800F990 *param_1); diff --git a/include/ground_main.h b/include/ground_main.h index 2f9a8e140..e7714f3c4 100644 --- a/include/ground_main.h +++ b/include/ground_main.h @@ -15,7 +15,7 @@ struct unkStruct_20398C8 u8 unkB; u8 unkC; u8 unkD; - WonderMailSub unk10; + DungeonMailSeed unk10; PokemonStruct1 unk18; u8 fill70[0x88 - 0x70]; }; diff --git a/include/structs/str_802C39C.h b/include/structs/str_802C39C.h index c52f61d3d..4ebd77648 100644 --- a/include/structs/str_802C39C.h +++ b/include/structs/str_802C39C.h @@ -7,7 +7,7 @@ typedef struct unkStruct_802C39C { /* 0x0 */ u32 unk0[2]; - /* 0x8 */ WonderMailSub *unk8; + /* 0x8 */ DungeonMailSeed *dungeonSeed; /* 0xC */ u8 *playerName; /* 0x10 */ s16 clientSpecies; /* 0x12 */ s16 targetSpecies; @@ -29,4 +29,4 @@ typedef struct unkStruct_802C39C /* 0x54 */ WonderMail *mail; } unkStruct_802C39C; -#endif // GUARD_STR_802C39C_H \ No newline at end of file +#endif // GUARD_STR_802C39C_H diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 9d9219bb5..561ed1082 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -9,6 +9,7 @@ #include "structs/str_position.h" #include "structs/str_traps.h" #include "structs/str_dungeon_location.h" +#include "structs/str_dungeon_mail_seed.h" #define DUNGEON_MAX_SIZE_X 56 #define DUNGEON_MAX_SIZE_Y 32 @@ -206,14 +207,6 @@ struct unkStruct_Dungeon5C4_sub Entity *unkC; }; -// size: 0x8 -typedef struct unkStruct_Dungeon64C -{ - u8 unk0; - u8 unk1; - u32 unk4; -} unkStruct_Dungeon64C; - #define UNK_1BBD4_STR_COUNT 10 struct UnkStructDungeon1BDD4 @@ -255,7 +248,7 @@ typedef struct unkDungeon644 { /* 0x0 */ DungeonLocation dungeonLocation; /* 0x4 */ DungeonLocation dungeonLocation2; - /* 0x8 */ unkStruct_Dungeon64C unk8; + /* 0x8 */ DungeonMailSeed dungeonSeed; /* 0x10 */ u8 unk10; /* 0x11 */ u8 fill11[3]; /* 0x14 */ bool8 canRecruit; diff --git a/include/structs/str_dungeon_8042F6C.h b/include/structs/str_dungeon_8042F6C.h index 43846b3cc..8be703b70 100644 --- a/include/structs/str_dungeon_8042F6C.h +++ b/include/structs/str_dungeon_8042F6C.h @@ -3,6 +3,7 @@ #include "structs/str_dungeon.h" #include "structs/str_dungeon_location.h" +#include "structs/str_dungeon_mail_seed.h" #include "structs/str_pokemon.h" #include "structs/str_wonder_mail.h" @@ -20,14 +21,14 @@ typedef struct UnkStruct_RunDungeon u8 unkF; u8 unk10; u8 unk11; - unkStruct_Dungeon64C unk14; + DungeonMailSeed dungeonSeed; PokemonStruct1 unk1C; u8 *unk74; Dungeon *unk78; s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed) u8 unk7E; DungeonLocation unk80; - WonderMailSub unk84; + DungeonMailSeed unk84; } UnkStruct_RunDungeon; #endif // GUARD_STR_DUNGEON_8042F6C_H diff --git a/include/structs/str_dungeon_mail_seed.h b/include/structs/str_dungeon_mail_seed.h new file mode 100644 index 000000000..09cd44e73 --- /dev/null +++ b/include/structs/str_dungeon_mail_seed.h @@ -0,0 +1,13 @@ +#ifndef GUARD_STR_DUNGEON_MAIL_SEED_H +#define GUARD_STR_DUNGEON_MAIL_SEED_H + +#include "structs/str_dungeon_location.h" + +// size: 0x8 +typedef struct DungeonMailSeed +{ + /* 0x0 */ DungeonLocation location; + /* 0x4 */ u32 seed; +} DungeonMailSeed; + +#endif // GUARD_STR_DUNGEON_MAIL_SEED_H diff --git a/include/structs/str_wonder_mail.h b/include/structs/str_wonder_mail.h index 2cbe34fae..f63dcdcf8 100644 --- a/include/structs/str_wonder_mail.h +++ b/include/structs/str_wonder_mail.h @@ -4,13 +4,7 @@ #include "constants/wonder_mail.h" #include "structs/str_dungeon.h" #include "structs/str_pokemon.h" - -// size: 0x8 -typedef struct WonderMailSub -{ - /* 0x0 */ DungeonLocation dungeon; - /* 0x4 */ u32 seed; -} WonderMailSub; +#include "structs/str_dungeon_mail_seed.h" // size: 0x14 typedef struct WonderMail @@ -18,7 +12,7 @@ typedef struct WonderMail /* 0x0 */ u8 mailType; /* 0x1 */ u8 missionType; u8 unk2; - /* 0x4 */ WonderMailSub unk4; + /* 0x4 */ DungeonMailSeed dungeonSeed; /* 0xC */ s16 clientSpecies; /* 0xE */ s16 targetSpecies; /* 0x10 */ u8 targetItem; @@ -56,7 +50,7 @@ typedef struct unkStruct_203B480 { /* 0x0 */ u8 mailType; /* 0x1 */ u8 missionType; - WonderMailSub unk4; + DungeonMailSeed dungeonSeed; /* 0xC */ s16 clientSpecies; /* 0xE */ s16 targetSpecies; union unk10_temp diff --git a/include/world_map.h b/include/world_map.h index a6220e0e3..8e35b1475 100644 --- a/include/world_map.h +++ b/include/world_map.h @@ -7,6 +7,7 @@ #include "structs/axdata.h" #include "structs/str_position.h" #include "structs/str_dungeon.h" +#include "structs/str_pokemon.h" struct UnkStruct_Sub1 { @@ -37,9 +38,7 @@ struct UnkStruct_sub_8010494 DungeonLocation unk4; u8 pad1[8]; u8 unk10; - u8 pad2[0xA]; - s16 unk1C; - u8 pad3[0x6E - 0x20]; + PokemonStruct1 mon; u8 unk6C; u8 unk6D[63]; }; diff --git a/src/code_803C1B4.c b/src/code_803C1B4.c index 0fcd9a070..3b8fb1839 100644 --- a/src/code_803C1B4.c +++ b/src/code_803C1B4.c @@ -48,7 +48,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2) int index; u32 uVar2; - uVar2 = sub_803C1D0(¶m_1->unk4.dungeon,param_1->missionType); + uVar2 = sub_803C1D0(¶m_1->dungeonSeed.location,param_1->missionType); param_2->moneyReward = 0; for(index = 0; index < MAX_ITEM_REWARDS; index++) @@ -75,7 +75,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2) param_2->rewardType = 3; param_2->itemRewards[0] = param_1->itemReward; do { - sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]); + sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[1]); } while (param_2->itemRewards[0] == param_2->itemRewards[1]); break; case MONEY1: @@ -95,11 +95,11 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2) param_2->rewardType = 3; param_2->itemRewards[0] = param_1->itemReward; do { - sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]); + sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[1]); } while (param_2->itemRewards[0] == param_2->itemRewards[1]); do { do { - sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[2]); + sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[2]); } while (param_2->itemRewards[0] == param_2->itemRewards[2]); } while (param_2->itemRewards[1] == param_2->itemRewards[2]); break; @@ -113,7 +113,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2) } CopyYellowMonsterNametoBuffer(param_2->clientName, param_1->clientSpecies); param_2->clientSpecies = param_1->clientSpecies; - param_2->teamRankPtsReward = GetDungeonTeamRankPts(¶m_1->unk4.dungeon,param_1->missionType); + param_2->teamRankPtsReward = GetDungeonTeamRankPts(¶m_1->dungeonSeed.location,param_1->missionType); } void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward) @@ -248,7 +248,7 @@ bool8 sub_803C580(WonderMail *param_1) return FALSE; for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E8180); ptr++, id++) { - if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) { + if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->dungeonSeed.location.id, ptr->itemId)) { array[counter++] = id; } } @@ -275,7 +275,7 @@ bool8 sub_803C610(WonderMail *param_1) counter = 0; ptr = gUnknown_80E81D4; for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E81D4); ptr++, id++) { - if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) { + if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->dungeonSeed.location.id, ptr->itemId)) { array[counter++] = id; } } diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 829c140e8..a664b9f7a 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -271,22 +271,22 @@ s32 sub_8095400(u32 param_1) return -1; } -void sub_809542C(WonderMailSub *param_1) +void sub_809542C(DungeonMailSeed *param_1) { u8 buffer[20]; gUnknown_203B480->mailType = 1; - gUnknown_203B480->unk4 = *param_1; + gUnknown_203B480->dungeonSeed = *param_1; MersenneTwister_InitializeState(Rand32Bit()); gUnknown_203B480->unk10.unk10 = Random32MersenneTwister(); gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum; PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct()); CopyStringtoBuffer(gUnknown_203B480->playerName, buffer); gUnknown_203B480->unk24 = sub_8011C34(); - gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->unk4.dungeon.id); + gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeonSeed.location.id); } -void sub_8095494(WonderMailSub *param_1, u8 index) +void sub_8095494(DungeonMailSeed *param_1, u8 index) { u32 seed; DungeonLocation dungeon; @@ -295,9 +295,9 @@ void sub_8095494(WonderMailSub *param_1, u8 index) mail = gUnknown_203B480; mail += index; - dungeon = mail->unk4.dungeon; - seed = mail->unk4.seed; - param_1->dungeon = dungeon; + dungeon = mail->dungeonSeed.location; + seed = mail->dungeonSeed.seed; + param_1->location = dungeon; param_1->seed = seed; } @@ -421,8 +421,8 @@ void sub_8095774(DataSerializer * a, unkStruct_203B480 *b) u8 temp; ReadBits(a, &b->mailType, 4); - ReadDungeonLocationBits(a, &b->unk4.dungeon); - ReadBits(a, &b->unk4.seed, 24); + ReadDungeonLocationBits(a, &b->dungeonSeed.location); + ReadBits(a, &b->dungeonSeed.seed, 24); ReadBits(a, &b->clientSpecies, 9); ReadBits(a, &b->unk10.unk10, 32); ReadBits(a, &b->playerName, 10 * 8); @@ -447,8 +447,8 @@ void sub_8095824(DataSerializer * a, unkStruct_203B480 *b) zero = 0; WriteBits(a, &b->mailType, 4); - WriteDungeonLocationBits(a, &b->unk4.dungeon); - WriteBits(a, &b->unk4.seed, 24); + WriteDungeonLocationBits(a, &b->dungeonSeed.location); + WriteBits(a, &b->dungeonSeed.seed, 24); WriteBits(a, &b->clientSpecies, 9); WriteBits(a, &b->unk10.unk10, 32); WriteBits(a, &b->playerName, 10 * 8); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 619ddaa62..1d7bf7261 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -79,9 +79,9 @@ void InitializeMailJobsNews(void) MemoryClear8(gUnknown_203B490->unk1B8, sizeof(gUnknown_203B490->unk1B8)); for(index = 0; index < 16; index++) { - gUnknown_203B490->unk230[index].sub.dungeon.id = 99; - gUnknown_203B490->unk230[index].sub.dungeon.floor = 1; - gUnknown_203B490->unk230[index].sub.seed = 0; + gUnknown_203B490->unk230[index].dungeonSeed.location.id = 99; + gUnknown_203B490->unk230[index].dungeonSeed.location.floor = 1; + gUnknown_203B490->unk230[index].dungeonSeed.seed = 0; gUnknown_203B490->unk230[index].checksum = 0; } } @@ -108,17 +108,17 @@ bool8 ValidateWonderMail(WonderMail *data) return FALSE; else { - if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->unk4.dungeon.id) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->dungeonSeed.location.id) == 0) return FALSE; if(data->unk2 > 9) return FALSE; - if(IsNotValidDungeon(data->unk4.dungeon.id)) + if(IsNotValidDungeon(data->dungeonSeed.location.id)) return FALSE; - if(data->unk4.dungeon.floor >= GetDungeonFloorCount(data->unk4.dungeon.id)) + if(data->dungeonSeed.location.floor >= GetDungeonFloorCount(data->dungeonSeed.location.id)) return FALSE; - if(sub_809017C(&data->unk4.dungeon)) + if(sub_809017C(&data->dungeonSeed.location)) return FALSE; if(data->clientSpecies == MONSTER_NONE) @@ -150,7 +150,7 @@ bool8 ValidateWonderMail(WonderMail *data) return FALSE; // Item finding - if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->unk4.dungeon.id, data->targetItem) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeonSeed.location.id, data->targetItem) == 0) return FALSE; if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS) @@ -167,7 +167,7 @@ bool8 ValidateWonderMail(WonderMail *data) { if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL) return FALSE; - if(sub_803C1D0(&data->unk4.dungeon, data->missionType) == 0) + if(sub_803C1D0(&data->dungeonSeed.location, data->missionType) == 0) return FALSE; } return TRUE; @@ -194,7 +194,7 @@ bool8 GenerateMailJobInfo(struct WonderMail *mail) mail->missionType = MISSION_TYPE_FRIEND_RESCUE; } mail->unk2 = 0; - mail->unk4.seed = Rand32Bit() & 0xffffff; + mail->dungeonSeed.seed = Rand32Bit() & 0xffffff; numPokemon = 0; for (i = 1; i < MONSTER_MAX; i++) { @@ -217,20 +217,20 @@ bool8 GenerateMailJobInfo(struct WonderMail *mail) mail->targetSpecies = mail->clientSpecies; } - mail->targetItem = sub_8095F28(mail->unk4.dungeon.id); + mail->targetItem = sub_8095F28(mail->dungeonSeed.location.id); if (mail->targetItem == 0) { mail->missionType = MISSION_TYPE_FRIEND_RESCUE; mail->targetSpecies = mail->clientSpecies; - sub_803C37C(&mail->unk4.dungeon,0,&mail->targetItem); + sub_803C37C(&mail->dungeonSeed.location,0,&mail->targetItem); } - itemCount = GetMaxItemsAllowed(mail->unk4.dungeon.id); + itemCount = GetMaxItemsAllowed(mail->dungeonSeed.location.id); if (itemCount == 0 && mail->missionType == MISSION_TYPE_RESCUE_TARGET) { mail->missionType = MISSION_TYPE_FRIEND_RESCUE; mail->targetSpecies = mail->clientSpecies; } do { - sub_803C37C(&mail->unk4.dungeon,mail->missionType,&mail->itemReward); + sub_803C37C(&mail->dungeonSeed.location,mail->missionType,&mail->itemReward); } while (mail->targetItem == mail->itemReward); mail->friendAreaReward = 0; @@ -327,8 +327,8 @@ bool8 GenerateMailJobDungeonInfo(WonderMail *mail) } if (flag) { - mail->unk4.dungeon.id = dungeon; - mail->unk4.dungeon.floor = floor; + mail->dungeonSeed.location.id = dungeon; + mail->dungeonSeed.location.floor = floor; return TRUE; } floor++; @@ -351,11 +351,11 @@ bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4) { if (mail->mailType != MAIL_TYPE_NONE) { if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) { - if (mail->unk4.dungeon.id == dungeon) { + if (mail->dungeonSeed.location.id == dungeon) { return TRUE; } } - else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) { + else if ((mail->dungeonSeed.location.id == dungeon) && (mail->dungeonSeed.location.floor == floor)) { return TRUE; } } @@ -485,8 +485,8 @@ void ResetMailbox(void) void ResetMailboxSlot(u8 index) { gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->mailboxSlots[index].unk4.dungeon.id = 99; - gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor = 0; + gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.id = 99; + gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.floor = 0; gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1; } @@ -535,9 +535,9 @@ static void SortMailboxSlots(void) { if(gUnknown_203B490->mailboxSlots[r6].mailType != 0) { - if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) || - ((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) && - (gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor))) + if((gUnknown_203B490->mailboxSlots[r1].dungeonSeed.location.id > gUnknown_203B490->mailboxSlots[r6].dungeonSeed.location.id) || + ((gUnknown_203B490->mailboxSlots[r1].dungeonSeed.location.id == gUnknown_203B490->mailboxSlots[r6].dungeonSeed.location.id) && + (gUnknown_203B490->mailboxSlots[r1].dungeonSeed.location.floor > gUnknown_203B490->mailboxSlots[r6].dungeonSeed.location.floor))) { job = gUnknown_203B490->mailboxSlots[r1]; gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6]; @@ -608,8 +608,8 @@ bool8 sub_80961D8(void) _slot: slot = GetMailboxSlotInfo(num); slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; + slot->dungeonSeed.location.id = NUM_DUNGEONS; + slot->dungeonSeed.location.floor = floor; goto _flag; _0809638E: for(; num <= index; num++) @@ -618,7 +618,7 @@ _0809638E: if(GenerateMailJobInfo(slot)) { friendAreaReward = sub_8095E78(); - if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; + if(!sub_803C1D0(&slot->dungeonSeed.location, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; slot->rewardType = RandRange(MONEY1, END_REWARDS); if(slot->rewardType == FRIEND_AREA) { @@ -664,8 +664,8 @@ bool8 sub_80963B4(void) { slot = GetMailboxSlotInfo(num); slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; + slot->dungeonSeed.location.id = NUM_DUNGEONS; + slot->dungeonSeed.location.floor = floor; flag = TRUE; } } @@ -690,16 +690,16 @@ void sub_80963FC(void) slot->mailType = 5; slot->missionType = 0; slot->unk2 = 0; - slot->unk4.dungeon.id = DUNGEON_MT_STEEL; - slot->unk4.dungeon.floor = 3; - slot->unk4.seed = 0x00ffffff & Rand32Bit(); + slot->dungeonSeed.location.id = DUNGEON_MT_STEEL; + slot->dungeonSeed.location.floor = 3; + slot->dungeonSeed.seed = 0x00ffffff & Rand32Bit(); slot->clientSpecies = MONSTER_PIDGEY; slot->targetSpecies = MONSTER_PIDGEY; - slot->targetItem = sub_8095F28(slot->unk4.dungeon.id); + slot->targetItem = sub_8095F28(slot->dungeonSeed.location.id); slot->rewardType = MONEY1; do { - sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); + sub_803C37C(&slot->dungeonSeed.location, slot->missionType, &slot->itemReward); } while (slot->targetItem == slot->itemReward); slot->friendAreaReward = FRIEND_AREA_NONE; ShiftMailboxSlotsDown(); @@ -716,8 +716,8 @@ void sub_8096488(void) } mail = GetMailboxSlotInfo(0); mail->mailType = 1; - mail->unk4.dungeon.id = NUM_DUNGEONS; - mail->unk4.dungeon.floor = 0; + mail->dungeonSeed.location.id = NUM_DUNGEONS; + mail->dungeonSeed.location.floor = 0; } bool8 sub_80964B4(void) @@ -785,8 +785,8 @@ bool8 IsPelipperBoardSlotEmpty(u8 index) void ResetPelipperBoardSlot(u8 index) { gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0; + gUnknown_203B490->pelipperBoardJobs[index].dungeonSeed.location.id = 99; + gUnknown_203B490->pelipperBoardJobs[index].dungeonSeed.location.floor = 0; gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; } @@ -837,8 +837,8 @@ void SortPelipperJobs(void) { if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) { - if((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) || - ((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.floor))) + if((gUnknown_203B490->pelipperBoardJobs[index1].dungeonSeed.location.id > gUnknown_203B490->pelipperBoardJobs[index2].dungeonSeed.location.id) || + ((gUnknown_203B490->pelipperBoardJobs[index1].dungeonSeed.location.id == gUnknown_203B490->pelipperBoardJobs[index2].dungeonSeed.location.id) && (gUnknown_203B490->pelipperBoardJobs[index1].dungeonSeed.location.floor > gUnknown_203B490->pelipperBoardJobs[index2].dungeonSeed.location.floor))) { mail = gUnknown_203B490->pelipperBoardJobs[index1]; gUnknown_203B490->pelipperBoardJobs[index1] = gUnknown_203B490->pelipperBoardJobs[index2]; @@ -867,9 +867,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK2; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 1; - mail->unk4.dungeon.id = DUNGEON_UPROAR_FOREST; - mail->unk4.dungeon.floor = 10; - mail->unk4.seed = Rand32Bit() & 0xffffff; + mail->dungeonSeed.location.id = DUNGEON_UPROAR_FOREST; + mail->dungeonSeed.location.floor = 10; + mail->dungeonSeed.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_WYNAUT; mail->targetSpecies = MONSTER_MANKEY; mail->targetItem = 0; @@ -885,9 +885,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK3; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 2; - mail->unk4.dungeon.id = DUNGEON_HOWLING_FOREST; - mail->unk4.dungeon.floor = 15; - mail->unk4.seed = Rand32Bit() & 0xffffff; + mail->dungeonSeed.location.id = DUNGEON_HOWLING_FOREST; + mail->dungeonSeed.location.floor = 15; + mail->dungeonSeed.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_SMEARGLE; mail->targetSpecies = MONSTER_SMEARGLE; mail->targetItem = 0; @@ -902,9 +902,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK4; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 3; - mail->unk4.dungeon.id = DUNGEON_WISH_CAVE; - mail->unk4.dungeon.floor = 20; - mail->unk4.seed = Rand32Bit() & 0xffffff; + mail->dungeonSeed.location.id = DUNGEON_WISH_CAVE; + mail->dungeonSeed.location.floor = 20; + mail->dungeonSeed.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_MEDICHAM; mail->targetSpecies = MONSTER_MEDICHAM; mail->targetItem = 0; @@ -931,9 +931,9 @@ bool8 IsMailinJobSlot(WonderMail *mail) if(jobSlot->mailType != MAIL_TYPE_NONE) if(mail->missionType == jobSlot->missionType) if(mail->unk2 == jobSlot->unk2) - if(mail->unk4.dungeon.id == jobSlot->unk4.dungeon.id) - if(mail->unk4.dungeon.floor == jobSlot->unk4.dungeon.floor) - if(mail->unk4.seed == jobSlot->unk4.seed) + if(mail->dungeonSeed.location.id == jobSlot->dungeonSeed.location.id) + if(mail->dungeonSeed.location.floor == jobSlot->dungeonSeed.location.floor) + if(mail->dungeonSeed.seed == jobSlot->dungeonSeed.seed) if(mail->clientSpecies == jobSlot->clientSpecies) if(mail->targetSpecies == jobSlot->targetSpecies) if(mail->targetItem == jobSlot->targetItem) @@ -952,8 +952,8 @@ bool8 sub_809693C(WonderMail *mail) bool8 escortMission; s32 index; - dungeonIndex = mail->unk4.dungeon.id; - floor = mail->unk4.dungeon.floor; + dungeonIndex = mail->dungeonSeed.location.id; + floor = mail->dungeonSeed.location.floor; escortMission = FALSE; if (!IsValidWonderMail(mail)) { return FALSE; @@ -999,7 +999,7 @@ s32 CountJobsinDungeon(u8 dungeon) for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); - if ((mail->unk4.dungeon.id == dungeon) && + if ((mail->dungeonSeed.location.id == dungeon) && (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { count++; } @@ -1017,7 +1017,7 @@ bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon) for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); - if(mail->unk4.dungeon.id == dungeon) + if(mail->dungeonSeed.location.id == dungeon) if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) { @@ -1076,7 +1076,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) param_1->unk0 = FALSE; param_1->clientSpecies = jobSlot->clientSpecies; param_1->targetSpecies = MONSTER_NONE; - if (jobSlot->unk4.dungeon.id == dungeon) { + if (jobSlot->dungeonSeed.location.id == dungeon) { switch(jobSlot->missionType) { case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { @@ -1117,7 +1117,7 @@ s16 sub_8096B98(u8 dungeon) mail = GetJobSlotInfo(index); if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - if(mail->unk4.dungeon.id == dungeon) + if(mail->dungeonSeed.location.id == dungeon) return mail->targetSpecies; } return 0; @@ -1163,8 +1163,8 @@ bool8 sub_8096C08(u8 *jobIndex) void ResetJobSlot(u8 index) { gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; - gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; + gUnknown_203B490->jobSlots[index].dungeonSeed.location.id = 99; + gUnknown_203B490->jobSlots[index].dungeonSeed.location.floor = 0; gUnknown_203B490->jobSlots[index].rewardType = MONEY1; } @@ -1213,9 +1213,9 @@ void SortJobSlots(void) { if(gUnknown_203B490->jobSlots[r6].mailType != 0) { - if((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id > gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) || - ((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id == gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) && - (gUnknown_203B490->jobSlots[r1].unk4.dungeon.floor > gUnknown_203B490->jobSlots[r6].unk4.dungeon.floor))) + if((gUnknown_203B490->jobSlots[r1].dungeonSeed.location.id > gUnknown_203B490->jobSlots[r6].dungeonSeed.location.id) || + ((gUnknown_203B490->jobSlots[r1].dungeonSeed.location.id == gUnknown_203B490->jobSlots[r6].dungeonSeed.location.id) && + (gUnknown_203B490->jobSlots[r1].dungeonSeed.location.floor > gUnknown_203B490->jobSlots[r6].dungeonSeed.location.floor))) { job = gUnknown_203B490->jobSlots[r1]; gUnknown_203B490->jobSlots[r1] = gUnknown_203B490->jobSlots[r6]; @@ -1254,9 +1254,9 @@ u8 sub_8096E2C(void) { if(gUnknown_203B490->mailboxSlots[index].mailType == 1) { - if(floor <= gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) - if( gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor < 0x32) - floor = gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor + 1; + if(floor <= gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.floor) + if( gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.floor < 0x32) + floor = gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.floor + 1; } } @@ -1274,7 +1274,7 @@ bool8 sub_8096E80(u8 floor) { if(gUnknown_203B490->mailboxSlots[index].mailType == 1) { - if(floor == gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) + if(floor == gUnknown_203B490->mailboxSlots[index].dungeonSeed.location.floor) return TRUE; } } @@ -1287,10 +1287,10 @@ s32 CalculateMailChecksum(WonderMail *mail) sum = (mail->unk2 + mail->missionType); - sum += mail->unk4.dungeon.id; - sum += mail->unk4.dungeon.floor; + sum += mail->dungeonSeed.location.id; + sum += mail->dungeonSeed.location.floor; - sum += mail->unk4.seed << 8; + sum += mail->dungeonSeed.seed << 8; sum += mail->clientSpecies << 12; @@ -1315,7 +1315,7 @@ void sub_8096EEC(WonderMail *mail) gUnknown_203B490->unk230[index] = gUnknown_203B490->unk230[index - 1]; } - gUnknown_203B490->unk230[0].sub = mail->unk4; + gUnknown_203B490->unk230[0].dungeonSeed = mail->dungeonSeed; gUnknown_203B490->unk230[0].checksum = CalculateMailChecksum(mail); } @@ -1329,9 +1329,9 @@ bool8 sub_8096F50(WonderMail *mail) for (index = 0; index < 16; index++) { temp = &gUnknown_203B490->unk230[index]; - if (temp->sub.dungeon.id == mail->unk4.dungeon.id) - if (temp->sub.dungeon.floor == mail->unk4.dungeon.floor) - if (temp->sub.seed == mail->unk4.seed) + if (temp->dungeonSeed.location.id == mail->dungeonSeed.location.id) + if (temp->dungeonSeed.location.floor == mail->dungeonSeed.location.floor) + if (temp->dungeonSeed.seed == mail->dungeonSeed.seed) if (temp->checksum == checksum) return TRUE; } @@ -1377,8 +1377,8 @@ u32 RestoreMailInfo(u8 *r0, u32 size) for (index = 0; index < 16; index++) { ReadBits(&backup, &gUnknown_203B490->unk230[index].checksum, 32); - ReadBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 24); - ReadDungeonLocationBits(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); + ReadBits(&backup, &gUnknown_203B490->unk230[index].dungeonSeed.seed, 24); + ReadDungeonLocationBits(&backup, &gUnknown_203B490->unk230[index].dungeonSeed.location); } FinishBitSerializer(&backup); return backup.count; @@ -1421,8 +1421,8 @@ u32 SaveMailInfo(u8 *r0, u32 size) for(index = 0; index < 0x10; index++) { WriteBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20); - WriteBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18); - WriteDungeonLocationBits(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); + WriteBits(&backup, &gUnknown_203B490->unk230[index].dungeonSeed.seed, 0x18); + WriteDungeonLocationBits(&backup, &gUnknown_203B490->unk230[index].dungeonSeed.location); } FinishBitSerializer(&backup); return backup.count; @@ -1440,8 +1440,8 @@ void ReadWonderMailBits(DataSerializer *a, WonderMail *b) ReadBits(a, &b->rewardType, 4); ReadBits(a, &b->itemReward, 8); ReadBits(a, &b->friendAreaReward, 6); - ReadBits(a, &b->unk4.seed, 24); - ReadDungeonLocationBits(a, &b->unk4.dungeon); + ReadBits(a, &b->dungeonSeed.seed, 24); + ReadDungeonLocationBits(a, &b->dungeonSeed.location); } // arm9.bin::020661E4 @@ -1456,6 +1456,6 @@ void WriteWonderMailBits(DataSerializer *a, WonderMail *b) WriteBits(a, &b->rewardType, 4); WriteBits(a, &b->itemReward, 8); WriteBits(a, &b->friendAreaReward, 6); - WriteBits(a, &b->unk4.seed, 24); - WriteDungeonLocationBits(a, &b->unk4.dungeon); + WriteBits(a, &b->dungeonSeed.seed, 24); + WriteDungeonLocationBits(a, &b->dungeonSeed.location); } diff --git a/src/dungeon_jobs.c b/src/dungeon_jobs.c index 0912e9669..6fc4ae4f3 100644 --- a/src/dungeon_jobs.c +++ b/src/dungeon_jobs.c @@ -28,8 +28,8 @@ void sub_80842F0(void) for (i = 0; i < MAX_ACCEPTED_JOBS; i++) { WonderMail *jobSlot = GetJobSlotInfo(i); if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { - if (gDungeon->unk644.dungeonLocation.id == jobSlot->unk4.dungeon.id - && gDungeon->unk644.dungeonLocation.floor == jobSlot->unk4.dungeon.floor + if (gDungeon->unk644.dungeonLocation.id == jobSlot->dungeonSeed.location.id + && gDungeon->unk644.dungeonLocation.floor == jobSlot->dungeonSeed.location.floor && jobSlot->missionType != 3) { if (jobSlot->missionType == 4) { @@ -57,8 +57,8 @@ void sub_80843BC(s32 id) for (i = 0; i < MAX_ACCEPTED_JOBS; i++) { WonderMail *jobSlot = GetJobSlotInfo(i); if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { - if (gDungeon->unk644.dungeonLocation.id == jobSlot->unk4.dungeon.id - && (gDungeon->unk644.dungeonLocation.floor == jobSlot->unk4.dungeon.floor) + if (gDungeon->unk644.dungeonLocation.id == jobSlot->dungeonSeed.location.id + && (gDungeon->unk644.dungeonLocation.floor == jobSlot->dungeonSeed.location.floor) && (jobSlot->missionType == 0 || jobSlot->missionType == 4 || jobSlot->missionType == 2 || jobSlot->missionType == 1) && id_s32 == jobSlot->targetSpecies) { jobSlot->mailType = MAIL_TYPE_UNK8; @@ -210,7 +210,7 @@ void sub_8084778(void) for (i = 0; i < MAX_ACCEPTED_JOBS; i++) { wm = GetJobSlotInfo(i); - if (wm->mailType == MAIL_TYPE_TAKEN_JOB && gDungeon->unk644.dungeonLocation.id == wm->unk4.dungeon.id && wm->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) { + if (wm->mailType == MAIL_TYPE_TAKEN_JOB && gDungeon->unk644.dungeonLocation.id == wm->dungeonSeed.location.id && wm->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) { CopyCyanMonsterNametoBuffer(gFormatBuffer_Monsters[3], wm->targetSpecies); break; } diff --git a/src/friend_rescue.c b/src/friend_rescue.c index 27cb19f60..8217c09bc 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -1183,7 +1183,7 @@ void sub_8032828(void) else gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING; gUnknown_203B33C->unk53C.quantity = 1; - gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); + gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeonSeed.location, 0); gUnknown_203B33C->unk53C.itemRewards[1] = 0; gUnknown_203B33C->unk53C.itemRewards[2] = 0; gUnknown_203B33C->unk53C.friendAreaReward = 0; diff --git a/src/ground_main.c b/src/ground_main.c index 068c09156..2686fa4a4 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -54,7 +54,7 @@ extern void sub_809CB8C(); extern void sub_8098CC8(); extern void ClearAllItems_8091FB4(); extern u8 sub_809C730(); -extern void sub_8095494(WonderMailSub *param_1, u8 index); +extern void sub_8095494(DungeonMailSeed *param_1, u8 index); extern u16 gUnknown_2026E4E; diff --git a/src/ground_script.c b/src/ground_script.c index e7a303f0a..3567d2993 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -1081,7 +1081,7 @@ s16 HandleAction(Action *action, DebugLocation *debug) u32 res; ret = GetMailatIndex(GetScriptVarValue(NULL, 20)); val = sub_80023E4(6); - res = sub_809034C(ret->unk4.dungeon.id, 0, gUnknown_203B4B0, val, 1); + res = sub_809034C(ret->dungeonSeed.location.id, 0, gUnknown_203B4B0, val, 1); gUnknown_2039DA4 = res; switch (res) { case 2: { diff --git a/src/mailbox.c b/src/mailbox.c index 3ff554fb2..927bf0a15 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -374,7 +374,7 @@ void sub_802E578(void) mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); if(mail->mailType == 1) { - gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor; + gUnknown_203B304->mailIndex = mail->dungeonSeed.location.floor; gUnknown_203B304->fallbackState = MAIL_MENU_1; SetMailboxState(DISPLAY_SEL_PKMN_NEWS); } @@ -436,7 +436,7 @@ void HandleMailActionMenu(void) case 6: PlaySound(0x133); mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - ReceivePKMNNews(mail->unk4.dungeon.floor); + ReceivePKMNNews(mail->dungeonSeed.location.floor); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); ShiftMailboxSlotsDown(); if(HasNoMailinMailbox()) @@ -452,7 +452,7 @@ void HandleMailActionMenu(void) case 7: PlayMenuSoundEffect(0); mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor; + gUnknown_203B304->mailIndex = mail->dungeonSeed.location.floor; gUnknown_203B304->fallbackState = MAIL_MENU_1; SetMailboxState(DISPLAY_SEL_PKMN_NEWS); break; diff --git a/src/main_loops.c b/src/main_loops.c index e576740c7..2dcaeefbd 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -483,7 +483,7 @@ void QuickSave_Async(u32 mode) case SAVE_FAILED: { s32 temp; - if (sub_80144A4(&temp) == 0) + if (sub_80144A4(&temp) == 0) saveStatus = SAVE_NO_STATUS; break; } @@ -1483,4 +1483,4 @@ static void LoadAndRunDungeon_Async(UnkStruct_RunDungeon *r0) void nullsub_3(s32 yPos, s32 a1) { -} \ No newline at end of file +} diff --git a/src/pokemon_mail.c b/src/pokemon_mail.c index 533a7c4d3..3334cce26 100644 --- a/src/pokemon_mail.c +++ b/src/pokemon_mail.c @@ -51,7 +51,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) PrintStringOnWindow(21, param_1->y, gMedichamMission, param_1->unk0[0], 0); break; case 7: - PrintYellowDungeonNametoBuffer(buf_1, ¶m_1->unk8->dungeon); + PrintYellowDungeonNametoBuffer(buf_1, ¶m_1->dungeonSeed->location); PrintStringOnWindow(21, param_1->y, buf_1, param_1->unk0[0], 0); break; case 12: @@ -74,7 +74,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) PrintStringOnWindow(21, param_1->y, gUnknown_80E886C, param_1->unk0[0],0); break; case 10: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80EAE5C[bVar2 % 4], gFormatBuffer_Monsters[0]); @@ -82,7 +82,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) break; } case 9: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80E910C[bVar2 % 10], gFormatBuffer_Monsters[0]); @@ -90,7 +90,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) break; } default: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80E8C98[bVar2 % 15], gFormatBuffer_Monsters[0]); @@ -109,19 +109,19 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) } else { if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) { - PrintDungeonLocationtoBuffer(buf_3, ¶m_1->unk8->dungeon); + PrintDungeonLocationtoBuffer(buf_3, ¶m_1->dungeonSeed->location); sprintfStatic(buf_1, gUnknown_80E8884, buf_3); } else - PrintDungeonLocationtoBuffer(buf_1, ¶m_1->unk8->dungeon); + PrintDungeonLocationtoBuffer(buf_1, ¶m_1->dungeonSeed->location); PrintStringOnWindow(29, param_1->y + 12, buf_1, param_1->unk0[0], 0); } if (param_1->mailTitleType == 7) - uVar1 = sub_803C1D0(¶m_1->unk8->dungeon, 0); + uVar1 = sub_803C1D0(¶m_1->dungeonSeed->location, 0); else - uVar1 = sub_803C1D0(¶m_1->unk8->dungeon, param_1->mail->missionType); + uVar1 = sub_803C1D0(¶m_1->dungeonSeed->location, param_1->mail->missionType); PrintStringOnWindow(180, param_1->y, GetMissionRankText(uVar1), param_1->unk0[0], 0); } @@ -190,8 +190,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) break; case 15: case 16: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; - u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; + u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor; BufferItemName(gFormatBuffer_Items[0], param_1->targetItem, NULL); sprintfStatic(buf_1, gUnknown_80EB3F8[bVar2 % 22], gFormatBuffer_Items[0]); PrintStringOnWindow(10, y, buf_1, param_1->unk0[0], 0); @@ -203,8 +203,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) break; } case 14: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; - u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; + u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80EAEB8[bVar2 % 20], gFormatBuffer_Monsters[0]); @@ -217,8 +217,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) break; } case 8: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; - u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; + u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80EB220[bVar2 % 6], gFormatBuffer_Monsters[0]); @@ -231,8 +231,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) break; } case 13: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; - u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; + u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor; monName = GetMonSpecies(param_1->targetSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80E91D4[bVar2 % 45], gFormatBuffer_Monsters[0]); @@ -245,8 +245,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) break; } default: { - u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; - u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id; + u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor; monName = GetMonSpecies(param_1->clientSpecies); strcpy(gFormatBuffer_Monsters[0], monName); sprintfStatic(buf_1, gUnknown_80E8DE4[bVar2 % 13], gFormatBuffer_Monsters[0]); @@ -314,18 +314,18 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) PrintStringOnWindow(10, y, gPlaceText, param_1->unk0[0], 0); if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) { - PrintDungeonLocationtoBuffer(buf_5, ¶m_1->unk8->dungeon); + PrintDungeonLocationtoBuffer(buf_5, ¶m_1->dungeonSeed->location); sprintfStatic(buf_1, gUnknown_80E8884, buf_5); } else - PrintDungeonLocationtoBuffer(buf_1, ¶m_1->unk8->dungeon); + PrintDungeonLocationtoBuffer(buf_1, ¶m_1->dungeonSeed->location); PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0); if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE) - uVar3 = sub_803C1D0(¶m_1->unk8->dungeon, 0); + uVar3 = sub_803C1D0(¶m_1->dungeonSeed->location, 0); else - uVar3 = sub_803C1D0(¶m_1->unk8->dungeon, param_1->mail->missionType); + uVar3 = sub_803C1D0(¶m_1->dungeonSeed->location, param_1->mail->missionType); y += 12; PrintStringOnWindow(10, y, gDifficultyText, param_1->unk0[0], 0); diff --git a/src/pokemon_news3.c b/src/pokemon_news3.c index c9188af71..b0b8b739a 100644 --- a/src/pokemon_news3.c +++ b/src/pokemon_news3.c @@ -142,7 +142,7 @@ void CreateMailMenu(void) y = GetMenuEntryYCoord(&sUnknown_203B2D8->unk4.s0.input, i); sub_803B6B0(10, y, 6, sUnknown_203B2D8->unk4.s0.winId); PrintPokeNameToBuffer(gFormatBuffer_Monsters[0], GetPlayerPokemonStruct()); - sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gFormatBuffer_Monsters[0]); + sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeonSeed.location.floor), gFormatBuffer_Monsters[0]); PrintStringOnWindow(21, y, buffer, sUnknown_203B2D8->unk4.s0.winId, 0); } else { diff --git a/src/post_office_guide2.c b/src/post_office_guide2.c index 0e8c3e8f2..953209301 100644 --- a/src/post_office_guide2.c +++ b/src/post_office_guide2.c @@ -114,7 +114,7 @@ static void DisplayMissionObjectives(void) mail = GetMailatIndex(local_94); sub_803B6B0(10, 16, 3, sUnknown_203B330->unk10); // %dF - sprintfStatic(buffer,sFmt1,mail->unk4.dungeon.floor); + sprintfStatic(buffer,sFmt1,mail->dungeonSeed.location.floor); PrintStringOnWindow(21,16,buffer,sUnknown_203B330->unk10,0); // Rescue #C6%s#R sprintfStatic(buffer,sFmtRescue,GetMonSpecies(mail->clientSpecies)); @@ -130,14 +130,14 @@ static void DisplayMissionObjectives(void) for (jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); - if (jobInfo->unk4.dungeon.id == sUnknown_203B330->dungeonIndex + if (jobInfo->dungeonSeed.location.id == sUnknown_203B330->dungeonIndex && jobInfo->mailType != 0 && jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB && jobInfo->mailType != MAIL_TYPE_UNK7) { sub_803B6B0(10, yCoord, 3, sUnknown_203B330->unk10); if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { - sprintfStatic(buffer1, sFmt1, jobInfo->unk4.dungeon.floor); + sprintfStatic(buffer1, sFmt1, jobInfo->dungeonSeed.location.floor); PrintStringOnWindow(21, yCoord, buffer1, sUnknown_203B330->unk10, 0); } diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index ec4d40188..0c1db3f68 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -629,7 +629,7 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, unkStruct_203B480 *param_3) { if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || - (param_3->unk4.dungeon.floor >= GetDungeonFloorCount(param_3->unk4.dungeon.id)) || + (param_3->dungeonSeed.location.floor >= GetDungeonFloorCount(param_3->dungeonSeed.location.id)) || (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_MAX - 1 < param_3->clientSpecies) || (IsInvalidItemReward(param_3->item.id))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; diff --git a/src/run_dungeon.c b/src/run_dungeon.c index 1189c2f4d..6804c2a3f 100644 --- a/src/run_dungeon.c +++ b/src/run_dungeon.c @@ -174,7 +174,7 @@ void RunDungeon_Async(UnkStruct_RunDungeon *r8) if (!r6) { gDungeon->unk644.unk34 = r8->unkF; - gDungeon->unk644.unk8 = r8->unk14; + gDungeon->unk644.dungeonSeed = r8->dungeonSeed; gDungeon->unk644.windTurns = GetTurnLimit(r8->unk4.id); gDungeon->unk644.unk36 = 0; gDungeon->unk644.unk37 = GetRescuesAllowed(r8->unk4.id); @@ -216,7 +216,7 @@ void RunDungeon_Async(UnkStruct_RunDungeon *r8) gDungeon->unk181e8.allTilesRevealed = 1; gDungeon->unk181e8.unk1820C = 1; if (gDungeon->unk644.unk34 == 1) { - gDungeon->unk644.dungeonLocation.id = r8->unk14.unk0; + gDungeon->unk644.dungeonLocation.id = r8->dungeonSeed.location.id; gDungeon->unk644.dungeonLocation.floor = 1; } else { @@ -228,7 +228,7 @@ void RunDungeon_Async(UnkStruct_RunDungeon *r8) } if (!r6) { if (gDungeon->unk644.unk34 == 1) { - gDungeon->unk644.unk38 = r8->unk14.unk4; + gDungeon->unk644.unk38 = r8->dungeonSeed.seed; } else { gDungeon->unk644.unk38 = Rand32Bit() & 0xFFFFFF; @@ -662,7 +662,7 @@ void RunDungeon_Async(UnkStruct_RunDungeon *r8) r8->unk7C = -2; memset(&r8->unk84, 0, sizeof(r8->unk84)); r8->unk80 = gDungeon->unk644.dungeonLocation; - r8->unk84.dungeon = gDungeon->unk644.dungeonLocation; + r8->unk84.location = gDungeon->unk644.dungeonLocation; r8->unk84.seed = gDungeon->unk644.unk38; } @@ -730,7 +730,7 @@ bool8 sub_8043CE4(s32 dungeonId) u8 GetFloorType(void) { - if (gDungeon->unk644.unk34 == 1 && gDungeon->unk644.unk8.unk1 == gDungeon->unk644.dungeonLocation.floor) + if (gDungeon->unk644.unk34 == 1 && gDungeon->unk644.dungeonSeed.location.floor == gDungeon->unk644.dungeonLocation.floor) return FLOOR_TYPE_RESCUE; else if (IsBossFight()) return FLOOR_TYPE_FIXED; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index ffe5b2ba0..5c8d01da7 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -1384,7 +1384,7 @@ void UpdateThankYouMailText(void) else sUnknown_203B2C4->unk53C.itemRewards[0] = ITEM_NOTHING; // unk558 sUnknown_203B2C4->unk53C.quantity = 1; // unk55B - sUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); // unk560 + sUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeonSeed.location, 0); // unk560 sUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 sUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A sUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C diff --git a/src/wonder_mail.c b/src/wonder_mail.c index c2a4207b4..903b52ecd 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1077,7 +1077,7 @@ void sub_8028FDC(void) { case YES_ACTION: mail = GetMailatIndex(sUnknown_203B2C0->mailIndex); - if(!sub_80A2824(mail->unk4.dungeon.id)) + if(!sub_80A2824(mail->dungeonSeed.location.id)) { SetFriendRescueCounterState(CANT_GO_TO_DUNGEON); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 9371f3def..045b02580 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -169,8 +169,8 @@ void sub_802B3E0(void) sUnknown_203B2C8->unk114.moneyReward = 0; IncrementFriendRescueSuccesses(); mail = GetMailatIndex(sUnknown_203B2C8->unk1); - sub_803C37C(&mail->unk4.dungeon, 0, sUnknown_203B2C8->unk114.itemRewards); - sUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); + sub_803C37C(&mail->dungeonSeed.location, 0, sUnknown_203B2C8->unk114.itemRewards); + sUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeonSeed.location, 0); sUnknown_203B2C8->unk114.itemRewards[1] = ITEM_NOTHING; sUnknown_203B2C8->unk114.itemRewards[2] = ITEM_NOTHING; sUnknown_203B2C8->unk114.quantity = 10; diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index bc266f372..c207d784b 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -206,7 +206,7 @@ void sub_803092C(void) local.mailMissionType = MISSION_TYPE_FRIEND_RESCUE; local.mailStatus = MAIL_STATUS_SUSPENDED; - local.unk8 = &mail->unk4; + local.dungeonSeed = &mail->dungeonSeed; local.playerName = mail->playerName; local.clientSpecies = mail->clientSpecies; diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index f62c37798..eeed49e30 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -123,7 +123,7 @@ void sub_8030E48(void) stack.mailTitleType = 7; stack.mailMissionType = MISSION_TYPE_FRIEND_RESCUE; stack.mailStatus = MAIL_STATUS_SUSPENDED; - stack.unk8 = &mail->unk4; + stack.dungeonSeed = &mail->dungeonSeed; stack.playerName = mail->playerName; stack.clientSpecies = mail->clientSpecies; stack.targetSpecies = mail->clientSpecies; diff --git a/src/wonder_mail_802C860.c b/src/wonder_mail_802C860.c index e229f3697..e3c937afb 100644 --- a/src/wonder_mail_802C860.c +++ b/src/wonder_mail_802C860.c @@ -147,7 +147,7 @@ static void sub_802CAA4(void) case 5: sUnknown_203B2F0->unk10C[loopMax].text = sTakeJob; - if (sub_809693C(mail) || !sub_80A2824(mail->unk4.dungeon.id)) + if (sub_809693C(mail) || !sub_80A2824(mail->dungeonSeed.location.id)) sUnknown_203B2F0->unk10C[loopMax].menuAction = -1; else sUnknown_203B2F0->unk10C[loopMax].menuAction = 2; diff --git a/src/wonder_mail_802D098.c b/src/wonder_mail_802D098.c index 7d865b023..b87467ee3 100644 --- a/src/wonder_mail_802D098.c +++ b/src/wonder_mail_802D098.c @@ -225,7 +225,7 @@ static void sub_802D2A8(void) MemoryCopy8(sub_8096DE8(), sUnknown_203B2F8->mail->unk18, sizeof(gUnknown_203B490->unk1B8)); } - switch (sUnknown_203B2F8->mail->wonderMail.unk4.dungeon.id) { + switch (sUnknown_203B2F8->mail->wonderMail.dungeonSeed.location.id) { case DUNGEON_ODDITY_CAVE: sub_8097418(DUNGEON_ODDITY_CAVE - 1, 1); break; @@ -487,7 +487,7 @@ static void sub_802D940(void) case DELETE_ACTION: if (sUnknown_203B2F8->unk9) { mail = &gUnknown_203B490->jobSlots[sUnknown_203B2F8->jobSlotIndex]; - if (mail->mailType > MAIL_TYPE_SUSPENDED_JOB && sUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id) { + if (mail->mailType > MAIL_TYPE_SUSPENDED_JOB && sUnknown_203B2F8->dungeonID == mail->dungeonSeed.location.id) { sub_802D1A0(7); break; } @@ -561,7 +561,7 @@ static bool8 sub_802DAA8(void) if (!sUnknown_203B2F8->unk9) return TRUE; - if (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU && sUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id) + if (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU && sUnknown_203B2F8->dungeonID == mail->dungeonSeed.location.id) return FALSE; return TRUE; } @@ -581,7 +581,7 @@ static bool8 sub_802DADC(void) return TRUE; if (mailType == WONDER_MAIL_TYPE_THANK_YOU) return TRUE; - if (WONDER_MAIL_TYPE_THANK_YOU < mailType && sUnknown_203B2F8->dungeonID != mail->unk4.dungeon.id) + if (WONDER_MAIL_TYPE_THANK_YOU < mailType && sUnknown_203B2F8->dungeonID != mail->dungeonSeed.location.id) return TRUE; } diff --git a/src/world_map.c b/src/world_map.c index 0a2623497..a2bd8131f 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -95,7 +95,7 @@ void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5) WorldMap_RunFrameActions(); if (r5->unk4.unk10) { - speciesId = r5->unk4.unk1C; + speciesId = r5->unk4.mon.speciesNum; ASM_MATCH_TRICK(speciesId); } else { From 3ec12aaa448182f0c2bc3ab64948c3228c037f84 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 19:08:09 +0200 Subject: [PATCH 2/8] Get rid of unkStruct_20398C8 --- include/ground_main.h | 16 ------- include/run_dungeon.h | 4 +- ..._dungeon_8042F6C.h => str_dungeon_setup.h} | 30 +++++++------ src/ground_main.c | 21 +++++----- src/ground_script.c | 7 ++-- src/main_loops.c | 42 +++++++++---------- src/run_dungeon.c | 2 +- 7 files changed, 57 insertions(+), 65 deletions(-) rename include/structs/{str_dungeon_8042F6C.h => str_dungeon_setup.h} (56%) diff --git a/include/ground_main.h b/include/ground_main.h index e7714f3c4..d1d81757d 100644 --- a/include/ground_main.h +++ b/include/ground_main.h @@ -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 { diff --git a/include/run_dungeon.h b/include/run_dungeon.h index 85e904cbd..8ea9e16fa 100644 --- a/include/run_dungeon.h +++ b/include/run_dungeon.h @@ -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); diff --git a/include/structs/str_dungeon_8042F6C.h b/include/structs/str_dungeon_setup.h similarity index 56% rename from include/structs/str_dungeon_8042F6C.h rename to include/structs/str_dungeon_setup.h index 8be703b70..24b263017 100644 --- a/include/structs/str_dungeon_8042F6C.h +++ b/include/structs/str_dungeon_setup.h @@ -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 diff --git a/src/ground_main.c b/src/ground_main.c index 2686fa4a4..79bbafea4 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -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; diff --git a/src/ground_script.c b/src/ground_script.c index 3567d2993..05a8fa911 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -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: { diff --git a/src/main_loops.c b/src/main_loops.c index 2dcaeefbd..5260bc08b 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -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(¶m_1->unk84); + if (param_1->info.unk7C == -2) + sub_809542C(¶m_1->info.unk84); - if (param_1->unk7C == 3 || param_1->unk7C == -2) { - SetDungeonLocationInfo(¶m_1->unk80); + if (param_1->info.unk7C == 3 || param_1->info.unk7C == -2) { + SetDungeonLocationInfo(¶m_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); diff --git a/src/run_dungeon.c b/src/run_dungeon.c index 6804c2a3f..8c4c5650a 100644 --- a/src/run_dungeon.c +++ b/src/run_dungeon.c @@ -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; From 0137085dfc16a3998d0a43867f79a6f32a8cb63f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 21:38:46 +0200 Subject: [PATCH 3/8] DungeonSetupSubstruct --- include/structs/str_dungeon_setup.h | 8 +++++- src/ground_main.c | 29 +++++++++++---------- src/ground_script.c | 2 +- src/main_loops.c | 39 ++++++++++++++--------------- 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/include/structs/str_dungeon_setup.h b/include/structs/str_dungeon_setup.h index 24b263017..c22c15612 100644 --- a/include/structs/str_dungeon_setup.h +++ b/include/structs/str_dungeon_setup.h @@ -7,7 +7,8 @@ #include "structs/str_pokemon.h" #include "structs/str_wonder_mail.h" -typedef struct DungeonSetupInfo +// Apparently used in Dungeon and World Map SetUp Structs +typedef struct DungeonSetupSubstruct { DungeonLocation unk0; u8 unk4; @@ -20,6 +21,11 @@ typedef struct DungeonSetupInfo u8 unkB; u8 unkC; u8 unkD; +} DungeonSetupSubstruct; + +typedef struct DungeonSetupInfo +{ + DungeonSetupSubstruct sub0; // TODO: find a better name DungeonMailSeed dungeonSeed; PokemonStruct1 unk18; u8 *unk74; diff --git a/src/ground_main.c b/src/ground_main.c index 79bbafea4..10eccf673 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -759,7 +759,7 @@ const char *sub_80990B8(void) static inline bool8 sub_80990EC_sub(struct DungeonSetupInfo *iVar1, u32 iVar2) { bool8 flag = FALSE; - iVar1->unkB = 0; + iVar1->sub0.unkB = 0; if ((u16)(iVar2 - 0x25) < 3) flag = TRUE; @@ -775,21 +775,20 @@ u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2) const DungeonInfo *iVar1; u8 auStack_98 [24]; u8 nameBuffer [24]; - u8 r5; u8 dungeonIndex; iVar1 = GetDungeonInfo_80A2608(param_2); dungeonIndex = iVar1->dungeonIndex; - r5 = 0; - param_1->unk0.id = dungeonIndex; - param_1->unk0.floor = 1; - param_1->unkC = r5; + + param_1->sub0.unk0.id = dungeonIndex; + param_1->sub0.unk0.floor = 1; + param_1->sub0.unkC = 0; switch(sub_80A2750(param_2)) { case 1: if (sub_80990EC_sub(param_1, param_2)) { - param_1->unkC = 1; + param_1->sub0.unkC = 1; sub_80A8EC0(auStack_98, 0x5b); BoundedCopyStringtoBuffer(nameBuffer, auStack_98, POKEMON_NAME_LENGTH); { @@ -813,14 +812,14 @@ u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2) } break; case 4: - param_1->unkB = 0; + param_1->sub0.unkB = 0; break; case 2: - param_1->unkB = 2; + param_1->sub0.unkB = 2; break; } - param_1->unk4 = 0; - param_1->unkD = 0; + param_1->sub0.unk4 = 0; + param_1->sub0.unkD = 0; return iVar1->unk11; } @@ -862,8 +861,8 @@ void sub_809927C(u8 param_1) SetScriptVarValue(0x0,DUNGEON_ENTER,0x50); SetScriptVarValue(0x0,DUNGEON_ENTER_INDEX,gUnknown_2039950); sub_8095494(&gUnknown_20398C8.dungeonSeed,param_1); - gUnknown_20398C8.unkB = 1; - gUnknown_20398C8.unkC = 0; - gUnknown_20398C8.unk4 = 0; - gUnknown_20398C8.unkD = 0; + gUnknown_20398C8.sub0.unkB = 1; + gUnknown_20398C8.sub0.unkC = 0; + gUnknown_20398C8.sub0.unk4 = 0; + gUnknown_20398C8.sub0.unkD = 0; } diff --git a/src/ground_script.c b/src/ground_script.c index 05a8fa911..8b60f13fd 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -1040,7 +1040,7 @@ s16 HandleAction(Action *action, DebugLocation *debug) s32 val; sub_8099220(&unkStruct, dungeonEnter); val = sub_80023E4(6); - res = sub_809034C(unkStruct.unk0.id, 0, gUnknown_203B4B0, val, 0); + res = sub_809034C(unkStruct.sub0.unk0.id, 0, gUnknown_203B4B0, val, 0); gUnknown_2039DA4 = res; switch (res) { case 2: { diff --git a/src/main_loops.c b/src/main_loops.c index 5260bc08b..3f9a6574e 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -45,6 +45,7 @@ #include "text_2.h" #include "text_3.h" #include "text_util.h" +#include "structs/str_dungeon_setup.h" typedef struct unkTalkTable { @@ -71,7 +72,7 @@ static void LoadTitleScreen(void); static void NDS_LoadOverlay_GroundMain(); static u32 sub_80009D0(u32 param_1); /* static */ // TODO: Uncomment -void sub_80011E8(u8 *param_1); +void sub_80011E8(DungeonSetupSubstruct *info); static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0); /* static */ // TODO: Uncomment u32 xxx_script_related_8001334(u32 r0); @@ -1234,7 +1235,7 @@ void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) param_1->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800 param_1->info.unk78 = MemoryAlloc(local_18, 7); // size: sizeof(Dungeon) - if (param_1->info.unk4) { + if (param_1->info.sub0.unk4) { PrepareQuickSaveRead(param_1->info.unk74, local_1c); while (TRUE) { @@ -1375,35 +1376,33 @@ u8 sub_8001170(void) // arm9.bin::0200CDA4 /* static */ // TODO: Uncomment -void sub_80011CC(u8 *param_1, u8 param_2) +void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId) { - u32 zero = 0; + info->unk0.id = dungId; + info->unk0.floor = 0; - param_1[0] = param_2; - param_1[1] = zero; + sub_80011E8(info); - sub_80011E8(param_1); - - param_1[11] = 0; - param_1[4] = 0; - param_1[12] = 0; - param_1[13] = 0; + info->unkB = 0; + info->unk4 = 0; + info->unkC = 0; + info->unkD = 0; } // arm9.bin::0200CD1C /* static */ // TODO: Uncomment -void sub_80011E8(u8 *param_1) +void sub_80011E8(DungeonSetupSubstruct *info) { - param_1[5] = sub_80023E4(8); - param_1[6] = sub_80023E4(3); - param_1[8] = sub_80023E4(7); - param_1[9] = sub_80023E4(0); - param_1[10] = sub_80023E4(5); + info->unk5 = sub_80023E4(8); + info->unk6 = sub_80023E4(3); + info->unk8 = sub_80023E4(7); + info->unk9 = sub_80023E4(0); + info->unkA = sub_80023E4(5); if (sub_80023E4(24) && sub_80023E4(25) && sub_80023E4(26)) - param_1[7] = 1; + info->unk7 = 1; else - param_1[7] = 0; + info->unk7 = 0; } // arm9.bin::0200CC4C From 26d1acd09b2a84678c6cf3051b0b8384d77cf71d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 21:58:55 +0200 Subject: [PATCH 4/8] Match sub_80009D0 --- src/main_loops.c | 946 ++++++++++++++++------------------------------- 1 file changed, 321 insertions(+), 625 deletions(-) diff --git a/src/main_loops.c b/src/main_loops.c index 3f9a6574e..aa3c0d726 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -45,6 +45,8 @@ #include "text_2.h" #include "text_3.h" #include "text_util.h" +#include "world_map.h" +#include "friend_areas_map.h" #include "structs/str_dungeon_setup.h" typedef struct unkTalkTable @@ -72,13 +74,24 @@ static void LoadTitleScreen(void); static void NDS_LoadOverlay_GroundMain(); static u32 sub_80009D0(u32 param_1); /* static */ // TODO: Uncomment +void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId); void sub_80011E8(DungeonSetupSubstruct *info); +void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1); +u8 sub_8001170(void); +void sub_8001248(void); +void sub_80012C0(void); static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0); /* static */ // TODO: Uncomment u32 xxx_script_related_8001334(u32 r0); static void MainLoops_RunFrameActions(u32 unused); +extern u8 sub_80990EC(DungeonSetupInfo *param_1, s32 param_2); +extern bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon); +extern u8 sub_80991E0(DungeonSetupInfo *param_1,short *param_2); extern u32 xxx_script_related_8098468(u32); +extern void IncrementNumAdventures(void); +extern void sub_8096BD0(void); +extern bool8 IsEnterWithoutGameSave(u8 dungeon); // arm9.bin::0200E0A8 void GameLoop(void) @@ -584,633 +597,316 @@ void sub_80008C0_Async(u32 errorKind) MainLoops_RunFrameActions(0); } -// https://decomp.me/scratch/dlKUt (66.34%) // arm9.bin::0200D1E0 -NAKED -static u32 sub_80009D0(u32 param_1) +u32 sub_80009D0(u32 a0) { - asm_unified( -" push {r4-r7,lr}\n" -" mov r7, r10\n" -" mov r6, r9\n" -" mov r5, r8\n" -" push {r5-r7}\n" -" ldr r4, _08000A04\n" -" add sp, r4\n" -" adds r4, r0, 0\n" -" movs r0, 0\n" -" movs r1, 0x18\n" -" bl GetScriptVarValue\n" -" adds r7, r0, 0\n" -" movs r0, 0\n" -" mov r10, r0\n" -" bl sub_801180C\n" -" movs r0, 0x10\n" -" bl FadeOutAllMusic\n" -" cmp r7, 0x7\n" -" bne _08000A30\n" -" cmp r4, 0x2\n" -" bne _08000A08\n" -" movs r7, 0x8\n" -" b _08000A3A\n" -" .align 2, 0\n" -"_08000A04: .4byte 0xfffffdd4\n" -"_08000A08:\n" -" cmp r4, 0x3\n" -" bne _08000A3A\n" -" movs r7, 0xB\n" -" movs r0, 0\n" -" movs r1, 0x18\n" -" movs r2, 0xB\n" -" bl SetScriptVarValue\n" -" bl sub_8096BD0\n" -" movs r0, 0x3\n" -" bl QuickSave_Async\n" -" b _08000A3A\n" -"_08000A24:\n" -" movs r3, 0x1\n" -" mov r10, r3\n" -" b _08000EC6\n" -"_08000A2A:\n" -" movs r0, 0x1\n" -" mov r10, r0\n" -" b _08000EC6\n" -"_08000A30:\n" -" cmp r7, 0\n" -" beq _08000A3A\n" -" cmp r7, 0xB\n" -" beq _08000A3A\n" -" movs r7, 0x1\n" -"_08000A3A:\n" -" movs r0, 0\n" -" movs r1, 0x41\n" -" bl ClearScriptVarArray\n" -"_08000A42:\n" -" cmp r7, 0x4\n" -" bne _08000AB6\n" -" movs r0, 0\n" -" movs r1, 0xD\n" -" bl GetScriptVarValue\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" bl sub_8002658\n" -" adds r4, r0, 0\n" -" lsls r4, 24\n" -" lsrs r4, 24\n" -" ldr r0, _08000A9C\n" -" movs r1, 0x8\n" -" bl MemoryAlloc\n" -" str r0, [sp, 0x8]\n" -" mov r0, sp\n" -" strb r4, [r0, 0x4]\n" -" movs r0, 0x9\n" -" bl sub_80023E4\n" -" mov r1, sp\n" -" strb r0, [r1, 0x5]\n" -" mov r0, sp\n" -" bl ShowFriendAreasMap_Async\n" -" ldr r0, [sp, 0x8]\n" -" bl MemoryFree\n" -" mov r0, sp\n" -" ldrb r0, [r0, 0xC]\n" -" cmp r0, 0x3A\n" -" beq _08000B70\n" -" mov r0, sp\n" -" ldrb r0, [r0, 0xC]\n" -" cmp r0, 0\n" -" beq _08000AA0\n" -" bl sub_8002694\n" -" lsls r0, 16\n" -" asrs r2, r0, 16\n" -" b _08000AA2\n" -" .align 2, 0\n" -"_08000A9C: .4byte 0x00004e30\n" -"_08000AA0:\n" -" movs r2, 0x9\n" -"_08000AA2:\n" -" movs r0, 0\n" -" movs r1, 0xD\n" -" bl SetScriptVarValue\n" -" movs r0, 0\n" -" movs r1, 0xE\n" -" movs r2, 0\n" -" bl SetScriptVarValue\n" -" b _08000B70\n" -"_08000AB6:\n" -" cmp r7, 0x5\n" -" bne _08000B9C\n" -" movs r0, 0\n" -" movs r1, 0x12\n" -" bl GetScriptVarValue\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" mov r8, r0\n" -" bl sub_80A2740\n" -" lsls r0, 24\n" -" lsrs r6, r0, 24\n" -" movs r4, 0\n" -" ldr r5, _08000B18\n" -" add r5, sp\n" -"_08000AD6:\n" -" lsls r0, r4, 24\n" -" lsrs r0, 24\n" -" bl sub_80A28F0\n" -" adds r1, r5, r4\n" -" strb r0, [r1]\n" -" adds r4, 0x1\n" -" cmp r4, 0x3E\n" -" ble _08000AD6\n" -" cmp r6, 0x63\n" -" beq _08000B70\n" -" add r4, sp, 0xB8\n" -" movs r0, 0x3F\n" -" strb r0, [r4, 0x4]\n" -" add r0, sp, 0xC0\n" -" adds r1, r6, 0\n" -" bl sub_80011CC\n" -" ldrb r1, [r4, 0xD]\n" -" add r0, sp, 0x128\n" -" strb r1, [r0]\n" -" mov r0, r8\n" -" bl sub_80A2750\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" adds r5, r4, 0\n" -" cmp r0, 0x1\n" -" beq _08000B1C\n" -" cmp r0, 0x2\n" -" beq _08000B3C\n" -" b _08000B50\n" -" .align 2, 0\n" -"_08000B18: .4byte 0x00000129\n" -"_08000B1C:\n" -" add r4, sp, 0x170\n" -" add r0, sp, 0x174\n" -" mov r1, r8\n" -" bl sub_80990EC\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000B50\n" -" ldrb r0, [r4, 0x10]\n" -" strb r0, [r5, 0x14]\n" -" add r0, sp, 0xD0\n" -" add r1, sp, 0x18C\n" -" movs r2, 0x58\n" -" bl memcpy\n" -" b _08000B50\n" -"_08000B3C:\n" -" ldrb r0, [r5, 0x8]\n" -" add r1, sp, 0xD0\n" -" bl sub_8096A08\n" -" lsls r0, 24\n" -" lsrs r0, 24\n" -" cmp r0, 0\n" -" beq _08000B4E\n" -" movs r0, 0x1\n" -"_08000B4E:\n" -" strb r0, [r5, 0x14]\n" -"_08000B50:\n" -" ldr r0, _08000B74\n" -" movs r1, 0x8\n" -" bl MemoryAlloc\n" -" add r4, sp, 0x168\n" -" str r0, [r4]\n" -" adds r0, r5, 0\n" -" bl ShowWorldMap_Async\n" -" ldr r0, [r4]\n" -" bl MemoryFree\n" -" add r0, sp, 0x16C\n" -" ldrb r0, [r0]\n" -" cmp r0, 0\n" -" bne _08000B78\n" -"_08000B70:\n" -" movs r7, 0x2\n" -" b _08000A42\n" -" .align 2, 0\n" -"_08000B74: .4byte 0x00006474\n" -"_08000B78:\n" -" movs r0, 0\n" -" movs r1, 0x13\n" -" mov r2, r8\n" -" bl SetScriptVarValue\n" -" ldr r1, _08000B98\n" -" movs r0, 0x2\n" -" str r0, [r1]\n" -" movs r0, 0x4\n" -" bl sub_800A8F8\n" -" movs r0, 0x5\n" -" bl xxx_script_related_8001334\n" -" adds r5, r0, 0\n" -" b _08000BEC\n" -" .align 2, 0\n" -"_08000B98: .4byte sUnknown_203B03C\n" -"_08000B9C:\n" -" cmp r7, 0x8\n" -" bne _08000BA4\n" -" movs r5, 0\n" -" b _08000BEC\n" -"_08000BA4:\n" -" cmp r7, 0x7\n" -" bne _08000BAC\n" -" movs r5, 0x2\n" -" b _08000BEC\n" -"_08000BAC:\n" -" cmp r7, 0xB\n" -" bne _08000BB6\n" -" bl sub_80012C0\n" -" b _08000BBE\n" -"_08000BB6:\n" -" cmp r7, 0xC\n" -" bne _08000BBE\n" -" bl sub_8001248\n" -"_08000BBE:\n" -" ldr r1, _08000BE0\n" -" movs r0, 0x2\n" -" str r0, [r1]\n" -" movs r0, 0x4\n" -" bl sub_800A8F8\n" -" adds r0, r7, 0\n" -" bl xxx_script_related_8001334\n" -" adds r5, r0, 0\n" -" cmp r5, 0xE\n" -" bne _08000BD8\n" -" b _08000EC6\n" -"_08000BD8:\n" -" cmp r5, 0x5\n" -" bne _08000BE4\n" -" movs r7, 0x4\n" -" b _08000A42\n" -" .align 2, 0\n" -"_08000BE0: .4byte sUnknown_203B03C\n" -"_08000BE4:\n" -" cmp r5, 0x6\n" -" bne _08000BEC\n" -" movs r7, 0x5\n" -" b _08000A42\n" -"_08000BEC:\n" -" add r6, sp, 0x170\n" -" movs r4, 0\n" -" strb r4, [r6, 0x11]\n" -" strb r4, [r6, 0x10]\n" -" movs r3, 0xC6\n" -" lsls r3, 1\n" -" add r3, sp\n" -" mov r8, r3\n" -" mov r0, r8\n" -" movs r1, 0\n" -" movs r2, 0x58\n" -" bl MemoryFill8\n" -" movs r0, 0\n" -" mov r9, r0\n" -" strh r4, [r6, 0x24]\n" -" cmp r5, 0x7\n" -" beq _08000C3C\n" -" cmp r5, 0x8\n" -" bne _08000C38\n" -" add r0, sp, 0x174\n" -" add r1, sp, 0x228\n" -" bl sub_80991E0\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000C4C\n" -" ldrb r0, [r6, 0x4]\n" -" mov r1, r8\n" -" bl sub_8096A08\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" bne _08000C32\n" -" b _08000D98\n" -"_08000C32:\n" -" movs r0, 0x1\n" -" strb r0, [r6, 0x10]\n" -" b _08000D98\n" -"_08000C38:\n" -" cmp r5, 0xA\n" -" bne _08000C52\n" -"_08000C3C:\n" -" add r0, sp, 0x174\n" -" add r1, sp, 0x228\n" -" bl sub_80991E0\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000C4C\n" -" b _08000D98\n" -"_08000C4C:\n" -" movs r5, 0xD\n" -" movs r7, 0x9\n" -" b _08000D98\n" -"_08000C52:\n" -" cmp r5, 0x9\n" -" bne _08000C6C\n" -" add r0, sp, 0x174\n" -" add r1, sp, 0x228\n" -" bl sub_80991E0\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000C66\n" -" b _08000D98\n" -"_08000C66:\n" -" movs r5, 0xB\n" -" movs r7, 0xC\n" -" b _08000D98\n" -"_08000C6C:\n" -" cmp r5, 0\n" -" bne _08000D04\n" -" bl sub_8011FA8\n" -" adds r1, r0, 0\n" -" ldr r0, _08000CA0\n" -" cmp r1, r0\n" -" bne _08000CC8\n" -" movs r2, 0x1\n" -" strb r2, [r6, 0x11]\n" -" strb r2, [r6, 0x8]\n" -" mov r3, r9\n" -" strb r3, [r6, 0xF]\n" -" ldr r0, _08000CA4\n" -" ldr r1, [r0]\n" -" movs r3, 0xC\n" -" ldrsh r0, [r1, r3]\n" -" cmp r0, 0\n" -" beq _08000CA8\n" -" strb r2, [r6, 0x10]\n" -" adds r1, 0x4\n" -" mov r0, r8\n" -" movs r2, 0x58\n" -" bl memcpy\n" -" b _08000CAC\n" -" .align 2, 0\n" -"_08000CA0: .4byte 0x000f1207\n" -"_08000CA4: .4byte gUnknown_203B484\n" -"_08000CA8:\n" -" mov r0, r9\n" -" strb r0, [r6, 0x10]\n" -"_08000CAC:\n" -" ldr r4, _08000CC4\n" -" ldr r0, [r4]\n" -" adds r0, 0x4\n" -" movs r1, 0\n" -" movs r2, 0x58\n" -" bl MemoryFill8\n" -" ldr r1, [r4]\n" -" movs r0, 0\n" -" strh r0, [r1, 0xC]\n" -" b _08000CE4\n" -" .align 2, 0\n" -"_08000CC4: .4byte gUnknown_203B484\n" -"_08000CC8:\n" -" ldr r0, _08000CD8\n" -" cmp r1, r0\n" -" bne _08000CDC\n" -" movs r5, 0x1\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -" b _08000CE4\n" -" .align 2, 0\n" -"_08000CD8: .4byte 0x000f1208\n" -"_08000CDC:\n" -" movs r5, 0x1\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -"_08000CE4:\n" -" cmp r5, 0x1\n" -" bne _08000D98\n" -" ldr r4, _08000D00\n" -" ldr r0, [r4]\n" -" adds r0, 0x4\n" -" movs r1, 0\n" -" movs r2, 0x58\n" -" bl MemoryFill8\n" -" ldr r1, [r4]\n" -" movs r0, 0\n" -" strh r0, [r1, 0xC]\n" -" b _08000D98\n" -" .align 2, 0\n" -"_08000D00: .4byte gUnknown_203B484\n" -"_08000D04:\n" -" cmp r5, 0x2\n" -" bne _08000D98\n" -" bl sub_8011C1C\n" -" cmp r0, 0x2\n" -" bne _08000D34\n" -" bl sub_8011FA8\n" -" adds r1, r0, 0\n" -" movs r0, 0x1\n" -" strb r0, [r6, 0x8]\n" -" mov r3, r9\n" -" strb r3, [r6, 0x11]\n" -" ldr r0, _08000D30\n" -" cmp r1, r0\n" -" beq _08000D36\n" -" adds r0, 0x1\n" -" movs r5, 0x1\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -" b _08000D36\n" -" .align 2, 0\n" -"_08000D30: .4byte 0x000f1207\n" -"_08000D34:\n" -" movs r5, 0x3\n" -"_08000D36:\n" -" cmp r5, 0x3\n" -" bne _08000D7A\n" -" bl sub_8001170\n" -" lsls r0, 24\n" -" lsrs r4, r0, 24\n" -" movs r5, 0x1\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -" cmp r4, 0x3F\n" -" beq _08000D70\n" -" cmp r4, 0x63\n" -" beq _08000D70\n" -" adds r0, r4, 0\n" -" bl IsEnterWithoutGameSave\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000D70\n" -" bl sub_8011C1C\n" -" cmp r0, 0x2\n" -" bne _08000D6C\n" -" movs r5, 0x3\n" -" movs r7, 0x7\n" -" b _08000D70\n" -"_08000D6C:\n" -" movs r5, 0xC\n" -" movs r7, 0xA\n" -"_08000D70:\n" -" cmp r5, 0x1\n" -" bne _08000D98\n" -" bl sub_8011C1C\n" -" b _08000D98\n" -"_08000D7A:\n" -" cmp r5, 0x4\n" -" bne _08000D8E\n" -" movs r5, 0x1\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -" movs r0, 0x1\n" -" bl sub_80008C0_Async\n" -" b _08000D98\n" -"_08000D8E:\n" -" cmp r5, 0x1\n" -" bne _08000D98\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -"_08000D98:\n" -" subs r0, r5, 0x7\n" -" cmp r0, 0x3\n" -" bls _08000DAC\n" -" cmp r5, 0\n" -" beq _08000E1E\n" -" cmp r5, 0x2\n" -" beq _08000DAC\n" -" cmp r5, 0x3\n" -" beq _08000DAC\n" -" b _08000A42\n" -"_08000DAC:\n" -" cmp r5, 0\n" -" beq _08000E1E\n" -" cmp r5, 0x2\n" -" beq _08000E1E\n" -" cmp r5, 0x3\n" -" beq _08000E1E\n" -" bl sub_8001170\n" -" lsls r0, 24\n" -" lsrs r6, r0, 24\n" -" bl IncrementNumAdventures\n" -" cmp r5, 0x9\n" -" bne _08000E00\n" -" ldr r4, _08000DF4\n" -" add r4, sp\n" -" adds r0, r4, 0\n" -" bl sub_8099394\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" beq _08000E00\n" -" ldrb r0, [r4]\n" -" bl GetMailatIndex\n" -" adds r2, r0, 0\n" -" adds r0, 0x2C\n" -" ldrb r1, [r0]\n" -" ldrb r0, [r0]\n" -" lsls r0, 24\n" -" asrs r0, 24\n" -" cmp r0, 0x1\n" -" ble _08000DF8\n" -" subs r1, 0x1\n" -" b _08000DFA\n" -" .align 2, 0\n" -"_08000DF4: .4byte 0x0000022a\n" -"_08000DF8:\n" -" movs r1, 0\n" -"_08000DFA:\n" -" adds r0, r2, 0\n" -" adds r0, 0x2C\n" -" strb r1, [r0]\n" -"_08000E00:\n" -" cmp r6, 0x3F\n" -" bne _08000E0C\n" -" movs r0, 0\n" -" bl QuickSave_Async\n" -" b _08000E1E\n" -"_08000E0C:\n" -" adds r0, r6, 0\n" -" bl IsEnterWithoutGameSave\n" -" lsls r0, 24\n" -" cmp r0, 0\n" -" bne _08000E1E\n" -" movs r0, 0\n" -" bl QuickSave_Async\n" -"_08000E1E:\n" -" ldr r0, _08000E70\n" -" movs r4, 0x1\n" -" str r4, [r0]\n" -" movs r0, 0x3\n" -" bl sub_800A8F8\n" -" add r5, sp, 0x170\n" -" str r4, [r5]\n" -" add r0, sp, 0x174\n" -" bl sub_80011E8\n" -" adds r0, r5, 0\n" -" bl LoadAndRunQuickSaveDungeon_Async\n" -" add r4, sp, 0x1EC\n" -" movs r0, 0\n" -" ldrsh r1, [r4, r0]\n" -" cmp r1, 0x3\n" -" bne _08000E46\n" -" b _08000A24\n" -"_08000E46:\n" -" movs r0, 0x2\n" -" negs r0, r0\n" -" cmp r1, r0\n" -" bne _08000E50\n" -" b _08000A2A\n" -"_08000E50:\n" -" movs r0, 0\n" -" movs r1, 0x41\n" -" bl ClearScriptVarArray\n" -" ldrh r0, [r4]\n" -" adds r0, 0x1\n" -" lsls r0, 16\n" -" asrs r0, 16\n" -" cmp r0, 0x6\n" -" bhi _08000EBE\n" -" lsls r0, 2\n" -" ldr r1, _08000E74\n" -" adds r0, r1\n" -" ldr r0, [r0]\n" -" mov pc, r0\n" -" .align 2, 0\n" -"_08000E70: .4byte sUnknown_203B03C\n" -"_08000E74: .4byte _08000E78\n" -" .align 2, 0\n" -"_08000E78:\n" -" .4byte _08000EB6\n" -" .4byte _08000EBE\n" -" .4byte _08000E94\n" -" .4byte _08000EB2\n" -" .4byte _08000EBE\n" -" .4byte _08000E94\n" -" .4byte _08000EBE\n" -"_08000E94:\n" -" movs r7, 0x9\n" -" movs r0, 0xF7\n" -" lsls r0, 1\n" -" add r0, sp\n" -" ldrb r0, [r0]\n" -" movs r3, 0x1\n" -" cmp r0, 0\n" -" beq _08000EA6\n" -" movs r3, 0x2\n" -"_08000EA6:\n" -" movs r0, 0\n" -" movs r1, 0x41\n" -" movs r2, 0\n" -" bl SetScriptVarArrayValue\n" -" b _08000A42\n" -"_08000EB2:\n" -" movs r7, 0xA\n" -" b _08000A42\n" -"_08000EB6:\n" -" movs r7, 0xC\n" -" bl sub_8096BD0\n" -" b _08000A42\n" -"_08000EBE:\n" -" movs r7, 0xB\n" -" bl sub_8096BD0\n" -" b _08000A42\n" -"_08000EC6:\n" -" mov r0, r10\n" -" movs r3, 0x8B\n" -" lsls r3, 2\n" -" add sp, r3\n" -" pop {r3-r5}\n" -" mov r8, r3\n" -" mov r9, r4\n" -" mov r10, r5\n" -" pop {r4-r7}\n" -" pop {r1}\n" -" bx r1"); + s32 r7 = GetScriptVarValue(NULL, 0x18); + bool8 ret = FALSE; + + sub_801180C(); + FadeOutAllMusic(0x10); + if (r7 == 7) { + if (a0 == 2) { + r7 = 8; + } + else if (a0 == 3) { + r7 = 11; + SetScriptVarValue(NULL, 0x18, 0xB); + sub_8096BD0(); + QuickSave_Async(3); + } + } + else if (r7 != 0 && r7 != 11) { + r7 = 1; + } + + ClearScriptVarArray(NULL, 0x41); + while (1) { + s32 r5; + struct struct_unk800F990 friendAreasSetup; + struct UnkStruct_sub_8010268 worldMapSetup; + DungeonSetupStruct dungeonSetup; + s16 sp552; + + if (r7 == 4) { + u8 mapId = sub_8002658(GetScriptVarValue(NULL,0xd)); + + friendAreasSetup.friendAreasMapPtr = MemoryAlloc(0x4e30,8); + friendAreasSetup.startingFriendAreaId = mapId; + friendAreasSetup.unk5 = sub_80023E4(9); + ShowFriendAreasMap_Async(&friendAreasSetup); + MemoryFree(friendAreasSetup.friendAreasMapPtr); + if (friendAreasSetup.unkC != 0x3A) { + s32 val; + u8 a = friendAreasSetup.unkC; + if (a != 0) { + val = sub_8002694(a); + } + else { + val = 9; + } + SetScriptVarValue(NULL,0xd,val); // GROUND_ENTER + SetScriptVarValue(NULL,0xe,0); // GROUND_ENTER_LINK + } + r7 = 2; + continue; + } + else if (r7 == 5) { + s32 i; + + s32 r8 = (s16) GetScriptVarValue(NULL, 0x12); + u8 r6 = sub_80A2740(r8); + for (i = 0; i < 63; i++) { + worldMapSetup.unk4.unk6D[i] = sub_80A28F0(i); + } + + if (r6 == 99) { + r7 = 2; + continue; + } + + worldMapSetup.unk4.unk0.id = DUNGEON_OUT_ON_RESCUE; + sub_80011CC((void *) &worldMapSetup.unk4.unk4, r6); + worldMapSetup.unk4.unk6C = worldMapSetup.unk4.pad1[1]; + switch ((s16) sub_80A2750(r8)) { + case 1: + if (sub_80990EC(&dungeonSetup.info, r8)) { + worldMapSetup.unk4.unk10 = dungeonSetup.info.sub0.unkC; + worldMapSetup.unk4.mon = dungeonSetup.info.unk18; + } + break; + case 2: + if (sub_8096A08(worldMapSetup.unk4.unk4.id, &worldMapSetup.unk4.mon)) { + worldMapSetup.unk4.unk10 = 1; + } + else { + worldMapSetup.unk4.unk10 = 0; + } + break; + } + + worldMapSetup.unkB0 = MemoryAlloc(sizeof(*worldMapSetup.unkB0), 8); + ShowWorldMap_Async(&worldMapSetup); + MemoryFree(worldMapSetup.unkB0); + if (worldMapSetup.unkB4 == 0) { + r7 = 2; + continue; + } + SetScriptVarValue(NULL, 0x13, r8); + sUnknown_203B03C = 2; + sub_800A8F8(4); + r5 = xxx_script_related_8001334(5); + } + else if (r7 == 8) { + r5 = 0; + } + else if (r7 == 7) { + r5 = 2; + } + else { + if (r7 == 11) { + sub_80012C0(); + } + else if (r7 == 12) { + sub_8001248(); + } + sUnknown_203B03C = 2; + sub_800A8F8(4); + r5 = xxx_script_related_8001334(r7); + if (r5 == 14) { + break; + } + else if (r5 == 5) { + r7 = 4; + continue; + } + else if (r5 == 6) { + r7 = 5; + continue; + } + } + + dungeonSetup.info.sub0.unkD = 0; + dungeonSetup.info.sub0.unkC = 0; + MemoryFill8(&dungeonSetup.info.unk18, 0, sizeof(dungeonSetup.info.unk18)); + dungeonSetup.info.unk18.speciesNum = 0; + if (r5 == 7) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 13; + r7 = 9; + } + } + else if (r5 == 8) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 13; + r7 = 9; + } + else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.unk18)) { + dungeonSetup.info.sub0.unkC = 1; + } + } + else if (r5 == 10) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 13; + r7 = 9; + } + } + else if (r5 == 9) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 11; + r7 = 12; + } + } + else if (r5 == 0) { + u32 var = sub_8011FA8(); + if (var == 0xF1207) { + dungeonSetup.info.sub0.unkD = 1; + dungeonSetup.info.sub0.unk4 = 1; + dungeonSetup.info.sub0.unkB = 0; + if (gUnknown_203B484->unk4.speciesNum != 0) { + dungeonSetup.info.sub0.unkC = 1; + dungeonSetup.info.unk18 = gUnknown_203B484->unk4; + } + else { + dungeonSetup.info.sub0.unkC = 0; + } + MemoryFill8(&gUnknown_203B484->unk4, 0, sizeof(gUnknown_203B484->unk4)); + gUnknown_203B484->unk4.speciesNum = 0; + } + else if (var == 0xF1208) { + r5 = 1; + r7 = 11; + sub_8096BD0(); + } + else { + r5 = 1; + r7 = 11; + sub_8096BD0(); + } + + if (r5 == 1) { + MemoryFill8(&gUnknown_203B484->unk4, 0, sizeof(gUnknown_203B484->unk4)); + gUnknown_203B484->unk4.speciesNum = 0; + } + } + else if (r5 == 2) { + if (sub_8011C1C() == 2) { + u32 var = sub_8011FA8(); + dungeonSetup.info.sub0.unk4 = 1; + dungeonSetup.info.sub0.unkD = 0; + if (var == 0xF1207) { + ; + } + else if (var == 0xF1208) { + r5 = 1; + r7 = 11; + sub_8096BD0(); + } + else { + r5 = 1; + r7 = 11; + sub_8096BD0(); + } + } + else { + r5 = 3; + } + + if (r5 == 3) { + u8 r4 = sub_8001170(); + r5 = 1; + r7 = 11; + sub_8096BD0(); + if (r4 != 63 && r4 != 99 && IsEnterWithoutGameSave(r4)) { + if (sub_8011C1C() == 2) { + r5 = 3; + r7 = 7; + } + else { + r5 = 12; + r7 = 10; + } + } + + if (r5 == 1) { + sub_8011C1C(); + } + } + else if (r5 == 4) { + r5 = 1; + r7 = 11; + sub_8096BD0(); + sub_80008C0_Async(1); + } + else if (r5 == 1) { + r7 = 11; + sub_8096BD0(); + } + } + + if (r5 == 7 || r5 == 8 || r5 == 9 || r5 == 10 || r5 == 0 || r5 == 2 || r5 == 3) { + if (r5 != 0 && r5 != 2 && r5 != 3) { + u8 r6 = sub_8001170(); + + IncrementNumAdventures(); + if (r5 == 9) { + u8 sp554; + + if (sub_8099394(&sp554)) { + unkStruct_203B480 *mail = GetMailatIndex(sp554); + mail->rescuesAllowed = (mail->rescuesAllowed > 1) ? mail->rescuesAllowed - 1 : 0; + } + } + + if (r6 == 63) { + QuickSave_Async(0); + } + else if (!IsEnterWithoutGameSave(r6)) { + QuickSave_Async(0); + } + } + + sUnknown_203B03C = 1; + sub_800A8F8(3); + dungeonSetup.unk0 = 1; + sub_80011E8(&dungeonSetup.info.sub0); + LoadAndRunQuickSaveDungeon_Async(&dungeonSetup); + if (dungeonSetup.info.unk7C == 3) { + ret = TRUE; + break; + } + if (dungeonSetup.info.unk7C == -2) { + ret = TRUE; + break; + } + + ClearScriptVarArray(NULL, 0x41); + switch (dungeonSetup.info.unk7C) { + case 1: + case 4: + r7 = 9; + SetScriptVarArrayValue(NULL, 0x41, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); + break; + case 2: + r7 = 10; + break; + case -1: + r7 = 12; + sub_8096BD0(); + break; + case 5: + r7 = 11; + sub_8096BD0(); + break; + default: + r7 = 11; + sub_8096BD0(); + break; + } + } + } + + return ret; } // This func is probably used for running the dungeon in general (and updating RNG mechanics), not just quicksave. From 9cb273a0a92dc0a69bd038f6a162f86f8eec4142 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 22:12:48 +0200 Subject: [PATCH 5/8] Sync World Map struct --- include/world_map.h | 5 ++-- src/main_loops.c | 59 ++++++++++++++++++--------------------------- src/world_map.c | 8 +++--- 3 files changed, 30 insertions(+), 42 deletions(-) diff --git a/include/world_map.h b/include/world_map.h index 8e35b1475..3865f575e 100644 --- a/include/world_map.h +++ b/include/world_map.h @@ -8,6 +8,7 @@ #include "structs/str_position.h" #include "structs/str_dungeon.h" #include "structs/str_pokemon.h" +#include "structs/str_dungeon_setup.h" struct UnkStruct_Sub1 { @@ -35,9 +36,7 @@ struct WorldMap struct UnkStruct_sub_8010494 { DungeonLocation unk0; - DungeonLocation unk4; - u8 pad1[8]; - u8 unk10; + DungeonSetupSubstruct unk4; PokemonStruct1 mon; u8 unk6C; u8 unk6D[63]; diff --git a/src/main_loops.c b/src/main_loops.c index aa3c0d726..5cb3c82ec 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -73,16 +73,14 @@ static EWRAM_INIT PersonalityRelated sPersonalityRelated_203B040 = { static void LoadTitleScreen(void); static void NDS_LoadOverlay_GroundMain(); static u32 sub_80009D0(u32 param_1); -/* static */ // TODO: Uncomment -void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId); -void sub_80011E8(DungeonSetupSubstruct *info); -void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1); -u8 sub_8001170(void); -void sub_8001248(void); -void sub_80012C0(void); +static void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId); +static void sub_80011E8(DungeonSetupSubstruct *info); +static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1); +static u8 sub_8001170(void); +static void sub_8001248(void); +static void sub_80012C0(void); static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0); -/* static */ // TODO: Uncomment -u32 xxx_script_related_8001334(u32 r0); +static u32 xxx_script_related_8001334(u32 r0); static void MainLoops_RunFrameActions(u32 unused); extern u8 sub_80990EC(DungeonSetupInfo *param_1, s32 param_2); @@ -399,8 +397,7 @@ s32 sub_8000728(void) } // arm9.bin::0200DB58 -/* static */ // TODO: uncomment -void QuickSave_Async(u32 mode) +static void QuickSave_Async(u32 mode) { s32 saveStatus; s32 counter; @@ -513,8 +510,7 @@ void QuickSave_Async(u32 mode) } // arm9.bin::0200D998 -/*static*/ // TODO: Uncomment -void sub_80008C0_Async(u32 errorKind) +static void sub_80008C0_Async(u32 errorKind) { s32 saveStatus = SAVE_COMPLETED; s32 counter = 0; @@ -645,8 +641,8 @@ u32 sub_80009D0(u32 a0) else { val = 9; } - SetScriptVarValue(NULL,0xd,val); // GROUND_ENTER - SetScriptVarValue(NULL,0xe,0); // GROUND_ENTER_LINK + SetScriptVarValue(NULL,0xd,val); + SetScriptVarValue(NULL,0xe,0); } r7 = 2; continue; @@ -666,21 +662,21 @@ u32 sub_80009D0(u32 a0) } worldMapSetup.unk4.unk0.id = DUNGEON_OUT_ON_RESCUE; - sub_80011CC((void *) &worldMapSetup.unk4.unk4, r6); - worldMapSetup.unk4.unk6C = worldMapSetup.unk4.pad1[1]; + sub_80011CC(&worldMapSetup.unk4.unk4, r6); + worldMapSetup.unk4.unk6C = worldMapSetup.unk4.unk4.unk5; switch ((s16) sub_80A2750(r8)) { case 1: if (sub_80990EC(&dungeonSetup.info, r8)) { - worldMapSetup.unk4.unk10 = dungeonSetup.info.sub0.unkC; + worldMapSetup.unk4.unk4.unkC = dungeonSetup.info.sub0.unkC; worldMapSetup.unk4.mon = dungeonSetup.info.unk18; } break; case 2: - if (sub_8096A08(worldMapSetup.unk4.unk4.id, &worldMapSetup.unk4.mon)) { - worldMapSetup.unk4.unk10 = 1; + if (sub_8096A08(worldMapSetup.unk4.unk4.unk0.id, &worldMapSetup.unk4.mon)) { + worldMapSetup.unk4.unk4.unkC = 1; } else { - worldMapSetup.unk4.unk10 = 0; + worldMapSetup.unk4.unk4.unkC = 0; } break; } @@ -913,8 +909,7 @@ u32 sub_80009D0(u32 a0) // More documentation needed to be sure // 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(DungeonSetupStruct *param_1) +static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) { u8 quickSaveValid; s32 quickSaveStatus; @@ -1054,8 +1049,7 @@ void sub_8001064(void) } // arm9.bin::0200CDD4 -/* static */ // TODO: Uncomment -u8 sub_8001170(void) +static u8 sub_8001170(void) { s16 local_10; s16 auStack_e; @@ -1071,8 +1065,7 @@ u8 sub_8001170(void) } // arm9.bin::0200CDA4 -/* static */ // TODO: Uncomment -void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId) +static void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId) { info->unk0.id = dungId; info->unk0.floor = 0; @@ -1086,8 +1079,7 @@ void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId) } // arm9.bin::0200CD1C -/* static */ // TODO: Uncomment -void sub_80011E8(DungeonSetupSubstruct *info) +static void sub_80011E8(DungeonSetupSubstruct *info) { info->unk5 = sub_80023E4(8); info->unk6 = sub_80023E4(3); @@ -1102,8 +1094,7 @@ void sub_80011E8(DungeonSetupSubstruct *info) } // arm9.bin::0200CC4C -/* static */ // TODO: Uncomment -void sub_8001248(void) +static void sub_8001248(void) { s32 index; @@ -1124,8 +1115,7 @@ void sub_8001248(void) } // arm9.bin::0200CB88 -/* static */ // TODO: Uncomment -void sub_80012C0(void) +static void sub_80012C0(void) { s32 index; @@ -1158,8 +1148,7 @@ static void nullsub_2(DungeonSetupStruct *r0) } // arm9.bin::0200CAD0 -/* static */ // TODO: Uncomment -u32 xxx_script_related_8001334(u32 r0) +static u32 xxx_script_related_8001334(u32 r0) { return xxx_script_related_8098468(r0); } diff --git a/src/world_map.c b/src/world_map.c index a2bd8131f..e16342ac8 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -87,14 +87,14 @@ void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5) for (i = 0; i < 60; i++) WorldMap_RunFrameActions(); - AnimateMonPath_Async(r5->unk4.unk0.id, r5->unk4.unk4.id); - PrintDungeonName(&r5->unk4.unk4); + AnimateMonPath_Async(r5->unk4.unk0.id, r5->unk4.unk4.unk0.id); + PrintDungeonName(&r5->unk4.unk4.unk0); // 60 frame delay for (i = 0; i < 60; i++) WorldMap_RunFrameActions(); - if (r5->unk4.unk10) { + if (r5->unk4.unk4.unkC) { speciesId = r5->unk4.mon.speciesNum; ASM_MATCH_TRICK(speciesId); } @@ -102,7 +102,7 @@ void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5) speciesId = 0; } - var = sub_809034C(r5->unk4.unk4.id, speciesId, text, r5->unk4.unk6C, FALSE); + var = sub_809034C(r5->unk4.unk4.unk0.id, speciesId, text, r5->unk4.unk6C, FALSE); if (var == 0) { r5->unkB4 = 1; } From a8ece36780c1d1946877af963a36067eea20054e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 29 May 2025 23:48:48 +0200 Subject: [PATCH 6/8] document around main loops --- include/friend_areas_map.h | 6 +- include/structs/str_dungeon_setup.h | 4 +- include/world_map.h | 14 +-- src/friend_areas_map.c | 12 +- src/ground_main.c | 2 +- src/main_loops.c | 189 ++++++++++++++-------------- src/run_dungeon.c | 80 ++++++------ src/world_map.c | 40 +++--- 8 files changed, 174 insertions(+), 173 deletions(-) diff --git a/include/friend_areas_map.h b/include/friend_areas_map.h index 8a9eac10e..a35c02dbc 100644 --- a/include/friend_areas_map.h +++ b/include/friend_areas_map.h @@ -93,17 +93,17 @@ struct FriendAreasMap extern struct FriendAreasMap *gFriendAreasMapPtr; -struct struct_unk800F990 +struct FriendAreasMapSetupStruct { u32 unk0; u8 startingFriendAreaId; u8 unk5; struct FriendAreasMap *friendAreasMapPtr; - u8 unkC; + u8 chosenAreaId; u8 fillD[168]; }; -void ShowFriendAreasMap_Async(struct struct_unk800F990 *param_1); +void ShowFriendAreasMap_Async(struct FriendAreasMapSetupStruct *setupPtr); void PrintFriendAreaNameInMap(u8 *strBuffer, u8 index); bool8 IsFriendAreaShownOnMap(u8 friendAreaId); diff --git a/include/structs/str_dungeon_setup.h b/include/structs/str_dungeon_setup.h index c22c15612..bdba5a548 100644 --- a/include/structs/str_dungeon_setup.h +++ b/include/structs/str_dungeon_setup.h @@ -27,9 +27,9 @@ typedef struct DungeonSetupInfo { DungeonSetupSubstruct sub0; // TODO: find a better name DungeonMailSeed dungeonSeed; - PokemonStruct1 unk18; + PokemonStruct1 mon; u8 *unk74; - Dungeon *unk78; + Dungeon *dungeon; s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed) u8 unk7E; DungeonLocation unk80; diff --git a/include/world_map.h b/include/world_map.h index 3865f575e..30dbda41f 100644 --- a/include/world_map.h +++ b/include/world_map.h @@ -33,23 +33,23 @@ struct WorldMap u8 unk5E98[1500]; }; -struct UnkStruct_sub_8010494 +struct WorldMapInfo { - DungeonLocation unk0; + DungeonLocation startLocation; DungeonSetupSubstruct unk4; PokemonStruct1 mon; u8 unk6C; u8 unk6D[63]; }; -struct UnkStruct_sub_8010268 +struct WorldMapSetupStruct { u8 fill0[4]; - struct UnkStruct_sub_8010494 unk4; - struct WorldMap *unkB0; - u8 unkB4; + struct WorldMapInfo info; + struct WorldMap *worldMap; + bool8 dungeonEntered; // Some dungeons have specific requirements, where it's not always possible to enter chosen dungeon. }; -void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5); +void ShowWorldMap_Async(struct WorldMapSetupStruct *setupPtr); #endif diff --git a/src/friend_areas_map.c b/src/friend_areas_map.c index e77d4eecb..e18ca7eb4 100644 --- a/src/friend_areas_map.c +++ b/src/friend_areas_map.c @@ -35,18 +35,18 @@ static u8 GetChosenDirection(void); static void InitMapLocations(u8 startingFriendAreaId); static void MoveToNewLocation_Async(s32 destLocationId, s32 direction, s32 nFrames); -void ShowFriendAreasMap_Async(struct struct_unk800F990 *param_1) +void ShowFriendAreasMap_Async(struct FriendAreasMapSetupStruct *setupPtr) { - gFriendAreasMapPtr = param_1->friendAreasMapPtr; + gFriendAreasMapPtr = setupPtr->friendAreasMapPtr; gUnknown_2026E4E = 0x1010; sub_80095CC(0, 20); UpdateFadeInTile(2); gFriendAreasMapPtr->locationsInfo = sFriendAreaLocations[0]; - gFriendAreasMapPtr->unk4A2C = param_1->unk5; + gFriendAreasMapPtr->unk4A2C = setupPtr->unk5; FriendAreasMap_InitGfx(); gFriendAreasMapPtr->unk4A28 = -1; gFriendAreasMapPtr->unk4A1C = -1; - InitMapLocations(param_1->startingFriendAreaId); + InitMapLocations(setupPtr->startingFriendAreaId); gFriendAreasMapPtr->locationIdOnBPress = gFriendAreasMapPtr->teamBaseLocationId; sCurrDirection = 0xff; sHeldDpadCounter = 0; @@ -63,12 +63,12 @@ void ShowFriendAreasMap_Async(struct struct_unk800F990 *param_1) else if (inputRet == 2) { if (!ChooseAreaInLocation_Async()) continue; - param_1->unkC = gFriendAreasMapPtr->chosenFriendAreaId; + setupPtr->chosenAreaId = gFriendAreasMapPtr->chosenFriendAreaId; break; } else if (inputRet == 3) { if (gFriendAreasMapPtr->currLocationId == gFriendAreasMapPtr->locationIdOnBPress) { - param_1->unkC = 0; + setupPtr->chosenAreaId = FRIEND_AREA_NONE; break; } MoveToNewLocation_Async(gFriendAreasMapPtr->locationIdOnBPress, DIRECTION_SOUTH, 10); diff --git a/src/ground_main.c b/src/ground_main.c index 10eccf673..d1c32f282 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -807,7 +807,7 @@ u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2) .currExp = 25000, }; - sub_808D144(¶m_1->unk18, &stack); + sub_808D144(¶m_1->mon, &stack); } } break; diff --git a/src/main_loops.c b/src/main_loops.c index 5cb3c82ec..f96dc9a94 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -48,6 +48,7 @@ #include "world_map.h" #include "friend_areas_map.h" #include "structs/str_dungeon_setup.h" +#include "constants/friend_area.h" typedef struct unkTalkTable { @@ -77,8 +78,8 @@ static void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId); static void sub_80011E8(DungeonSetupSubstruct *info); static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1); static u8 sub_8001170(void); -static void sub_8001248(void); -static void sub_80012C0(void); +static void RemoveMoneyAndRandomItems(void); +static void RemoveAllMoneyAndItems(void); static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0); static u32 xxx_script_related_8001334(u32 r0); static void MainLoops_RunFrameActions(u32 unused); @@ -594,163 +595,163 @@ static void sub_80008C0_Async(u32 errorKind) } // arm9.bin::0200D1E0 -u32 sub_80009D0(u32 a0) +static u32 sub_80009D0(u32 a0) { - s32 r7 = GetScriptVarValue(NULL, 0x18); + s32 mode = GetScriptVarValue(NULL, START_MODE); bool8 ret = FALSE; sub_801180C(); FadeOutAllMusic(0x10); - if (r7 == 7) { + if (mode == 7) { if (a0 == 2) { - r7 = 8; + mode = 8; } else if (a0 == 3) { - r7 = 11; - SetScriptVarValue(NULL, 0x18, 0xB); + mode = 11; + SetScriptVarValue(NULL, START_MODE, 11); sub_8096BD0(); QuickSave_Async(3); } } - else if (r7 != 0 && r7 != 11) { - r7 = 1; + else if (mode != 0 && mode != 11) { + mode = 1; } - ClearScriptVarArray(NULL, 0x41); + ClearScriptVarArray(NULL, EVENT_S08E01); while (1) { s32 r5; - struct struct_unk800F990 friendAreasSetup; - struct UnkStruct_sub_8010268 worldMapSetup; + struct FriendAreasMapSetupStruct friendAreasSetup; + struct WorldMapSetupStruct worldMapSetup; DungeonSetupStruct dungeonSetup; s16 sp552; - if (r7 == 4) { - u8 mapId = sub_8002658(GetScriptVarValue(NULL,0xd)); + if (mode == 4) { + u8 mapId = sub_8002658(GetScriptVarValue(NULL,GROUND_ENTER)); - friendAreasSetup.friendAreasMapPtr = MemoryAlloc(0x4e30,8); + friendAreasSetup.friendAreasMapPtr = MemoryAlloc(sizeof(*friendAreasSetup.friendAreasMapPtr),8); friendAreasSetup.startingFriendAreaId = mapId; friendAreasSetup.unk5 = sub_80023E4(9); ShowFriendAreasMap_Async(&friendAreasSetup); MemoryFree(friendAreasSetup.friendAreasMapPtr); - if (friendAreasSetup.unkC != 0x3A) { + if (friendAreasSetup.chosenAreaId != NUM_FRIEND_AREAS) { s32 val; - u8 a = friendAreasSetup.unkC; - if (a != 0) { - val = sub_8002694(a); + u32 areaId = friendAreasSetup.chosenAreaId; + if (areaId != FRIEND_AREA_NONE) { + val = sub_8002694(areaId); } else { val = 9; } - SetScriptVarValue(NULL,0xd,val); - SetScriptVarValue(NULL,0xe,0); + SetScriptVarValue(NULL,GROUND_ENTER,val); + SetScriptVarValue(NULL,GROUND_ENTER_LINK,0); } - r7 = 2; + mode = 2; continue; } - else if (r7 == 5) { + else if (mode == 5) { s32 i; - s32 r8 = (s16) GetScriptVarValue(NULL, 0x12); - u8 r6 = sub_80A2740(r8); + s32 dungId = (s16) GetScriptVarValue(NULL, DUNGEON_SELECT); + u8 r6 = sub_80A2740(dungId); for (i = 0; i < 63; i++) { - worldMapSetup.unk4.unk6D[i] = sub_80A28F0(i); + worldMapSetup.info.unk6D[i] = sub_80A28F0(i); } if (r6 == 99) { - r7 = 2; + mode = 2; continue; } - worldMapSetup.unk4.unk0.id = DUNGEON_OUT_ON_RESCUE; - sub_80011CC(&worldMapSetup.unk4.unk4, r6); - worldMapSetup.unk4.unk6C = worldMapSetup.unk4.unk4.unk5; - switch ((s16) sub_80A2750(r8)) { + worldMapSetup.info.startLocation.id = DUNGEON_OUT_ON_RESCUE; + sub_80011CC(&worldMapSetup.info.unk4, r6); + worldMapSetup.info.unk6C = worldMapSetup.info.unk4.unk5; + switch ((s16) sub_80A2750(dungId)) { case 1: - if (sub_80990EC(&dungeonSetup.info, r8)) { - worldMapSetup.unk4.unk4.unkC = dungeonSetup.info.sub0.unkC; - worldMapSetup.unk4.mon = dungeonSetup.info.unk18; + if (sub_80990EC(&dungeonSetup.info, dungId)) { + worldMapSetup.info.unk4.unkC = dungeonSetup.info.sub0.unkC; + worldMapSetup.info.mon = dungeonSetup.info.mon; } break; case 2: - if (sub_8096A08(worldMapSetup.unk4.unk4.unk0.id, &worldMapSetup.unk4.mon)) { - worldMapSetup.unk4.unk4.unkC = 1; + if (sub_8096A08(worldMapSetup.info.unk4.unk0.id, &worldMapSetup.info.mon)) { + worldMapSetup.info.unk4.unkC = 1; } else { - worldMapSetup.unk4.unk4.unkC = 0; + worldMapSetup.info.unk4.unkC = 0; } break; } - worldMapSetup.unkB0 = MemoryAlloc(sizeof(*worldMapSetup.unkB0), 8); + worldMapSetup.worldMap = MemoryAlloc(sizeof(*worldMapSetup.worldMap), 8); ShowWorldMap_Async(&worldMapSetup); - MemoryFree(worldMapSetup.unkB0); - if (worldMapSetup.unkB4 == 0) { - r7 = 2; + MemoryFree(worldMapSetup.worldMap); + if (!worldMapSetup.dungeonEntered) { + mode = 2; continue; } - SetScriptVarValue(NULL, 0x13, r8); + SetScriptVarValue(NULL, DUNGEON_ENTER, dungId); sUnknown_203B03C = 2; sub_800A8F8(4); r5 = xxx_script_related_8001334(5); } - else if (r7 == 8) { + else if (mode == 8) { r5 = 0; } - else if (r7 == 7) { + else if (mode == 7) { r5 = 2; } else { - if (r7 == 11) { - sub_80012C0(); + if (mode == 11) { + RemoveAllMoneyAndItems(); } - else if (r7 == 12) { - sub_8001248(); + else if (mode == 12) { + RemoveMoneyAndRandomItems(); } sUnknown_203B03C = 2; sub_800A8F8(4); - r5 = xxx_script_related_8001334(r7); + r5 = xxx_script_related_8001334(mode); if (r5 == 14) { break; } else if (r5 == 5) { - r7 = 4; + mode = 4; continue; } else if (r5 == 6) { - r7 = 5; + mode = 5; continue; } } dungeonSetup.info.sub0.unkD = 0; dungeonSetup.info.sub0.unkC = 0; - MemoryFill8(&dungeonSetup.info.unk18, 0, sizeof(dungeonSetup.info.unk18)); - dungeonSetup.info.unk18.speciesNum = 0; + MemoryFill8(&dungeonSetup.info.mon, 0, sizeof(dungeonSetup.info.mon)); + dungeonSetup.info.mon.speciesNum = 0; if (r5 == 7) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - r7 = 9; + mode = 9; } } else if (r5 == 8) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - r7 = 9; + mode = 9; } - else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.unk18)) { + else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.mon)) { dungeonSetup.info.sub0.unkC = 1; } } else if (r5 == 10) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - r7 = 9; + mode = 9; } } else if (r5 == 9) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 11; - r7 = 12; + mode = 12; } } else if (r5 == 0) { @@ -761,7 +762,7 @@ u32 sub_80009D0(u32 a0) dungeonSetup.info.sub0.unkB = 0; if (gUnknown_203B484->unk4.speciesNum != 0) { dungeonSetup.info.sub0.unkC = 1; - dungeonSetup.info.unk18 = gUnknown_203B484->unk4; + dungeonSetup.info.mon = gUnknown_203B484->unk4; } else { dungeonSetup.info.sub0.unkC = 0; @@ -771,12 +772,12 @@ u32 sub_80009D0(u32 a0) } else if (var == 0xF1208) { r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); } else { r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); } @@ -795,12 +796,12 @@ u32 sub_80009D0(u32 a0) } else if (var == 0xF1208) { r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); } else { r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); } } @@ -811,16 +812,16 @@ u32 sub_80009D0(u32 a0) if (r5 == 3) { u8 r4 = sub_8001170(); r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); if (r4 != 63 && r4 != 99 && IsEnterWithoutGameSave(r4)) { if (sub_8011C1C() == 2) { r5 = 3; - r7 = 7; + mode = 7; } else { r5 = 12; - r7 = 10; + mode = 10; } } @@ -830,12 +831,12 @@ u32 sub_80009D0(u32 a0) } else if (r5 == 4) { r5 = 1; - r7 = 11; + mode = 11; sub_8096BD0(); sub_80008C0_Async(1); } else if (r5 == 1) { - r7 = 11; + mode = 11; sub_8096BD0(); } } @@ -880,22 +881,22 @@ u32 sub_80009D0(u32 a0) switch (dungeonSetup.info.unk7C) { case 1: case 4: - r7 = 9; + mode = 9; SetScriptVarArrayValue(NULL, 0x41, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); break; case 2: - r7 = 10; + mode = 10; break; case -1: - r7 = 12; + mode = 12; sub_8096BD0(); break; case 5: - r7 = 11; + mode = 11; sub_8096BD0(); break; default: - r7 = 11; + mode = 11; sub_8096BD0(); break; } @@ -914,17 +915,17 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) u8 quickSaveValid; s32 quickSaveStatus; s32 local_1c; // 0x4800 - s32 local_18; // sizeof(Dungeon) + s32 dungeonStructSize; // sizeof(Dungeon) quickSaveValid = TRUE; sUnknown_203B03C = 1; sub_800A8F8(3); sub_8014144(); - sub_8043D50(&local_1c, &local_18); + sub_8043D50(&local_1c, &dungeonStructSize); param_1->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800 - param_1->info.unk78 = MemoryAlloc(local_18, 7); // size: sizeof(Dungeon) + param_1->info.dungeon = MemoryAlloc(dungeonStructSize, 7); // size: sizeof(Dungeon) if (param_1->info.sub0.unk4) { PrepareQuickSaveRead(param_1->info.unk74, local_1c); @@ -977,7 +978,7 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) if (quickSaveStatus == 3) break; if (quickSaveStatus == 1) { - MemoryFree(param_1->info.unk78); + MemoryFree(param_1->info.dungeon); MemoryFree(param_1->info.unk74); } @@ -987,7 +988,7 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) } else { sub_808ED00(); - MemoryFree(param_1->info.unk78); + MemoryFree(param_1->info.dungeon); MemoryFree(param_1->info.unk74); } } @@ -1094,19 +1095,19 @@ static void sub_80011E8(DungeonSetupSubstruct *info) } // arm9.bin::0200CC4C -static void sub_8001248(void) +static void RemoveMoneyAndRandomItems(void) { - s32 index; + s32 i; - for (index = 0; index < INVENTORY_SIZE; index++) { + for (i = 0; i < INVENTORY_SIZE; i++) { if (RandInt(100) < 50) - ZeroOutItem(&gTeamInventoryRef->teamItems[index]); + ZeroOutItem(&gTeamInventoryRef->teamItems[i]); } FillInventoryGaps(); - for (index = 0; index < NUM_MONSTERS; index++) { - PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index]; + for (i = 0; i < NUM_MONSTERS; i++) { + PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i]; if (PokemonFlag1(mon) && PokemonFlag2(mon)) mon->heldItem.id = ITEM_NOTHING; } @@ -1115,18 +1116,18 @@ static void sub_8001248(void) } // arm9.bin::0200CB88 -static void sub_80012C0(void) +static void RemoveAllMoneyAndItems(void) { - s32 index; + s32 i; - for (index = 0; index < INVENTORY_SIZE; index++) { - ZeroOutItem(&gTeamInventoryRef->teamItems[index]); + for (i = 0; i < INVENTORY_SIZE; i++) { + ZeroOutItem(&gTeamInventoryRef->teamItems[i]); } FillInventoryGaps(); - for (index = 0; index < NUM_MONSTERS; index++) { - PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index]; + for (i = 0; i < NUM_MONSTERS; i++) { + PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i]; if (PokemonFlag1(mon) && PokemonFlag2(mon)) mon->heldItem.id = ITEM_NOTHING; } @@ -1154,10 +1155,10 @@ static u32 xxx_script_related_8001334(u32 r0) } // arm9.bin::0200CA1C -static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0) +static void LoadAndRunDungeon_Async(DungeonSetupStruct *setupPtr) { - nullsub_2(r0); - RunDungeon_Async(r0); + nullsub_2(setupPtr); + RunDungeon_Async(setupPtr); NDS_LoadOverlay_GroundMain(); } diff --git a/src/run_dungeon.c b/src/run_dungeon.c index 8c4c5650a..6b7c44f91 100644 --- a/src/run_dungeon.c +++ b/src/run_dungeon.c @@ -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(DungeonSetupStruct *r8) +void RunDungeon_Async(DungeonSetupStruct *setupPtr) { bool8 check; Entity *leader; @@ -154,11 +154,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8) RGB color; gUnknown_203B40C = 0; - r6 = r8->unk8; - r9 = r8->unk11; - r10 = r8->unk10; - gSerializedData_203B41C = r8->unk74; - gDungeon = r8->unk78; + r6 = setupPtr->info.sub0.unk4; + r9 = setupPtr->info.sub0.unkD; + r10 = setupPtr->info.sub0.unkC; + gSerializedData_203B41C = setupPtr->info.unk74; + gDungeon = setupPtr->info.dungeon; if (!r6) { *gSerializedData_203B41C = 0; } @@ -173,20 +173,20 @@ void RunDungeon_Async(DungeonSetupStruct *r8) gPlayerDotMapPosition.x = 100; if (!r6) { - gDungeon->unk644.unk34 = r8->unkF; - gDungeon->unk644.dungeonSeed = r8->dungeonSeed; - gDungeon->unk644.windTurns = GetTurnLimit(r8->unk4.id); + gDungeon->unk644.unk34 = setupPtr->info.sub0.unkB; + gDungeon->unk644.dungeonSeed = setupPtr->info.dungeonSeed; + gDungeon->unk644.windTurns = GetTurnLimit(setupPtr->info.sub0.unk0.id); gDungeon->unk644.unk36 = 0; - gDungeon->unk644.unk37 = GetRescuesAllowed(r8->unk4.id); + gDungeon->unk644.unk37 = GetRescuesAllowed(setupPtr->info.sub0.unk0.id); } gDungeon->unk644.unk54 = 0; gDungeon->unk644.unk55 = 0; - gDungeon->unk644.unk18 = r8->unk9; - gDungeon->unk644.unk16 = r8->unkC; - gDungeon->unk644.canRecruit = r8->unkA; - gDungeon->unk644.unk15 = r8->unkB; - gDungeon->unk644.hasInventory = r8->unkD; - gDungeon->unk644.unk19 = r8->unkE; + gDungeon->unk644.unk18 = setupPtr->info.sub0.unk5; + gDungeon->unk644.unk16 = setupPtr->info.sub0.unk8; + gDungeon->unk644.canRecruit = setupPtr->info.sub0.unk6; + gDungeon->unk644.unk15 = setupPtr->info.sub0.unk7; + gDungeon->unk644.hasInventory = setupPtr->info.sub0.unk9; + gDungeon->unk644.unk19 = setupPtr->info.sub0.unkA; StopDungeonBGM(); sub_803D4AC(); sub_804513C(); @@ -216,11 +216,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8) gDungeon->unk181e8.allTilesRevealed = 1; gDungeon->unk181e8.unk1820C = 1; if (gDungeon->unk644.unk34 == 1) { - gDungeon->unk644.dungeonLocation.id = r8->dungeonSeed.location.id; + gDungeon->unk644.dungeonLocation.id = setupPtr->info.dungeonSeed.location.id; gDungeon->unk644.dungeonLocation.floor = 1; } else { - gDungeon->unk644.dungeonLocation = r8->unk4; + gDungeon->unk644.dungeonLocation = setupPtr->info.sub0.unk0; } gDungeon->unk644.unk30 = 0; @@ -228,7 +228,7 @@ void RunDungeon_Async(DungeonSetupStruct *r8) } if (!r6) { if (gDungeon->unk644.unk34 == 1) { - gDungeon->unk644.unk38 = r8->dungeonSeed.seed; + gDungeon->unk644.unk38 = setupPtr->info.dungeonSeed.seed; } else { gDungeon->unk644.unk38 = Rand32Bit() & 0xFFFFFF; @@ -253,11 +253,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8) } if (r10) { - r8->unk1C.heldItem.id = 0; + setupPtr->info.mon.heldItem.id = 0; if (IsLevelResetTo1(gDungeon->unk644.dungeonLocation.id)) { - sub_808D0D8(&r8->unk1C); + sub_808D0D8(&setupPtr->info.mon); } - sub_8068A84(&r8->unk1C); + sub_8068A84(&setupPtr->info.mon); if (r6) { sub_806B404(); } @@ -561,8 +561,8 @@ void RunDungeon_Async(DungeonSetupStruct *r8) if (gDungeon->unk3 != 0) { SaveDungeonState(gSerializedData_203B41C, 0x4800); - r8->unk7C = 3; - r8->unk80 = gDungeon->unk644.dungeonLocation; + setupPtr->info.unk7C = 3; + setupPtr->info.unk80 = gDungeon->unk644.dungeonLocation; check = FALSE; } else @@ -648,7 +648,7 @@ void RunDungeon_Async(DungeonSetupStruct *r8) // See comment above FAKEMATCH: gUnknown_203B40C = 0; - r8->unk7E = 0; + setupPtr->info.unk7E = 0; sub_8097FF8(); sub_80095CC(1, 0x14); sub_803E13C(); @@ -659,33 +659,33 @@ void RunDungeon_Async(DungeonSetupStruct *r8) if (sub_8083C24()) { if (gDungeon->unk6 != 0) { - r8->unk7C = -2; - memset(&r8->unk84, 0, sizeof(r8->unk84)); - r8->unk80 = gDungeon->unk644.dungeonLocation; - r8->unk84.location = gDungeon->unk644.dungeonLocation; - r8->unk84.seed = gDungeon->unk644.unk38; + setupPtr->info.unk7C = -2; + memset(&setupPtr->info.unk84, 0, sizeof(setupPtr->info.unk84)); + setupPtr->info.unk80 = gDungeon->unk644.dungeonLocation; + setupPtr->info.unk84.location = gDungeon->unk644.dungeonLocation; + setupPtr->info.unk84.seed = gDungeon->unk644.unk38; } else { - r8->unk7C = -1; + setupPtr->info.unk7C = -1; } } else if (sub_8083C50()) { if (gDungeon->unk644.unk34 == 1) { - r8->unk7C = 4; + setupPtr->info.unk7C = 4; } else if (gDungeon->unk644.unk34 == 0) { - r8->unk7C = 1; + setupPtr->info.unk7C = 1; sub_8084424(); } else { - r8->unk7C = 1; + setupPtr->info.unk7C = 1; sub_8084424(); } - r8->unk7E = gDungeon->unk644.unk30; + setupPtr->info.unk7E = gDungeon->unk644.unk30; } else { - r8->unk7C = 2; + setupPtr->info.unk7C = 2; sub_8084424(); } } @@ -694,14 +694,14 @@ void RunDungeon_Async(DungeonSetupStruct *r8) sub_803E214(); nullsub_56(); CloseDungeonMapFile(); - if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) { + if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == 2) { CleanUpInventoryItems(); } - if (r8->unk7C == 1 || r8->unk7C == -2 || r8->unk7C == 4 || r8->unk7C == -1 || r8->unk7C == 2) { - if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) { + if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == -2 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == -1 || setupPtr->info.unk7C == 2) { + if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == 2) { sub_8068BDC(1); } - else if (r8->unk7C == -2) { + else if (setupPtr->info.unk7C == -2) { sub_8068BDC(0); } else { diff --git a/src/world_map.c b/src/world_map.c index e16342ac8..7ef959c18 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -59,7 +59,7 @@ static void nullsub_24(void); static void WorldMap_RunFrameActions(void); static void UpdateMonSpritePosition(void); static void UpdateBg(void); -static void sub_8010494(struct UnkStruct_sub_8010494 *r9); +static void sub_8010494(struct WorldMapInfo *r9); static void AnimateMonPath_Async(u8 id1, u8 id2); static void sub_801059C(void); static bool8 PlayerEnterDungeonPrompt_Async(u8 *str); @@ -70,52 +70,52 @@ static void PrintDungeonName(DungeonLocation *dungLocation); // Code is very similar to the functions in friend_areas_map_util.c -void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5) +void ShowWorldMap_Async(struct WorldMapSetupStruct *setupPtr) { - s32 i, speciesId, var; + s32 i, speciesId, dungeonEnter; u8 text[1000]; - sWorldMapPtr = r5->unkB0; + sWorldMapPtr = setupPtr->worldMap; gUnknown_2026E4E = 2566; sub_80095CC(0, 0x14); UpdateFadeInTile(2); sub_801059C(); - sub_8010494(&r5->unk4); + sub_8010494(&setupPtr->info); sub_801178C(); // 60 frame delay for (i = 0; i < 60; i++) WorldMap_RunFrameActions(); - AnimateMonPath_Async(r5->unk4.unk0.id, r5->unk4.unk4.unk0.id); - PrintDungeonName(&r5->unk4.unk4.unk0); + AnimateMonPath_Async(setupPtr->info.startLocation.id, setupPtr->info.unk4.unk0.id); + PrintDungeonName(&setupPtr->info.unk4.unk0); // 60 frame delay for (i = 0; i < 60; i++) WorldMap_RunFrameActions(); - if (r5->unk4.unk4.unkC) { - speciesId = r5->unk4.mon.speciesNum; + if (setupPtr->info.unk4.unkC) { + speciesId = setupPtr->info.mon.speciesNum; ASM_MATCH_TRICK(speciesId); } else { speciesId = 0; } - var = sub_809034C(r5->unk4.unk4.unk0.id, speciesId, text, r5->unk4.unk6C, FALSE); - if (var == 0) { - r5->unkB4 = 1; + dungeonEnter = sub_809034C(setupPtr->info.unk4.unk0.id, speciesId, text, setupPtr->info.unk6C, FALSE); + if (dungeonEnter == 0) { + setupPtr->dungeonEntered = TRUE; } - else if (var == 1) { + else if (dungeonEnter == 1) { PrintDialogueMessage_Async(text); - r5->unkB4 = 0; + setupPtr->dungeonEntered = FALSE; } - else if (var == 2) { + else if (dungeonEnter == 2) { if (PlayerEnterDungeonPrompt_Async(text)) { - r5->unkB4 = 1; + setupPtr->dungeonEntered = TRUE; } else { - r5->unkB4 = 0; + setupPtr->dungeonEntered = FALSE; } } @@ -231,7 +231,7 @@ static void AnimateMonPath_Async(u8 id1, u8 id2) WorldMap_RunFrameActions(); } -static void sub_8010494(struct UnkStruct_sub_8010494 *r9) +static void sub_8010494(struct WorldMapInfo *info) { s32 i; for (i = 0; i < 64; i++) { @@ -239,7 +239,7 @@ static void sub_8010494(struct UnkStruct_sub_8010494 *r9) u8 r0; if (i < 63) { - r0 = r9->unk6D[i]; + r0 = info->unk6D[i]; } else { r0 = 1; @@ -256,7 +256,7 @@ static void sub_8010494(struct UnkStruct_sub_8010494 *r9) } AxResInitFile(&sWorldMapPtr->monAxSprite, sWorldMapPtr->unk1100[3], 0, 0, 0, 0, TRUE); - sWorldMapPtr->monSpritePos = gDungeonCoordinates[r9->unk0.id]; + sWorldMapPtr->monSpritePos = gDungeonCoordinates[info->startLocation.id]; sWorldMapPtr->bgPos.x = sWorldMapPtr->monSpritePos.x - 120; sWorldMapPtr->bgPos.y = sWorldMapPtr->monSpritePos.y - 80; UpdateMonSpritePosition(); From 22152152c1905ed4c5b22a5e2e73910a99148cf5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 2 Jun 2025 10:12:47 +0200 Subject: [PATCH 7/8] Match LoadTitleScreen --- src/data/main_loops.h | 44 +------ src/main_loops.c | 270 ++++++++++++++++++------------------------ 2 files changed, 119 insertions(+), 195 deletions(-) diff --git a/src/data/main_loops.h b/src/data/main_loops.h index 5578fb3ca..030560bf8 100644 --- a/src/data/main_loops.h +++ b/src/data/main_loops.h @@ -1,45 +1,3 @@ -static const unkTalkTable sBaseKindTable[17] = { - [0] = { .unk0 = 0, .species = MONSTER_PIKACHU }, - [1] = { .unk0 = 1, .species = MONSTER_MEOWTH }, - [2] = { .unk0 = 2, .species = MONSTER_EEVEE }, - [3] = { .unk0 = 3, .species = MONSTER_SKITTY }, - [4] = { .unk0 = 4, .species = MONSTER_SQUIRTLE }, - [5] = { .unk0 = 5, .species = MONSTER_TOTODILE }, - [6] = { .unk0 = 6, .species = MONSTER_MUDKIP }, - [7] = { .unk0 = 7, .species = MONSTER_PSYDUCK }, - [8] = { .unk0 = 8, .species = MONSTER_CHARMANDER }, - [9] = { .unk0 = 9, .species = MONSTER_TORCHIC }, - [10] = { .unk0 = 10, .species = MONSTER_CYNDAQUIL }, - [11] = { .unk0 = 11, .species = MONSTER_CUBONE }, - [12] = { .unk0 = 12, .species = MONSTER_MACHOP }, - [13] = { .unk0 = 13, .species = MONSTER_BULBASAUR }, - [14] = { .unk0 = 14, .species = MONSTER_CHIKORITA }, - [15] = { .unk0 = 15, .species = MONSTER_TREECKO }, - [16] = { .unk0 = 0, .species = MONSTER_NONE }, -}; - -static const unkTalkTable sTalkKindTable[5] = { - [0] = { .unk0 = 1, .species = MONSTER_SQUIRTLE }, - [1] = { .unk0 = 1, .species = MONSTER_TOTODILE }, - [2] = { .unk0 = 3, .species = MONSTER_TORCHIC }, - [3] = { .unk0 = 3, .species = MONSTER_CHIKORITA }, - [4] = { .unk0 = 2, .species = MONSTER_NONE }, -}; - -ALIGNED(4) static const u8 sPMDBuildVersion[] = _("PKDi ver 1.0 [Apr 28 2006] 16:37:54"); - -ALIGNED(4) static const u8 sTitlen0[] = _("titlen0"); -ALIGNED(4) static const u8 sTitlen1[] = _("titlen1"); -ALIGNED(4) static const u8 sTitlen2[] = _("titlen2"); -/* static */ // TODO: Uncomment -ALIGNED(4) const u8* const sLoadScreenBackgroundFileNames[3] = { sTitlen0, sTitlen1, sTitlen2 }; - -ALIGNED(4) static const u8 sTitlen0p[] = _("titlen0p"); -ALIGNED(4) static const u8 sTitlen1p[] = _("titlen1p"); -ALIGNED(4) static const u8 sTitlen2p[] = _("titlen2p"); -/* static */ // TODO: Uncomment -ALIGNED(4) const u8* const sLoadScreenBackgroundPaletteFileNames[3] = { sTitlen0p, sTitlen1p, sTitlen2p }; - ALIGNED(4) static const u8 sSaveTextQuicksaving[] = _( "{CENTER_ALIGN}Quicksaving your adventure...\n" "{CENTER_ALIGN}Please don't turn off the power."); @@ -74,4 +32,4 @@ ALIGNED(4) static const u8 sSaveTextCantResume[] = _( ALIGNED(4) static const u8 sSaveTextMayNotResume[] = _( "{CENTER_ALIGN}You may not resume your dungeon\n" "{CENTER_ALIGN}adventure using this saved data.\n" - "{CENTER_ALIGN}Your last outing is considered a defeat."); \ No newline at end of file + "{CENTER_ALIGN}Your last outing is considered a defeat."); diff --git a/src/main_loops.c b/src/main_loops.c index f96dc9a94..9cbbb56d8 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -45,6 +45,7 @@ #include "text_2.h" #include "text_3.h" #include "text_util.h" +#include "decompress_at.h" #include "world_map.h" #include "friend_areas_map.h" #include "structs/str_dungeon_setup.h" @@ -69,11 +70,9 @@ static EWRAM_INIT PersonalityRelated sPersonalityRelated_203B040 = { .PartnerNick = {""}, }; -#include "data/main_loops.h" - static void LoadTitleScreen(void); static void NDS_LoadOverlay_GroundMain(); -static u32 sub_80009D0(u32 param_1); +static u32 RunGameMode_Async(u32 param_1); static void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId); static void sub_80011E8(DungeonSetupSubstruct *info); static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1); @@ -92,6 +91,34 @@ extern void IncrementNumAdventures(void); extern void sub_8096BD0(void); extern bool8 IsEnterWithoutGameSave(u8 dungeon); +static const unkTalkTable sBaseKindTable[17] = { + [0] = { .unk0 = 0, .species = MONSTER_PIKACHU }, + [1] = { .unk0 = 1, .species = MONSTER_MEOWTH }, + [2] = { .unk0 = 2, .species = MONSTER_EEVEE }, + [3] = { .unk0 = 3, .species = MONSTER_SKITTY }, + [4] = { .unk0 = 4, .species = MONSTER_SQUIRTLE }, + [5] = { .unk0 = 5, .species = MONSTER_TOTODILE }, + [6] = { .unk0 = 6, .species = MONSTER_MUDKIP }, + [7] = { .unk0 = 7, .species = MONSTER_PSYDUCK }, + [8] = { .unk0 = 8, .species = MONSTER_CHARMANDER }, + [9] = { .unk0 = 9, .species = MONSTER_TORCHIC }, + [10] = { .unk0 = 10, .species = MONSTER_CYNDAQUIL }, + [11] = { .unk0 = 11, .species = MONSTER_CUBONE }, + [12] = { .unk0 = 12, .species = MONSTER_MACHOP }, + [13] = { .unk0 = 13, .species = MONSTER_BULBASAUR }, + [14] = { .unk0 = 14, .species = MONSTER_CHIKORITA }, + [15] = { .unk0 = 15, .species = MONSTER_TREECKO }, + [16] = { .unk0 = 0, .species = MONSTER_NONE }, +}; + +static const unkTalkTable sTalkKindTable[5] = { + [0] = { .unk0 = 1, .species = MONSTER_SQUIRTLE }, + [1] = { .unk0 = 1, .species = MONSTER_TOTODILE }, + [2] = { .unk0 = 3, .species = MONSTER_TORCHIC }, + [3] = { .unk0 = 3, .species = MONSTER_CHIKORITA }, + [4] = { .unk0 = 2, .species = MONSTER_NONE }, +}; + // arm9.bin::0200E0A8 void GameLoop(void) { @@ -120,7 +147,7 @@ void GameLoop(void) sub_800CD64(0x8000, FALSE); sub_8012284(); InitializeGameOptions(TRUE); - SetWindowTitle(sPMDBuildVersion); + SetWindowTitle(_("PKDi ver 1.0 [Apr 28 2006] 16:37:54")); sub_800DAAC(); SetSavingIconCoords(NULL); @@ -226,21 +253,21 @@ void GameLoop(void) s32 mailIndex = GetFirstIndexofMailType(7); if (mailIndex != -1) { DeleteMailAtIndex(mailIndex); - tmp3 = sub_80009D0(2); + tmp3 = RunGameMode_Async(2); } else - tmp3 = sub_80009D0(1); + tmp3 = RunGameMode_Async(1); break; } case 4: { - tmp3 = sub_80009D0(3); + tmp3 = RunGameMode_Async(3); break; } case MENU_NEW_GAME: { sub_80122A8(); nullsub_33(); - tmp3 = sub_80009D0(0); + tmp3 = RunGameMode_Async(0); break; } } @@ -276,121 +303,43 @@ static void MainLoops_RunFrameActions(u32 unused) // Extra call here in blue. Seems to be for 2nd screen sprites } -// https://decomp.me/scratch/w6tN1 (82.93%) -// arm9.bin::0200DE18 -NAKED +typedef struct TitleMenuFile +{ + /* 0x0 */ u16 tilemap[2 * 32 * 32]; + /* 0x1000 */ u8 vramStuff[0x4B20]; +} TitleMenuFile; + static void LoadTitleScreen(void) { - asm_unified( -" push {r4-r7,lr}\n" -" mov r7, r9\n" -" mov r6, r8\n" -" push {r6,r7}\n" -" sub sp, 0x18\n" -" mov r1, sp\n" -" ldr r0, _08000708\n" -" ldm r0!, {r2-r4}\n" -" stm r1!, {r2-r4}\n" -" add r5, sp, 0xC\n" -" adds r1, r5, 0\n" -" ldr r0, _0800070C\n" -" ldm r0!, {r2-r4}\n" -" stm r1!, {r2-r4}\n" -" ldr r0, _08000710\n" -" movs r1, 0\n" -" bl MemoryAlloc\n" -" adds r7, r0, 0\n" -" movs r0, 0x3\n" -" bl RandInt\n" -" adds r4, r0, 0\n" -" lsls r4, 2\n" -" adds r5, r4\n" -" ldr r0, [r5]\n" -" ldr r5, _08000714\n" -" adds r1, r5, 0\n" -" bl OpenFileAndGetFileDataPtr\n" -" ldr r1, _08000718\n" -" str r0, [r1]\n" -" mov r1, sp\n" -" adds r0, r1, r4\n" -" ldr r0, [r0]\n" -" adds r1, r5, 0\n" -" bl OpenFileAndGetFileDataPtr\n" -" mov r8, r0\n" -" adds r0, r7, 0\n" -" movs r1, 0\n" -" mov r2, r8\n" -" bl DecompressATFile\n" -" movs r2, 0\n" -" ldr r0, _0800071C\n" -" movs r3, 0xC0\n" -" lsls r3, 5\n" -" adds r3, r0\n" -" mov r9, r3\n" -" movs r4, 0x80\n" -" lsls r4, 5\n" -" adds r4, r0\n" -" mov r12, r4\n" -"_080006A0:\n" -" movs r5, 0\n" -" lsls r1, r2, 6\n" -" adds r6, r2, 0x1\n" -" mov r0, r9\n" -" adds r4, r1, r0\n" -" mov r2, r12\n" -" adds r3, r1, r2\n" -" movs r2, 0x80\n" -" lsls r2, 4\n" -" adds r0, r7, r2\n" -" adds r2, r1, r0\n" -" adds r1, r7\n" -"_080006B8:\n" -" ldrh r0, [r1]\n" -" strh r0, [r3]\n" -" ldrh r0, [r2]\n" -" strh r0, [r4]\n" -" adds r4, 0x2\n" -" adds r3, 0x2\n" -" adds r2, 0x2\n" -" adds r1, 0x2\n" -" adds r5, 0x1\n" -" cmp r5, 0x1F\n" -" ble _080006B8\n" -" adds r2, r6, 0\n" -" cmp r2, 0x1F\n" -" ble _080006A0\n" -" movs r0, 0x2\n" -" bl sub_80098F8\n" -" movs r0, 0x3\n" -" bl sub_80098F8\n" -" ldr r0, _08000720\n" -" movs r3, 0x80\n" -" lsls r3, 5\n" -" adds r1, r7, r3\n" -" ldr r2, _08000724\n" -" bl CpuCopy\n" -" mov r0, r8\n" -" bl CloseFile\n" -" adds r0, r7, 0\n" -" bl MemoryFree\n" -" add sp, 0x18\n" -" pop {r3,r4}\n" -" mov r8, r3\n" -" mov r9, r4\n" -" pop {r4-r7}\n" -" pop {r0}\n" -" bx r0\n" -" .align 2, 0\n" -"_08000708: .4byte sLoadScreenBackgroundFileNames\n" -"_0800070C: .4byte sLoadScreenBackgroundPaletteFileNames\n" -"_08000710: .4byte 0x00005b20\n" -"_08000714: .4byte gTitleMenuFileArchive\n" -"_08000718: .4byte sTitlePaletteFile\n" -"_0800071C: .4byte gBgTilemaps\n" -"_08000720: .4byte 0x06008000\n" -"_08000724: .4byte 0x00004b20"); + const u8 * renBG[3] = {"titlen0", "titlen1", "titlen2"}; + const u8 * renPal[3] = {"titlen0p", "titlen1p", "titlen2p"}; + OpenedFile *bgFile; + s32 i, j; + TitleMenuFile *stru = MemoryAlloc(sizeof(TitleMenuFile), 0); + s32 rnd = RandInt(3); + + sTitlePaletteFile = OpenFileAndGetFileDataPtr(renPal[rnd], &gTitleMenuFileArchive); + bgFile = OpenFileAndGetFileDataPtr(renBG[rnd], &gTitleMenuFileArchive); + DecompressATFile(&stru->tilemap, 0, bgFile); + + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + u16 *ptr = stru->tilemap; + gBgTilemaps[2][i][j] = ptr[i * 32 + j]; + gBgTilemaps[3][i][j] = ptr[i * 32 + j + (32 * 32)]; + } + } + + sub_80098F8(2); + sub_80098F8(3); + + CpuCopy((u32 *)(VRAM + 0x8000), stru->vramStuff, sizeof(stru->vramStuff)); + CloseFile(bgFile); + MemoryFree(stru); } +#include "data/main_loops.h" + // arm9.bin::0200ED08 s32 sub_8000728(void) { @@ -594,8 +543,25 @@ static void sub_80008C0_Async(u32 errorKind) MainLoops_RunFrameActions(0); } +enum +{ + MODE_NEW_GAME, + MODE_CONTINUE_GAME, + MODE_GROUND, // overworld + MODE_3, + MODE_FRIEND_AREAS, + MODE_DUNGEON_FROM_WORLD_MAP, + MODE_6, + MODE_7, + MODE_8, + MODE_DUNGEON_WON, + MODE_10, + MODE_11, + MODE_DUNGEON_LOST, +}; + // arm9.bin::0200D1E0 -static u32 sub_80009D0(u32 a0) +static u32 RunGameMode_Async(u32 a0) { s32 mode = GetScriptVarValue(NULL, START_MODE); bool8 ret = FALSE; @@ -614,7 +580,7 @@ static u32 sub_80009D0(u32 a0) } } else if (mode != 0 && mode != 11) { - mode = 1; + mode = MODE_CONTINUE_GAME; } ClearScriptVarArray(NULL, EVENT_S08E01); @@ -625,7 +591,7 @@ static u32 sub_80009D0(u32 a0) DungeonSetupStruct dungeonSetup; s16 sp552; - if (mode == 4) { + if (mode == MODE_FRIEND_AREAS) { u8 mapId = sub_8002658(GetScriptVarValue(NULL,GROUND_ENTER)); friendAreasSetup.friendAreasMapPtr = MemoryAlloc(sizeof(*friendAreasSetup.friendAreasMapPtr),8); @@ -645,10 +611,10 @@ static u32 sub_80009D0(u32 a0) SetScriptVarValue(NULL,GROUND_ENTER,val); SetScriptVarValue(NULL,GROUND_ENTER_LINK,0); } - mode = 2; + mode = MODE_GROUND; continue; } - else if (mode == 5) { + else if (mode == MODE_DUNGEON_FROM_WORLD_MAP) { s32 i; s32 dungId = (s16) GetScriptVarValue(NULL, DUNGEON_SELECT); @@ -686,7 +652,7 @@ static u32 sub_80009D0(u32 a0) ShowWorldMap_Async(&worldMapSetup); MemoryFree(worldMapSetup.worldMap); if (!worldMapSetup.dungeonEntered) { - mode = 2; + mode = MODE_GROUND; continue; } SetScriptVarValue(NULL, DUNGEON_ENTER, dungId); @@ -704,7 +670,7 @@ static u32 sub_80009D0(u32 a0) if (mode == 11) { RemoveAllMoneyAndItems(); } - else if (mode == 12) { + else if (mode == MODE_DUNGEON_LOST) { RemoveMoneyAndRandomItems(); } sUnknown_203B03C = 2; @@ -714,11 +680,11 @@ static u32 sub_80009D0(u32 a0) break; } else if (r5 == 5) { - mode = 4; + mode = MODE_FRIEND_AREAS; continue; } else if (r5 == 6) { - mode = 5; + mode = MODE_DUNGEON_FROM_WORLD_MAP; continue; } } @@ -730,13 +696,13 @@ static u32 sub_80009D0(u32 a0) if (r5 == 7) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - mode = 9; + mode = MODE_DUNGEON_WON; } } else if (r5 == 8) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - mode = 9; + mode = MODE_DUNGEON_WON; } else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.mon)) { dungeonSetup.info.sub0.unkC = 1; @@ -745,13 +711,13 @@ static u32 sub_80009D0(u32 a0) else if (r5 == 10) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 13; - mode = 9; + mode = MODE_DUNGEON_WON; } } else if (r5 == 9) { if (!sub_80991E0(&dungeonSetup.info, &sp552)) { r5 = 11; - mode = 12; + mode = MODE_DUNGEON_LOST; } } else if (r5 == 0) { @@ -877,12 +843,12 @@ static u32 sub_80009D0(u32 a0) break; } - ClearScriptVarArray(NULL, 0x41); + ClearScriptVarArray(NULL, EVENT_S08E01); switch (dungeonSetup.info.unk7C) { case 1: case 4: mode = 9; - SetScriptVarArrayValue(NULL, 0x41, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); + SetScriptVarArrayValue(NULL, EVENT_S08E01, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); break; case 2: mode = 10; @@ -910,7 +876,7 @@ static u32 sub_80009D0(u32 a0) // More documentation needed to be sure // It'd also be cool to see what happens if a quicksave load fails and the dungeon is skipped entirely // arm9.bin::0200D01C -static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) +static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *setupStr) { u8 quickSaveValid; s32 quickSaveStatus; @@ -924,11 +890,11 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) sub_8014144(); sub_8043D50(&local_1c, &dungeonStructSize); - param_1->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800 - param_1->info.dungeon = MemoryAlloc(dungeonStructSize, 7); // size: sizeof(Dungeon) + setupStr->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800 + setupStr->info.dungeon = MemoryAlloc(dungeonStructSize, 7); // size: sizeof(Dungeon) - if (param_1->info.sub0.unk4) { - PrepareQuickSaveRead(param_1->info.unk74, local_1c); + if (setupStr->info.sub0.unk4) { + PrepareQuickSaveRead(setupStr->info.unk74, local_1c); while (TRUE) { if (!ReadQuickSave()) @@ -954,32 +920,32 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) } if (quickSaveValid) { - LoadAndRunDungeon_Async(param_1); + LoadAndRunDungeon_Async(setupStr); sub_8099648(); SetWindowBGColor(); sub_8099690(0); } else - param_1->info.unk7C = 5; + setupStr->info.unk7C = 5; - if (param_1->info.unk7C == -2) - sub_809542C(¶m_1->info.unk84); + if (setupStr->info.unk7C == -2) + sub_809542C(&setupStr->info.unk84); - if (param_1->info.unk7C == 3 || param_1->info.unk7C == -2) { - SetDungeonLocationInfo(¶m_1->info.unk80); + if (setupStr->info.unk7C == 3 || setupStr->info.unk7C == -2) { + SetDungeonLocationInfo(&setupStr->info.unk80); xxx_call_stop_bgm(); - if (param_1->info.unk7C == -2) - PrepareQuickSaveWrite(param_1->info.unk74, local_1c, 1); + if (setupStr->info.unk7C == -2) + PrepareQuickSaveWrite(setupStr->info.unk74, local_1c, 1); else - PrepareQuickSaveWrite(param_1->info.unk74, local_1c, 0); + PrepareQuickSaveWrite(setupStr->info.unk74, local_1c, 0); while ((quickSaveStatus = WriteQuickSave(), (quickSaveStatus != 2))) { if (quickSaveStatus == 3) break; if (quickSaveStatus == 1) { - MemoryFree(param_1->info.dungeon); - MemoryFree(param_1->info.unk74); + MemoryFree(setupStr->info.dungeon); + MemoryFree(setupStr->info.unk74); } MainLoops_RunFrameActions(0); @@ -988,8 +954,8 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1) } else { sub_808ED00(); - MemoryFree(param_1->info.dungeon); - MemoryFree(param_1->info.unk74); + MemoryFree(setupStr->info.dungeon); + MemoryFree(setupStr->info.unk74); } } From 5914c8522c17bedbd4f7cd87fdcf64ae9db5f860 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 2 Jun 2025 11:34:14 +0200 Subject: [PATCH 8/8] main loops some documentation --- include/world_map.h | 4 +++- src/main_loops.c | 48 ++++++++++++++++++++++----------------------- src/world_map.c | 4 ++-- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/include/world_map.h b/include/world_map.h index 30dbda41f..a8c44c7da 100644 --- a/include/world_map.h +++ b/include/world_map.h @@ -33,13 +33,15 @@ struct WorldMap u8 unk5E98[1500]; }; +#define WORLD_MAP_UNK_6D_COUNT 63 + struct WorldMapInfo { DungeonLocation startLocation; DungeonSetupSubstruct unk4; PokemonStruct1 mon; u8 unk6C; - u8 unk6D[63]; + u8 unk6D[WORLD_MAP_UNK_6D_COUNT]; }; struct WorldMapSetupStruct diff --git a/src/main_loops.c b/src/main_loops.c index 9cbbb56d8..ee5d8a571 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -552,7 +552,7 @@ enum MODE_FRIEND_AREAS, MODE_DUNGEON_FROM_WORLD_MAP, MODE_6, - MODE_7, + MODE_CONTINUE_QUICKSAVE, MODE_8, MODE_DUNGEON_WON, MODE_10, @@ -568,18 +568,18 @@ static u32 RunGameMode_Async(u32 a0) sub_801180C(); FadeOutAllMusic(0x10); - if (mode == 7) { + if (mode == MODE_CONTINUE_QUICKSAVE) { if (a0 == 2) { - mode = 8; + mode = MODE_8; } else if (a0 == 3) { - mode = 11; + mode = MODE_11; SetScriptVarValue(NULL, START_MODE, 11); sub_8096BD0(); QuickSave_Async(3); } } - else if (mode != 0 && mode != 11) { + else if (mode != MODE_NEW_GAME && mode != MODE_11) { mode = MODE_CONTINUE_GAME; } @@ -619,12 +619,12 @@ static u32 RunGameMode_Async(u32 a0) s32 dungId = (s16) GetScriptVarValue(NULL, DUNGEON_SELECT); u8 r6 = sub_80A2740(dungId); - for (i = 0; i < 63; i++) { + for (i = 0; i < WORLD_MAP_UNK_6D_COUNT; i++) { worldMapSetup.info.unk6D[i] = sub_80A28F0(i); } if (r6 == 99) { - mode = 2; + mode = MODE_GROUND; continue; } @@ -660,14 +660,14 @@ static u32 RunGameMode_Async(u32 a0) sub_800A8F8(4); r5 = xxx_script_related_8001334(5); } - else if (mode == 8) { + else if (mode == MODE_8) { r5 = 0; } - else if (mode == 7) { + else if (mode == MODE_CONTINUE_QUICKSAVE) { r5 = 2; } else { - if (mode == 11) { + if (mode == MODE_11) { RemoveAllMoneyAndItems(); } else if (mode == MODE_DUNGEON_LOST) { @@ -738,12 +738,12 @@ static u32 RunGameMode_Async(u32 a0) } else if (var == 0xF1208) { r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); } else { r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); } @@ -762,12 +762,12 @@ static u32 RunGameMode_Async(u32 a0) } else if (var == 0xF1208) { r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); } else { r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); } } @@ -778,16 +778,16 @@ static u32 RunGameMode_Async(u32 a0) if (r5 == 3) { u8 r4 = sub_8001170(); r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); if (r4 != 63 && r4 != 99 && IsEnterWithoutGameSave(r4)) { if (sub_8011C1C() == 2) { r5 = 3; - mode = 7; + mode = MODE_CONTINUE_QUICKSAVE; } else { r5 = 12; - mode = 10; + mode = MODE_10; } } @@ -797,12 +797,12 @@ static u32 RunGameMode_Async(u32 a0) } else if (r5 == 4) { r5 = 1; - mode = 11; + mode = MODE_11; sub_8096BD0(); sub_80008C0_Async(1); } else if (r5 == 1) { - mode = 11; + mode = MODE_11; sub_8096BD0(); } } @@ -847,22 +847,22 @@ static u32 RunGameMode_Async(u32 a0) switch (dungeonSetup.info.unk7C) { case 1: case 4: - mode = 9; + mode = MODE_DUNGEON_WON; SetScriptVarArrayValue(NULL, EVENT_S08E01, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); break; case 2: - mode = 10; + mode = MODE_10; break; case -1: - mode = 12; + mode = MODE_DUNGEON_LOST; sub_8096BD0(); break; case 5: - mode = 11; + mode = MODE_11; sub_8096BD0(); break; default: - mode = 11; + mode = MODE_11; sub_8096BD0(); break; } diff --git a/src/world_map.c b/src/world_map.c index 7ef959c18..760a5c37f 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -238,7 +238,7 @@ static void sub_8010494(struct WorldMapInfo *info) struct UnkStruct_Sub1 *structPtr = &sWorldMapPtr->unk0[i]; u8 r0; - if (i < 63) { + if (i < WORLD_MAP_UNK_6D_COUNT) { r0 = info->unk6D[i]; } else { @@ -247,7 +247,7 @@ static void sub_8010494(struct WorldMapInfo *info) if (r0) { structPtr->unk0 = 1; - AxResInitFile(&structPtr->unk8, sWorldMapPtr->unk1100[2], (i == 63) ? 12 : 1, 0, 0x40, 0, 1); + AxResInitFile(&structPtr->unk8, sWorldMapPtr->unk1100[2], (i == WORLD_MAP_UNK_6D_COUNT) ? 12 : 1, 0, 0x40, 0, 1); structPtr->unk4 = gDungeonCoordinates[i]; } else {