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