document around main loops

This commit is contained in:
DizzyEggg
2025-05-29 23:48:48 +02:00
parent 9cb273a0a9
commit a8ece36780
8 changed files with 174 additions and 173 deletions

View File

@@ -93,17 +93,17 @@ struct FriendAreasMap
extern struct FriendAreasMap *gFriendAreasMapPtr;
struct struct_unk800F990
struct FriendAreasMapSetupStruct
{
u32 unk0;
u8 startingFriendAreaId;
u8 unk5;
struct FriendAreasMap *friendAreasMapPtr;
u8 unkC;
u8 chosenAreaId;
u8 fillD[168];
};
void ShowFriendAreasMap_Async(struct struct_unk800F990 *param_1);
void ShowFriendAreasMap_Async(struct FriendAreasMapSetupStruct *setupPtr);
void PrintFriendAreaNameInMap(u8 *strBuffer, u8 index);
bool8 IsFriendAreaShownOnMap(u8 friendAreaId);

View File

@@ -27,9 +27,9 @@ typedef struct DungeonSetupInfo
{
DungeonSetupSubstruct sub0; // TODO: find a better name
DungeonMailSeed dungeonSeed;
PokemonStruct1 unk18;
PokemonStruct1 mon;
u8 *unk74;
Dungeon *unk78;
Dungeon *dungeon;
s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed)
u8 unk7E;
DungeonLocation unk80;

View File

@@ -33,23 +33,23 @@ struct WorldMap
u8 unk5E98[1500];
};
struct UnkStruct_sub_8010494
struct WorldMapInfo
{
DungeonLocation unk0;
DungeonLocation startLocation;
DungeonSetupSubstruct unk4;
PokemonStruct1 mon;
u8 unk6C;
u8 unk6D[63];
};
struct UnkStruct_sub_8010268
struct WorldMapSetupStruct
{
u8 fill0[4];
struct UnkStruct_sub_8010494 unk4;
struct WorldMap *unkB0;
u8 unkB4;
struct WorldMapInfo info;
struct WorldMap *worldMap;
bool8 dungeonEntered; // Some dungeons have specific requirements, where it's not always possible to enter chosen dungeon.
};
void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5);
void ShowWorldMap_Async(struct WorldMapSetupStruct *setupPtr);
#endif

View File

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

View File

@@ -807,7 +807,7 @@ u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2)
.currExp = 25000,
};
sub_808D144(&param_1->unk18, &stack);
sub_808D144(&param_1->mon, &stack);
}
}
break;

View File

@@ -48,6 +48,7 @@
#include "world_map.h"
#include "friend_areas_map.h"
#include "structs/str_dungeon_setup.h"
#include "constants/friend_area.h"
typedef struct unkTalkTable
{
@@ -77,8 +78,8 @@ static void sub_80011CC(DungeonSetupSubstruct *info, u8 dungId);
static void sub_80011E8(DungeonSetupSubstruct *info);
static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1);
static u8 sub_8001170(void);
static void sub_8001248(void);
static void sub_80012C0(void);
static void RemoveMoneyAndRandomItems(void);
static void RemoveAllMoneyAndItems(void);
static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0);
static u32 xxx_script_related_8001334(u32 r0);
static void MainLoops_RunFrameActions(u32 unused);
@@ -594,163 +595,163 @@ static void sub_80008C0_Async(u32 errorKind)
}
// arm9.bin::0200D1E0
u32 sub_80009D0(u32 a0)
static u32 sub_80009D0(u32 a0)
{
s32 r7 = GetScriptVarValue(NULL, 0x18);
s32 mode = GetScriptVarValue(NULL, START_MODE);
bool8 ret = FALSE;
sub_801180C();
FadeOutAllMusic(0x10);
if (r7 == 7) {
if (mode == 7) {
if (a0 == 2) {
r7 = 8;
mode = 8;
}
else if (a0 == 3) {
r7 = 11;
SetScriptVarValue(NULL, 0x18, 0xB);
mode = 11;
SetScriptVarValue(NULL, START_MODE, 11);
sub_8096BD0();
QuickSave_Async(3);
}
}
else if (r7 != 0 && r7 != 11) {
r7 = 1;
else if (mode != 0 && mode != 11) {
mode = 1;
}
ClearScriptVarArray(NULL, 0x41);
ClearScriptVarArray(NULL, EVENT_S08E01);
while (1) {
s32 r5;
struct struct_unk800F990 friendAreasSetup;
struct UnkStruct_sub_8010268 worldMapSetup;
struct FriendAreasMapSetupStruct friendAreasSetup;
struct WorldMapSetupStruct worldMapSetup;
DungeonSetupStruct dungeonSetup;
s16 sp552;
if (r7 == 4) {
u8 mapId = sub_8002658(GetScriptVarValue(NULL,0xd));
if (mode == 4) {
u8 mapId = sub_8002658(GetScriptVarValue(NULL,GROUND_ENTER));
friendAreasSetup.friendAreasMapPtr = MemoryAlloc(0x4e30,8);
friendAreasSetup.friendAreasMapPtr = MemoryAlloc(sizeof(*friendAreasSetup.friendAreasMapPtr),8);
friendAreasSetup.startingFriendAreaId = mapId;
friendAreasSetup.unk5 = sub_80023E4(9);
ShowFriendAreasMap_Async(&friendAreasSetup);
MemoryFree(friendAreasSetup.friendAreasMapPtr);
if (friendAreasSetup.unkC != 0x3A) {
if (friendAreasSetup.chosenAreaId != NUM_FRIEND_AREAS) {
s32 val;
u8 a = friendAreasSetup.unkC;
if (a != 0) {
val = sub_8002694(a);
u32 areaId = friendAreasSetup.chosenAreaId;
if (areaId != FRIEND_AREA_NONE) {
val = sub_8002694(areaId);
}
else {
val = 9;
}
SetScriptVarValue(NULL,0xd,val);
SetScriptVarValue(NULL,0xe,0);
SetScriptVarValue(NULL,GROUND_ENTER,val);
SetScriptVarValue(NULL,GROUND_ENTER_LINK,0);
}
r7 = 2;
mode = 2;
continue;
}
else if (r7 == 5) {
else if (mode == 5) {
s32 i;
s32 r8 = (s16) GetScriptVarValue(NULL, 0x12);
u8 r6 = sub_80A2740(r8);
s32 dungId = (s16) GetScriptVarValue(NULL, DUNGEON_SELECT);
u8 r6 = sub_80A2740(dungId);
for (i = 0; i < 63; i++) {
worldMapSetup.unk4.unk6D[i] = sub_80A28F0(i);
worldMapSetup.info.unk6D[i] = sub_80A28F0(i);
}
if (r6 == 99) {
r7 = 2;
mode = 2;
continue;
}
worldMapSetup.unk4.unk0.id = DUNGEON_OUT_ON_RESCUE;
sub_80011CC(&worldMapSetup.unk4.unk4, r6);
worldMapSetup.unk4.unk6C = worldMapSetup.unk4.unk4.unk5;
switch ((s16) sub_80A2750(r8)) {
worldMapSetup.info.startLocation.id = DUNGEON_OUT_ON_RESCUE;
sub_80011CC(&worldMapSetup.info.unk4, r6);
worldMapSetup.info.unk6C = worldMapSetup.info.unk4.unk5;
switch ((s16) sub_80A2750(dungId)) {
case 1:
if (sub_80990EC(&dungeonSetup.info, r8)) {
worldMapSetup.unk4.unk4.unkC = dungeonSetup.info.sub0.unkC;
worldMapSetup.unk4.mon = dungeonSetup.info.unk18;
if (sub_80990EC(&dungeonSetup.info, dungId)) {
worldMapSetup.info.unk4.unkC = dungeonSetup.info.sub0.unkC;
worldMapSetup.info.mon = dungeonSetup.info.mon;
}
break;
case 2:
if (sub_8096A08(worldMapSetup.unk4.unk4.unk0.id, &worldMapSetup.unk4.mon)) {
worldMapSetup.unk4.unk4.unkC = 1;
if (sub_8096A08(worldMapSetup.info.unk4.unk0.id, &worldMapSetup.info.mon)) {
worldMapSetup.info.unk4.unkC = 1;
}
else {
worldMapSetup.unk4.unk4.unkC = 0;
worldMapSetup.info.unk4.unkC = 0;
}
break;
}
worldMapSetup.unkB0 = MemoryAlloc(sizeof(*worldMapSetup.unkB0), 8);
worldMapSetup.worldMap = MemoryAlloc(sizeof(*worldMapSetup.worldMap), 8);
ShowWorldMap_Async(&worldMapSetup);
MemoryFree(worldMapSetup.unkB0);
if (worldMapSetup.unkB4 == 0) {
r7 = 2;
MemoryFree(worldMapSetup.worldMap);
if (!worldMapSetup.dungeonEntered) {
mode = 2;
continue;
}
SetScriptVarValue(NULL, 0x13, r8);
SetScriptVarValue(NULL, DUNGEON_ENTER, dungId);
sUnknown_203B03C = 2;
sub_800A8F8(4);
r5 = xxx_script_related_8001334(5);
}
else if (r7 == 8) {
else if (mode == 8) {
r5 = 0;
}
else if (r7 == 7) {
else if (mode == 7) {
r5 = 2;
}
else {
if (r7 == 11) {
sub_80012C0();
if (mode == 11) {
RemoveAllMoneyAndItems();
}
else if (r7 == 12) {
sub_8001248();
else if (mode == 12) {
RemoveMoneyAndRandomItems();
}
sUnknown_203B03C = 2;
sub_800A8F8(4);
r5 = xxx_script_related_8001334(r7);
r5 = xxx_script_related_8001334(mode);
if (r5 == 14) {
break;
}
else if (r5 == 5) {
r7 = 4;
mode = 4;
continue;
}
else if (r5 == 6) {
r7 = 5;
mode = 5;
continue;
}
}
dungeonSetup.info.sub0.unkD = 0;
dungeonSetup.info.sub0.unkC = 0;
MemoryFill8(&dungeonSetup.info.unk18, 0, sizeof(dungeonSetup.info.unk18));
dungeonSetup.info.unk18.speciesNum = 0;
MemoryFill8(&dungeonSetup.info.mon, 0, sizeof(dungeonSetup.info.mon));
dungeonSetup.info.mon.speciesNum = 0;
if (r5 == 7) {
if (!sub_80991E0(&dungeonSetup.info, &sp552)) {
r5 = 13;
r7 = 9;
mode = 9;
}
}
else if (r5 == 8) {
if (!sub_80991E0(&dungeonSetup.info, &sp552)) {
r5 = 13;
r7 = 9;
mode = 9;
}
else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.unk18)) {
else if (sub_8096A08(dungeonSetup.info.sub0.unk0.id, &dungeonSetup.info.mon)) {
dungeonSetup.info.sub0.unkC = 1;
}
}
else if (r5 == 10) {
if (!sub_80991E0(&dungeonSetup.info, &sp552)) {
r5 = 13;
r7 = 9;
mode = 9;
}
}
else if (r5 == 9) {
if (!sub_80991E0(&dungeonSetup.info, &sp552)) {
r5 = 11;
r7 = 12;
mode = 12;
}
}
else if (r5 == 0) {
@@ -761,7 +762,7 @@ u32 sub_80009D0(u32 a0)
dungeonSetup.info.sub0.unkB = 0;
if (gUnknown_203B484->unk4.speciesNum != 0) {
dungeonSetup.info.sub0.unkC = 1;
dungeonSetup.info.unk18 = gUnknown_203B484->unk4;
dungeonSetup.info.mon = gUnknown_203B484->unk4;
}
else {
dungeonSetup.info.sub0.unkC = 0;
@@ -771,12 +772,12 @@ u32 sub_80009D0(u32 a0)
}
else if (var == 0xF1208) {
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
}
else {
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
}
@@ -795,12 +796,12 @@ u32 sub_80009D0(u32 a0)
}
else if (var == 0xF1208) {
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
}
else {
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
}
}
@@ -811,16 +812,16 @@ u32 sub_80009D0(u32 a0)
if (r5 == 3) {
u8 r4 = sub_8001170();
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
if (r4 != 63 && r4 != 99 && IsEnterWithoutGameSave(r4)) {
if (sub_8011C1C() == 2) {
r5 = 3;
r7 = 7;
mode = 7;
}
else {
r5 = 12;
r7 = 10;
mode = 10;
}
}
@@ -830,12 +831,12 @@ u32 sub_80009D0(u32 a0)
}
else if (r5 == 4) {
r5 = 1;
r7 = 11;
mode = 11;
sub_8096BD0();
sub_80008C0_Async(1);
}
else if (r5 == 1) {
r7 = 11;
mode = 11;
sub_8096BD0();
}
}
@@ -880,22 +881,22 @@ u32 sub_80009D0(u32 a0)
switch (dungeonSetup.info.unk7C) {
case 1:
case 4:
r7 = 9;
mode = 9;
SetScriptVarArrayValue(NULL, 0x41, 0, (dungeonSetup.info.unk7E != 0) ? 2 : 1);
break;
case 2:
r7 = 10;
mode = 10;
break;
case -1:
r7 = 12;
mode = 12;
sub_8096BD0();
break;
case 5:
r7 = 11;
mode = 11;
sub_8096BD0();
break;
default:
r7 = 11;
mode = 11;
sub_8096BD0();
break;
}
@@ -914,17 +915,17 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1)
u8 quickSaveValid;
s32 quickSaveStatus;
s32 local_1c; // 0x4800
s32 local_18; // sizeof(Dungeon)
s32 dungeonStructSize; // sizeof(Dungeon)
quickSaveValid = TRUE;
sUnknown_203B03C = 1;
sub_800A8F8(3);
sub_8014144();
sub_8043D50(&local_1c, &local_18);
sub_8043D50(&local_1c, &dungeonStructSize);
param_1->info.unk74 = MemoryAlloc(local_1c, 7); // size: 0x4800
param_1->info.unk78 = MemoryAlloc(local_18, 7); // size: sizeof(Dungeon)
param_1->info.dungeon = MemoryAlloc(dungeonStructSize, 7); // size: sizeof(Dungeon)
if (param_1->info.sub0.unk4) {
PrepareQuickSaveRead(param_1->info.unk74, local_1c);
@@ -977,7 +978,7 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1)
if (quickSaveStatus == 3)
break;
if (quickSaveStatus == 1) {
MemoryFree(param_1->info.unk78);
MemoryFree(param_1->info.dungeon);
MemoryFree(param_1->info.unk74);
}
@@ -987,7 +988,7 @@ static void LoadAndRunQuickSaveDungeon_Async(DungeonSetupStruct *param_1)
}
else {
sub_808ED00();
MemoryFree(param_1->info.unk78);
MemoryFree(param_1->info.dungeon);
MemoryFree(param_1->info.unk74);
}
}
@@ -1094,19 +1095,19 @@ static void sub_80011E8(DungeonSetupSubstruct *info)
}
// arm9.bin::0200CC4C
static void sub_8001248(void)
static void RemoveMoneyAndRandomItems(void)
{
s32 index;
s32 i;
for (index = 0; index < INVENTORY_SIZE; index++) {
for (i = 0; i < INVENTORY_SIZE; i++) {
if (RandInt(100) < 50)
ZeroOutItem(&gTeamInventoryRef->teamItems[index]);
ZeroOutItem(&gTeamInventoryRef->teamItems[i]);
}
FillInventoryGaps();
for (index = 0; index < NUM_MONSTERS; index++) {
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index];
for (i = 0; i < NUM_MONSTERS; i++) {
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i];
if (PokemonFlag1(mon) && PokemonFlag2(mon))
mon->heldItem.id = ITEM_NOTHING;
}
@@ -1115,18 +1116,18 @@ static void sub_8001248(void)
}
// arm9.bin::0200CB88
static void sub_80012C0(void)
static void RemoveAllMoneyAndItems(void)
{
s32 index;
s32 i;
for (index = 0; index < INVENTORY_SIZE; index++) {
ZeroOutItem(&gTeamInventoryRef->teamItems[index]);
for (i = 0; i < INVENTORY_SIZE; i++) {
ZeroOutItem(&gTeamInventoryRef->teamItems[i]);
}
FillInventoryGaps();
for (index = 0; index < NUM_MONSTERS; index++) {
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index];
for (i = 0; i < NUM_MONSTERS; i++) {
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i];
if (PokemonFlag1(mon) && PokemonFlag2(mon))
mon->heldItem.id = ITEM_NOTHING;
}
@@ -1154,10 +1155,10 @@ static u32 xxx_script_related_8001334(u32 r0)
}
// arm9.bin::0200CA1C
static void LoadAndRunDungeon_Async(DungeonSetupStruct *r0)
static void LoadAndRunDungeon_Async(DungeonSetupStruct *setupPtr)
{
nullsub_2(r0);
RunDungeon_Async(r0);
nullsub_2(setupPtr);
RunDungeon_Async(setupPtr);
NDS_LoadOverlay_GroundMain();
}

View File

@@ -141,7 +141,7 @@ static const s16 sDeoxysForms[4] = {MONSTER_DEOXYS_NORMAL, MONSTER_DEOXYS_ATTACK
// This functions is the main 'loop' when the player is in a Dungeon. It runs from the moment the player enters a dungeon, until they leave(by completing or by fainting).
// arm9.bin::0206A848
void RunDungeon_Async(DungeonSetupStruct *r8)
void RunDungeon_Async(DungeonSetupStruct *setupPtr)
{
bool8 check;
Entity *leader;
@@ -154,11 +154,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
RGB color;
gUnknown_203B40C = 0;
r6 = r8->unk8;
r9 = r8->unk11;
r10 = r8->unk10;
gSerializedData_203B41C = r8->unk74;
gDungeon = r8->unk78;
r6 = setupPtr->info.sub0.unk4;
r9 = setupPtr->info.sub0.unkD;
r10 = setupPtr->info.sub0.unkC;
gSerializedData_203B41C = setupPtr->info.unk74;
gDungeon = setupPtr->info.dungeon;
if (!r6) {
*gSerializedData_203B41C = 0;
}
@@ -173,20 +173,20 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
gPlayerDotMapPosition.x = 100;
if (!r6) {
gDungeon->unk644.unk34 = r8->unkF;
gDungeon->unk644.dungeonSeed = r8->dungeonSeed;
gDungeon->unk644.windTurns = GetTurnLimit(r8->unk4.id);
gDungeon->unk644.unk34 = setupPtr->info.sub0.unkB;
gDungeon->unk644.dungeonSeed = setupPtr->info.dungeonSeed;
gDungeon->unk644.windTurns = GetTurnLimit(setupPtr->info.sub0.unk0.id);
gDungeon->unk644.unk36 = 0;
gDungeon->unk644.unk37 = GetRescuesAllowed(r8->unk4.id);
gDungeon->unk644.unk37 = GetRescuesAllowed(setupPtr->info.sub0.unk0.id);
}
gDungeon->unk644.unk54 = 0;
gDungeon->unk644.unk55 = 0;
gDungeon->unk644.unk18 = r8->unk9;
gDungeon->unk644.unk16 = r8->unkC;
gDungeon->unk644.canRecruit = r8->unkA;
gDungeon->unk644.unk15 = r8->unkB;
gDungeon->unk644.hasInventory = r8->unkD;
gDungeon->unk644.unk19 = r8->unkE;
gDungeon->unk644.unk18 = setupPtr->info.sub0.unk5;
gDungeon->unk644.unk16 = setupPtr->info.sub0.unk8;
gDungeon->unk644.canRecruit = setupPtr->info.sub0.unk6;
gDungeon->unk644.unk15 = setupPtr->info.sub0.unk7;
gDungeon->unk644.hasInventory = setupPtr->info.sub0.unk9;
gDungeon->unk644.unk19 = setupPtr->info.sub0.unkA;
StopDungeonBGM();
sub_803D4AC();
sub_804513C();
@@ -216,11 +216,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
gDungeon->unk181e8.allTilesRevealed = 1;
gDungeon->unk181e8.unk1820C = 1;
if (gDungeon->unk644.unk34 == 1) {
gDungeon->unk644.dungeonLocation.id = r8->dungeonSeed.location.id;
gDungeon->unk644.dungeonLocation.id = setupPtr->info.dungeonSeed.location.id;
gDungeon->unk644.dungeonLocation.floor = 1;
}
else {
gDungeon->unk644.dungeonLocation = r8->unk4;
gDungeon->unk644.dungeonLocation = setupPtr->info.sub0.unk0;
}
gDungeon->unk644.unk30 = 0;
@@ -228,7 +228,7 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
}
if (!r6) {
if (gDungeon->unk644.unk34 == 1) {
gDungeon->unk644.unk38 = r8->dungeonSeed.seed;
gDungeon->unk644.unk38 = setupPtr->info.dungeonSeed.seed;
}
else {
gDungeon->unk644.unk38 = Rand32Bit() & 0xFFFFFF;
@@ -253,11 +253,11 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
}
if (r10) {
r8->unk1C.heldItem.id = 0;
setupPtr->info.mon.heldItem.id = 0;
if (IsLevelResetTo1(gDungeon->unk644.dungeonLocation.id)) {
sub_808D0D8(&r8->unk1C);
sub_808D0D8(&setupPtr->info.mon);
}
sub_8068A84(&r8->unk1C);
sub_8068A84(&setupPtr->info.mon);
if (r6) {
sub_806B404();
}
@@ -561,8 +561,8 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
if (gDungeon->unk3 != 0) {
SaveDungeonState(gSerializedData_203B41C, 0x4800);
r8->unk7C = 3;
r8->unk80 = gDungeon->unk644.dungeonLocation;
setupPtr->info.unk7C = 3;
setupPtr->info.unk80 = gDungeon->unk644.dungeonLocation;
check = FALSE;
}
else
@@ -648,7 +648,7 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
// See comment above
FAKEMATCH:
gUnknown_203B40C = 0;
r8->unk7E = 0;
setupPtr->info.unk7E = 0;
sub_8097FF8();
sub_80095CC(1, 0x14);
sub_803E13C();
@@ -659,33 +659,33 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
if (sub_8083C24()) {
if (gDungeon->unk6 != 0) {
r8->unk7C = -2;
memset(&r8->unk84, 0, sizeof(r8->unk84));
r8->unk80 = gDungeon->unk644.dungeonLocation;
r8->unk84.location = gDungeon->unk644.dungeonLocation;
r8->unk84.seed = gDungeon->unk644.unk38;
setupPtr->info.unk7C = -2;
memset(&setupPtr->info.unk84, 0, sizeof(setupPtr->info.unk84));
setupPtr->info.unk80 = gDungeon->unk644.dungeonLocation;
setupPtr->info.unk84.location = gDungeon->unk644.dungeonLocation;
setupPtr->info.unk84.seed = gDungeon->unk644.unk38;
}
else {
r8->unk7C = -1;
setupPtr->info.unk7C = -1;
}
}
else if (sub_8083C50()) {
if (gDungeon->unk644.unk34 == 1) {
r8->unk7C = 4;
setupPtr->info.unk7C = 4;
}
else if (gDungeon->unk644.unk34 == 0) {
r8->unk7C = 1;
setupPtr->info.unk7C = 1;
sub_8084424();
}
else {
r8->unk7C = 1;
setupPtr->info.unk7C = 1;
sub_8084424();
}
r8->unk7E = gDungeon->unk644.unk30;
setupPtr->info.unk7E = gDungeon->unk644.unk30;
}
else {
r8->unk7C = 2;
setupPtr->info.unk7C = 2;
sub_8084424();
}
}
@@ -694,14 +694,14 @@ void RunDungeon_Async(DungeonSetupStruct *r8)
sub_803E214();
nullsub_56();
CloseDungeonMapFile();
if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) {
if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == 2) {
CleanUpInventoryItems();
}
if (r8->unk7C == 1 || r8->unk7C == -2 || r8->unk7C == 4 || r8->unk7C == -1 || r8->unk7C == 2) {
if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) {
if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == -2 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == -1 || setupPtr->info.unk7C == 2) {
if (setupPtr->info.unk7C == 1 || setupPtr->info.unk7C == 4 || setupPtr->info.unk7C == 2) {
sub_8068BDC(1);
}
else if (r8->unk7C == -2) {
else if (setupPtr->info.unk7C == -2) {
sub_8068BDC(0);
}
else {

View File

@@ -59,7 +59,7 @@ static void nullsub_24(void);
static void WorldMap_RunFrameActions(void);
static void UpdateMonSpritePosition(void);
static void UpdateBg(void);
static void sub_8010494(struct UnkStruct_sub_8010494 *r9);
static void sub_8010494(struct WorldMapInfo *r9);
static void AnimateMonPath_Async(u8 id1, u8 id2);
static void sub_801059C(void);
static bool8 PlayerEnterDungeonPrompt_Async(u8 *str);
@@ -70,52 +70,52 @@ static void PrintDungeonName(DungeonLocation *dungLocation);
// Code is very similar to the functions in friend_areas_map_util.c
void ShowWorldMap_Async(struct UnkStruct_sub_8010268 *r5)
void ShowWorldMap_Async(struct WorldMapSetupStruct *setupPtr)
{
s32 i, speciesId, var;
s32 i, speciesId, dungeonEnter;
u8 text[1000];
sWorldMapPtr = r5->unkB0;
sWorldMapPtr = setupPtr->worldMap;
gUnknown_2026E4E = 2566;
sub_80095CC(0, 0x14);
UpdateFadeInTile(2);
sub_801059C();
sub_8010494(&r5->unk4);
sub_8010494(&setupPtr->info);
sub_801178C();
// 60 frame delay
for (i = 0; i < 60; i++)
WorldMap_RunFrameActions();
AnimateMonPath_Async(r5->unk4.unk0.id, r5->unk4.unk4.unk0.id);
PrintDungeonName(&r5->unk4.unk4.unk0);
AnimateMonPath_Async(setupPtr->info.startLocation.id, setupPtr->info.unk4.unk0.id);
PrintDungeonName(&setupPtr->info.unk4.unk0);
// 60 frame delay
for (i = 0; i < 60; i++)
WorldMap_RunFrameActions();
if (r5->unk4.unk4.unkC) {
speciesId = r5->unk4.mon.speciesNum;
if (setupPtr->info.unk4.unkC) {
speciesId = setupPtr->info.mon.speciesNum;
ASM_MATCH_TRICK(speciesId);
}
else {
speciesId = 0;
}
var = sub_809034C(r5->unk4.unk4.unk0.id, speciesId, text, r5->unk4.unk6C, FALSE);
if (var == 0) {
r5->unkB4 = 1;
dungeonEnter = sub_809034C(setupPtr->info.unk4.unk0.id, speciesId, text, setupPtr->info.unk6C, FALSE);
if (dungeonEnter == 0) {
setupPtr->dungeonEntered = TRUE;
}
else if (var == 1) {
else if (dungeonEnter == 1) {
PrintDialogueMessage_Async(text);
r5->unkB4 = 0;
setupPtr->dungeonEntered = FALSE;
}
else if (var == 2) {
else if (dungeonEnter == 2) {
if (PlayerEnterDungeonPrompt_Async(text)) {
r5->unkB4 = 1;
setupPtr->dungeonEntered = TRUE;
}
else {
r5->unkB4 = 0;
setupPtr->dungeonEntered = FALSE;
}
}
@@ -231,7 +231,7 @@ static void AnimateMonPath_Async(u8 id1, u8 id2)
WorldMap_RunFrameActions();
}
static void sub_8010494(struct UnkStruct_sub_8010494 *r9)
static void sub_8010494(struct WorldMapInfo *info)
{
s32 i;
for (i = 0; i < 64; i++) {
@@ -239,7 +239,7 @@ static void sub_8010494(struct UnkStruct_sub_8010494 *r9)
u8 r0;
if (i < 63) {
r0 = r9->unk6D[i];
r0 = info->unk6D[i];
}
else {
r0 = 1;
@@ -256,7 +256,7 @@ static void sub_8010494(struct UnkStruct_sub_8010494 *r9)
}
AxResInitFile(&sWorldMapPtr->monAxSprite, sWorldMapPtr->unk1100[3], 0, 0, 0, 0, TRUE);
sWorldMapPtr->monSpritePos = gDungeonCoordinates[r9->unk0.id];
sWorldMapPtr->monSpritePos = gDungeonCoordinates[info->startLocation.id];
sWorldMapPtr->bgPos.x = sWorldMapPtr->monSpritePos.x - 120;
sWorldMapPtr->bgPos.y = sWorldMapPtr->monSpritePos.y - 80;
UpdateMonSpritePosition();