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..a35c02dbc 100644 --- a/include/friend_areas_map.h +++ b/include/friend_areas_map.h @@ -93,16 +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/ground_main.h b/include/ground_main.h index 2f9a8e140..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; - WonderMailSub 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_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 deleted file mode 100644 index 43846b3cc..000000000 --- a/include/structs/str_dungeon_8042F6C.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GUARD_STR_DUNGEON_8042F6C_H -#define GUARD_STR_DUNGEON_8042F6C_H - -#include "structs/str_dungeon.h" -#include "structs/str_dungeon_location.h" -#include "structs/str_pokemon.h" -#include "structs/str_wonder_mail.h" - -typedef struct UnkStruct_RunDungeon -{ - u8 unk0; - DungeonLocation unk4; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; - u8 unkF; - u8 unk10; - u8 unk11; - unkStruct_Dungeon64C unk14; - 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; -} 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_dungeon_setup.h b/include/structs/str_dungeon_setup.h new file mode 100644 index 000000000..bdba5a548 --- /dev/null +++ b/include/structs/str_dungeon_setup.h @@ -0,0 +1,46 @@ +#ifndef GUARD_STR_DUNGEON_SETUP_H +#define GUARD_STR_DUNGEON_SETUP_H + +#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" + +// Apparently used in Dungeon and World Map SetUp Structs +typedef struct DungeonSetupSubstruct +{ + DungeonLocation unk0; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; +} DungeonSetupSubstruct; + +typedef struct DungeonSetupInfo +{ + DungeonSetupSubstruct sub0; // TODO: find a better name + DungeonMailSeed dungeonSeed; + PokemonStruct1 mon; + u8 *unk74; + Dungeon *dungeon; + s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed) + u8 unk7E; + DungeonLocation unk80; + DungeonMailSeed unk84; +} DungeonSetupInfo; + +typedef struct DungeonSetupStruct +{ + s32 unk0; + DungeonSetupInfo info; + u8 fill8C[44]; +} DungeonSetupStruct; + +#endif // GUARD_STR_DUNGEON_SETUP_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..a8c44c7da 100644 --- a/include/world_map.h +++ b/include/world_map.h @@ -7,6 +7,8 @@ #include "structs/axdata.h" #include "structs/str_position.h" #include "structs/str_dungeon.h" +#include "structs/str_pokemon.h" +#include "structs/str_dungeon_setup.h" struct UnkStruct_Sub1 { @@ -31,27 +33,25 @@ struct WorldMap u8 unk5E98[1500]; }; -struct UnkStruct_sub_8010494 +#define WORLD_MAP_UNK_6D_COUNT 63 + +struct WorldMapInfo { - DungeonLocation unk0; - DungeonLocation unk4; - u8 pad1[8]; - u8 unk10; - u8 pad2[0xA]; - s16 unk1C; - u8 pad3[0x6E - 0x20]; + DungeonLocation startLocation; + DungeonSetupSubstruct unk4; + PokemonStruct1 mon; u8 unk6C; - u8 unk6D[63]; + u8 unk6D[WORLD_MAP_UNK_6D_COUNT]; }; -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/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/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/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_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/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..d1c32f282 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}; @@ -54,7 +55,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; @@ -755,10 +756,10 @@ 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; + iVar1->sub0.unkB = 0; if ((u16)(iVar2 - 0x25) < 3) flag = TRUE; @@ -769,26 +770,25 @@ 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]; u8 nameBuffer [24]; - u8 r5; u8 dungeonIndex; iVar1 = GetDungeonInfo_80A2608(param_2); dungeonIndex = iVar1->dungeonIndex; - r5 = 0; - param_1->unk0 = dungeonIndex; - param_1->unk1 = 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); { @@ -807,27 +807,27 @@ u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2) .currExp = 25000, }; - sub_808D144(¶m_1->unk18, &stack); + sub_808D144(¶m_1->mon, &stack); } } 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; } -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 +835,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 +843,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,9 +860,9 @@ 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); - gUnknown_20398C8.unkB = 1; - gUnknown_20398C8.unkC = 0; - gUnknown_20398C8.unk4 = 0; - gUnknown_20398C8.unkD = 0; + sub_8095494(&gUnknown_20398C8.dungeonSeed,param_1); + 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 e7a303f0a..8b60f13fd 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.sub0.unk0.id, 0, gUnknown_203B4B0, val, 0); gUnknown_2039DA4 = res; switch (res) { case 2: { @@ -1081,7 +1082,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..ee5d8a571 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" @@ -45,6 +45,11 @@ #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" +#include "constants/friend_area.h" typedef struct unkTalkTable { @@ -65,19 +70,54 @@ 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 */ // TODO: Uncomment -void sub_80011E8(u8 *param_1); -static void LoadAndRunDungeon_Async(UnkStruct_RunDungeon *r0); -/* static */ // TODO: Uncomment -u32 xxx_script_related_8001334(u32 r0); +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); +static u8 sub_8001170(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); +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); + +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) @@ -107,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); @@ -213,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; } } @@ -263,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) { @@ -385,8 +347,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; @@ -483,7 +444,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; } @@ -499,8 +460,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; @@ -583,659 +543,358 @@ 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) +enum { - 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"); + MODE_NEW_GAME, + MODE_CONTINUE_GAME, + MODE_GROUND, // overworld + MODE_3, + MODE_FRIEND_AREAS, + MODE_DUNGEON_FROM_WORLD_MAP, + MODE_6, + MODE_CONTINUE_QUICKSAVE, + MODE_8, + MODE_DUNGEON_WON, + MODE_10, + MODE_11, + MODE_DUNGEON_LOST, +}; + +// arm9.bin::0200D1E0 +static u32 RunGameMode_Async(u32 a0) +{ + s32 mode = GetScriptVarValue(NULL, START_MODE); + bool8 ret = FALSE; + + sub_801180C(); + FadeOutAllMusic(0x10); + if (mode == MODE_CONTINUE_QUICKSAVE) { + if (a0 == 2) { + mode = MODE_8; + } + else if (a0 == 3) { + mode = MODE_11; + SetScriptVarValue(NULL, START_MODE, 11); + sub_8096BD0(); + QuickSave_Async(3); + } + } + else if (mode != MODE_NEW_GAME && mode != MODE_11) { + mode = MODE_CONTINUE_GAME; + } + + ClearScriptVarArray(NULL, EVENT_S08E01); + while (1) { + s32 r5; + struct FriendAreasMapSetupStruct friendAreasSetup; + struct WorldMapSetupStruct worldMapSetup; + DungeonSetupStruct dungeonSetup; + s16 sp552; + + if (mode == MODE_FRIEND_AREAS) { + u8 mapId = sub_8002658(GetScriptVarValue(NULL,GROUND_ENTER)); + + friendAreasSetup.friendAreasMapPtr = MemoryAlloc(sizeof(*friendAreasSetup.friendAreasMapPtr),8); + friendAreasSetup.startingFriendAreaId = mapId; + friendAreasSetup.unk5 = sub_80023E4(9); + ShowFriendAreasMap_Async(&friendAreasSetup); + MemoryFree(friendAreasSetup.friendAreasMapPtr); + if (friendAreasSetup.chosenAreaId != NUM_FRIEND_AREAS) { + s32 val; + u32 areaId = friendAreasSetup.chosenAreaId; + if (areaId != FRIEND_AREA_NONE) { + val = sub_8002694(areaId); + } + else { + val = 9; + } + SetScriptVarValue(NULL,GROUND_ENTER,val); + SetScriptVarValue(NULL,GROUND_ENTER_LINK,0); + } + mode = MODE_GROUND; + continue; + } + else if (mode == MODE_DUNGEON_FROM_WORLD_MAP) { + s32 i; + + s32 dungId = (s16) GetScriptVarValue(NULL, DUNGEON_SELECT); + u8 r6 = sub_80A2740(dungId); + for (i = 0; i < WORLD_MAP_UNK_6D_COUNT; i++) { + worldMapSetup.info.unk6D[i] = sub_80A28F0(i); + } + + if (r6 == 99) { + mode = MODE_GROUND; + continue; + } + + 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, dungId)) { + worldMapSetup.info.unk4.unkC = dungeonSetup.info.sub0.unkC; + worldMapSetup.info.mon = dungeonSetup.info.mon; + } + break; + case 2: + if (sub_8096A08(worldMapSetup.info.unk4.unk0.id, &worldMapSetup.info.mon)) { + worldMapSetup.info.unk4.unkC = 1; + } + else { + worldMapSetup.info.unk4.unkC = 0; + } + break; + } + + worldMapSetup.worldMap = MemoryAlloc(sizeof(*worldMapSetup.worldMap), 8); + ShowWorldMap_Async(&worldMapSetup); + MemoryFree(worldMapSetup.worldMap); + if (!worldMapSetup.dungeonEntered) { + mode = MODE_GROUND; + continue; + } + SetScriptVarValue(NULL, DUNGEON_ENTER, dungId); + sUnknown_203B03C = 2; + sub_800A8F8(4); + r5 = xxx_script_related_8001334(5); + } + else if (mode == MODE_8) { + r5 = 0; + } + else if (mode == MODE_CONTINUE_QUICKSAVE) { + r5 = 2; + } + else { + if (mode == MODE_11) { + RemoveAllMoneyAndItems(); + } + else if (mode == MODE_DUNGEON_LOST) { + RemoveMoneyAndRandomItems(); + } + sUnknown_203B03C = 2; + sub_800A8F8(4); + r5 = xxx_script_related_8001334(mode); + if (r5 == 14) { + break; + } + else if (r5 == 5) { + mode = MODE_FRIEND_AREAS; + continue; + } + else if (r5 == 6) { + mode = MODE_DUNGEON_FROM_WORLD_MAP; + continue; + } + } + + dungeonSetup.info.sub0.unkD = 0; + dungeonSetup.info.sub0.unkC = 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; + mode = MODE_DUNGEON_WON; + } + } + else if (r5 == 8) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 13; + mode = MODE_DUNGEON_WON; + } + 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; + mode = MODE_DUNGEON_WON; + } + } + else if (r5 == 9) { + if (!sub_80991E0(&dungeonSetup.info, &sp552)) { + r5 = 11; + mode = MODE_DUNGEON_LOST; + } + } + 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.mon = 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; + mode = MODE_11; + sub_8096BD0(); + } + else { + r5 = 1; + mode = MODE_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; + mode = MODE_11; + sub_8096BD0(); + } + else { + r5 = 1; + mode = MODE_11; + sub_8096BD0(); + } + } + else { + r5 = 3; + } + + if (r5 == 3) { + u8 r4 = sub_8001170(); + r5 = 1; + mode = MODE_11; + sub_8096BD0(); + if (r4 != 63 && r4 != 99 && IsEnterWithoutGameSave(r4)) { + if (sub_8011C1C() == 2) { + r5 = 3; + mode = MODE_CONTINUE_QUICKSAVE; + } + else { + r5 = 12; + mode = MODE_10; + } + } + + if (r5 == 1) { + sub_8011C1C(); + } + } + else if (r5 == 4) { + r5 = 1; + mode = MODE_11; + sub_8096BD0(); + sub_80008C0_Async(1); + } + else if (r5 == 1) { + mode = MODE_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, EVENT_S08E01); + switch (dungeonSetup.info.unk7C) { + case 1: + case 4: + mode = MODE_DUNGEON_WON; + SetScriptVarArrayValue(NULL, EVENT_S08E01, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1); + break; + case 2: + mode = MODE_10; + break; + case -1: + mode = MODE_DUNGEON_LOST; + sub_8096BD0(); + break; + case 5: + mode = MODE_11; + sub_8096BD0(); + break; + default: + mode = MODE_11; + sub_8096BD0(); + break; + } + } + } + + return ret; } // This func is probably used for running the dungeon in general (and updating RNG mechanics), not just quicksave. // 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(UnkStruct_RunDungeon *param_1) +static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *setupStr) { 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->unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800 - param_1->unk78 = MemoryAlloc(local_18, 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->unk8) { - PrepareQuickSaveRead(param_1->unk74, local_1c); + if (setupStr->info.sub0.unk4) { + PrepareQuickSaveRead(setupStr->info.unk74, local_1c); while (TRUE) { if (!ReadQuickSave()) @@ -1261,32 +920,32 @@ void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1) } if (quickSaveValid) { - LoadAndRunDungeon_Async(param_1); + LoadAndRunDungeon_Async(setupStr); sub_8099648(); SetWindowBGColor(); sub_8099690(0); } else - param_1->unk7C = 5; + setupStr->info.unk7C = 5; - if (param_1->unk7C == -2) - sub_809542C(¶m_1->unk84); + if (setupStr->info.unk7C == -2) + sub_809542C(&setupStr->info.unk84); - if (param_1->unk7C == 3 || param_1->unk7C == -2) { - SetDungeonLocationInfo(¶m_1->unk80); + if (setupStr->info.unk7C == 3 || setupStr->info.unk7C == -2) { + SetDungeonLocationInfo(&setupStr->info.unk80); xxx_call_stop_bgm(); - if (param_1->unk7C == -2) - PrepareQuickSaveWrite(param_1->unk74, local_1c, 1); + if (setupStr->info.unk7C == -2) + PrepareQuickSaveWrite(setupStr->info.unk74, local_1c, 1); else - PrepareQuickSaveWrite(param_1->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->unk78); - MemoryFree(param_1->unk74); + MemoryFree(setupStr->info.dungeon); + MemoryFree(setupStr->info.unk74); } MainLoops_RunFrameActions(0); @@ -1295,8 +954,8 @@ void LoadAndRunQuickSaveDungeon_Async(UnkStruct_RunDungeon *param_1) } else { sub_808ED00(); - MemoryFree(param_1->unk78); - MemoryFree(param_1->unk74); + MemoryFree(setupStr->info.dungeon); + MemoryFree(setupStr->info.unk74); } } @@ -1357,8 +1016,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; @@ -1374,53 +1032,48 @@ u8 sub_8001170(void) } // arm9.bin::0200CDA4 -/* static */ // TODO: Uncomment -void sub_80011CC(u8 *param_1, u8 param_2) +static 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) +static 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 -/* static */ // TODO: Uncomment -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; } @@ -1429,19 +1082,18 @@ void sub_8001248(void) } // arm9.bin::0200CB88 -/* static */ // TODO: Uncomment -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; } @@ -1456,24 +1108,23 @@ 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? } // 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); } // arm9.bin::0200CA1C -static void LoadAndRunDungeon_Async(UnkStruct_RunDungeon *r0) +static void LoadAndRunDungeon_Async(DungeonSetupStruct *setupPtr) { - nullsub_2(r0); - RunDungeon_Async(r0); + nullsub_2(setupPtr); + RunDungeon_Async(setupPtr); NDS_LoadOverlay_GroundMain(); } @@ -1483,4 +1134,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..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(UnkStruct_RunDungeon *r8) +void RunDungeon_Async(DungeonSetupStruct *setupPtr) { bool8 check; Entity *leader; @@ -154,11 +154,11 @@ void RunDungeon_Async(UnkStruct_RunDungeon *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(UnkStruct_RunDungeon *r8) gPlayerDotMapPosition.x = 100; if (!r6) { - gDungeon->unk644.unk34 = r8->unkF; - gDungeon->unk644.unk8 = r8->unk14; - 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(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 = 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(UnkStruct_RunDungeon *r8) } if (!r6) { if (gDungeon->unk644.unk34 == 1) { - gDungeon->unk644.unk38 = r8->unk14.unk4; + gDungeon->unk644.unk38 = setupPtr->info.dungeonSeed.seed; } else { gDungeon->unk644.unk38 = Rand32Bit() & 0xFFFFFF; @@ -253,11 +253,11 @@ void RunDungeon_Async(UnkStruct_RunDungeon *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(UnkStruct_RunDungeon *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(UnkStruct_RunDungeon *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(UnkStruct_RunDungeon *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.dungeon = 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(UnkStruct_RunDungeon *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 { @@ -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..760a5c37f 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.id); - PrintDungeonName(&r5->unk4.unk4); + 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.unk10) { - speciesId = r5->unk4.unk1C; + if (setupPtr->info.unk4.unkC) { + speciesId = setupPtr->info.mon.speciesNum; ASM_MATCH_TRICK(speciesId); } else { speciesId = 0; } - var = sub_809034C(r5->unk4.unk4.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,15 +231,15 @@ 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++) { struct UnkStruct_Sub1 *structPtr = &sWorldMapPtr->unk0[i]; u8 r0; - if (i < 63) { - r0 = r9->unk6D[i]; + if (i < WORLD_MAP_UNK_6D_COUNT) { + r0 = info->unk6D[i]; } else { r0 = 1; @@ -247,7 +247,7 @@ static void sub_8010494(struct UnkStruct_sub_8010494 *r9) 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 { @@ -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();