Merge pull request #411 from DizzyEggg/sub_80009D0

Match sub_80009D0 and LoadTitleScreen / Unify various structs
This commit is contained in:
Seth Barberee
2025-06-02 13:06:45 -07:00
committed by GitHub
36 changed files with 806 additions and 1198 deletions

View File

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

View File

@@ -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
#endif // GUARD_CODE_80958E8_H

View File

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

View File

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

View File

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

View File

@@ -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
#endif // GUARD_STR_802C39C_H

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -48,7 +48,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
int index;
u32 uVar2;
uVar2 = sub_803C1D0(&param_1->unk4.dungeon,param_1->missionType);
uVar2 = sub_803C1D0(&param_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(&param_1->unk4.dungeon,param_1->missionType,&param_2->itemRewards[1]);
sub_803C37C(&param_1->dungeonSeed.location,param_1->missionType,&param_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(&param_1->unk4.dungeon,param_1->missionType,&param_2->itemRewards[1]);
sub_803C37C(&param_1->dungeonSeed.location,param_1->missionType,&param_2->itemRewards[1]);
} while (param_2->itemRewards[0] == param_2->itemRewards[1]);
do {
do {
sub_803C37C(&param_1->unk4.dungeon,param_1->missionType,&param_2->itemRewards[2]);
sub_803C37C(&param_1->dungeonSeed.location,param_1->missionType,&param_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(&param_1->unk4.dungeon,param_1->missionType);
param_2->teamRankPtsReward = GetDungeonTeamRankPts(&param_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;
}
}

View File

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

View File

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

View File

@@ -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.");
"{CENTER_ALIGN}Your last outing is considered a defeat.");

View File

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

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

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

View File

@@ -2,6 +2,7 @@
#include "constants/dungeon.h"
#include "constants/move_id.h"
#include "structs/str_wonder_mail.h"
#include "structs/str_dungeon_setup.h"
#include "code_8009804.h"
#include "code_800C9CC.h"
#include "code_80118A4.h"
@@ -29,7 +30,7 @@ EWRAM_DATA u16 gUnknown_20398BC = {0};
EWRAM_DATA s16 gUnknown_20398BE = {0};
EWRAM_DATA u32 gUnknown_20398C0 = {0};
EWRAM_DATA s16 gUnknown_20398C4 = {0};
EWRAM_DATA struct unkStruct_20398C8 gUnknown_20398C8 = {0};
EWRAM_DATA struct DungeonSetupInfo gUnknown_20398C8 = {0};
EWRAM_DATA u8 gUnknown_2039950 = 0;
EWRAM_INIT bool8 gUnknown_203B49C = {0};
@@ -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(&param_1->unk18, &stack);
sub_808D144(&param_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;
}

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -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, &param_1->unk8->dungeon);
PrintYellowDungeonNametoBuffer(buf_1, &param_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, &param_1->unk8->dungeon);
PrintDungeonLocationtoBuffer(buf_3, &param_1->dungeonSeed->location);
sprintfStatic(buf_1, gUnknown_80E8884, buf_3);
}
else
PrintDungeonLocationtoBuffer(buf_1, &param_1->unk8->dungeon);
PrintDungeonLocationtoBuffer(buf_1, &param_1->dungeonSeed->location);
PrintStringOnWindow(29, param_1->y + 12, buf_1, param_1->unk0[0], 0);
}
if (param_1->mailTitleType == 7)
uVar1 = sub_803C1D0(&param_1->unk8->dungeon, 0);
uVar1 = sub_803C1D0(&param_1->dungeonSeed->location, 0);
else
uVar1 = sub_803C1D0(&param_1->unk8->dungeon, param_1->mail->missionType);
uVar1 = sub_803C1D0(&param_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, &param_1->unk8->dungeon);
PrintDungeonLocationtoBuffer(buf_5, &param_1->dungeonSeed->location);
sprintfStatic(buf_1, gUnknown_80E8884, buf_5);
}
else
PrintDungeonLocationtoBuffer(buf_1, &param_1->unk8->dungeon);
PrintDungeonLocationtoBuffer(buf_1, &param_1->dungeonSeed->location);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE)
uVar3 = sub_803C1D0(&param_1->unk8->dungeon, 0);
uVar3 = sub_803C1D0(&param_1->dungeonSeed->location, 0);
else
uVar3 = sub_803C1D0(&param_1->unk8->dungeon, param_1->mail->missionType);
uVar3 = sub_803C1D0(&param_1->dungeonSeed->location, param_1->mail->missionType);
y += 12;
PrintStringOnWindow(10, y, gDifficultyText, param_1->unk0[0], 0);

View File

@@ -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 {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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.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();