mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-20 15:55:05 -05:00
Merge pull request #411 from DizzyEggg/sub_80009D0
Match sub_80009D0 and LoadTitleScreen / Unify various structs
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
13
include/structs/str_dungeon_mail_seed.h
Normal file
13
include/structs/str_dungeon_mail_seed.h
Normal 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
|
||||
46
include/structs/str_dungeon_setup.h
Normal file
46
include/structs/str_dungeon_setup.h
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -48,7 +48,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
|
||||
int index;
|
||||
u32 uVar2;
|
||||
|
||||
uVar2 = sub_803C1D0(¶m_1->unk4.dungeon,param_1->missionType);
|
||||
uVar2 = sub_803C1D0(¶m_1->dungeonSeed.location,param_1->missionType);
|
||||
param_2->moneyReward = 0;
|
||||
|
||||
for(index = 0; index < MAX_ITEM_REWARDS; index++)
|
||||
@@ -75,7 +75,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
|
||||
param_2->rewardType = 3;
|
||||
param_2->itemRewards[0] = param_1->itemReward;
|
||||
do {
|
||||
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]);
|
||||
sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[1]);
|
||||
} while (param_2->itemRewards[0] == param_2->itemRewards[1]);
|
||||
break;
|
||||
case MONEY1:
|
||||
@@ -95,11 +95,11 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
|
||||
param_2->rewardType = 3;
|
||||
param_2->itemRewards[0] = param_1->itemReward;
|
||||
do {
|
||||
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]);
|
||||
sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[1]);
|
||||
} while (param_2->itemRewards[0] == param_2->itemRewards[1]);
|
||||
do {
|
||||
do {
|
||||
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[2]);
|
||||
sub_803C37C(¶m_1->dungeonSeed.location,param_1->missionType,¶m_2->itemRewards[2]);
|
||||
} while (param_2->itemRewards[0] == param_2->itemRewards[2]);
|
||||
} while (param_2->itemRewards[1] == param_2->itemRewards[2]);
|
||||
break;
|
||||
@@ -113,7 +113,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
|
||||
}
|
||||
CopyYellowMonsterNametoBuffer(param_2->clientName, param_1->clientSpecies);
|
||||
param_2->clientSpecies = param_1->clientSpecies;
|
||||
param_2->teamRankPtsReward = GetDungeonTeamRankPts(¶m_1->unk4.dungeon,param_1->missionType);
|
||||
param_2->teamRankPtsReward = GetDungeonTeamRankPts(¶m_1->dungeonSeed.location,param_1->missionType);
|
||||
}
|
||||
|
||||
void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward)
|
||||
@@ -248,7 +248,7 @@ bool8 sub_803C580(WonderMail *param_1)
|
||||
return FALSE;
|
||||
|
||||
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E8180); ptr++, id++) {
|
||||
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) {
|
||||
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->dungeonSeed.location.id, ptr->itemId)) {
|
||||
array[counter++] = id;
|
||||
}
|
||||
}
|
||||
@@ -275,7 +275,7 @@ bool8 sub_803C610(WonderMail *param_1)
|
||||
counter = 0;
|
||||
ptr = gUnknown_80E81D4;
|
||||
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E81D4); ptr++, id++) {
|
||||
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) {
|
||||
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->dungeonSeed.location.id, ptr->itemId)) {
|
||||
array[counter++] = id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/move_id.h"
|
||||
#include "structs/str_wonder_mail.h"
|
||||
#include "structs/str_dungeon_setup.h"
|
||||
#include "code_8009804.h"
|
||||
#include "code_800C9CC.h"
|
||||
#include "code_80118A4.h"
|
||||
@@ -29,7 +30,7 @@ EWRAM_DATA u16 gUnknown_20398BC = {0};
|
||||
EWRAM_DATA s16 gUnknown_20398BE = {0};
|
||||
EWRAM_DATA u32 gUnknown_20398C0 = {0};
|
||||
EWRAM_DATA s16 gUnknown_20398C4 = {0};
|
||||
EWRAM_DATA struct unkStruct_20398C8 gUnknown_20398C8 = {0};
|
||||
EWRAM_DATA struct DungeonSetupInfo gUnknown_20398C8 = {0};
|
||||
EWRAM_DATA u8 gUnknown_2039950 = 0;
|
||||
|
||||
EWRAM_INIT bool8 gUnknown_203B49C = {0};
|
||||
@@ -54,7 +55,7 @@ extern void sub_809CB8C();
|
||||
extern void sub_8098CC8();
|
||||
extern void ClearAllItems_8091FB4();
|
||||
extern u8 sub_809C730();
|
||||
extern void sub_8095494(WonderMailSub *param_1, u8 index);
|
||||
extern void sub_8095494(DungeonMailSeed *param_1, u8 index);
|
||||
|
||||
extern u16 gUnknown_2026E4E;
|
||||
|
||||
@@ -755,10 +756,10 @@ const char *sub_80990B8(void)
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool8 sub_80990EC_sub(struct unkStruct_20398C8 *iVar1, u32 iVar2)
|
||||
static inline bool8 sub_80990EC_sub(struct DungeonSetupInfo *iVar1, u32 iVar2)
|
||||
{
|
||||
bool8 flag = FALSE;
|
||||
iVar1->unkB = 0;
|
||||
iVar1->sub0.unkB = 0;
|
||||
|
||||
if ((u16)(iVar2 - 0x25) < 3)
|
||||
flag = TRUE;
|
||||
@@ -769,26 +770,25 @@ static inline bool8 sub_80990EC_sub(struct unkStruct_20398C8 *iVar1, u32 iVar2)
|
||||
|
||||
extern void sub_80A8EC0(u8 *, u32);
|
||||
|
||||
u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2)
|
||||
u8 sub_80990EC(struct DungeonSetupInfo *param_1, s16 param_2)
|
||||
{
|
||||
const DungeonInfo *iVar1;
|
||||
u8 auStack_98 [24];
|
||||
u8 nameBuffer [24];
|
||||
u8 r5;
|
||||
u8 dungeonIndex;
|
||||
|
||||
iVar1 = GetDungeonInfo_80A2608(param_2);
|
||||
dungeonIndex = iVar1->dungeonIndex;
|
||||
r5 = 0;
|
||||
param_1->unk0 = dungeonIndex;
|
||||
param_1->unk1 = 1;
|
||||
param_1->unkC = r5;
|
||||
|
||||
param_1->sub0.unk0.id = dungeonIndex;
|
||||
param_1->sub0.unk0.floor = 1;
|
||||
param_1->sub0.unkC = 0;
|
||||
|
||||
switch(sub_80A2750(param_2))
|
||||
{
|
||||
case 1:
|
||||
if (sub_80990EC_sub(param_1, param_2)) {
|
||||
param_1->unkC = 1;
|
||||
param_1->sub0.unkC = 1;
|
||||
sub_80A8EC0(auStack_98, 0x5b);
|
||||
BoundedCopyStringtoBuffer(nameBuffer, auStack_98, POKEMON_NAME_LENGTH);
|
||||
{
|
||||
@@ -807,27 +807,27 @@ u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2)
|
||||
.currExp = 25000,
|
||||
};
|
||||
|
||||
sub_808D144(¶m_1->unk18, &stack);
|
||||
sub_808D144(¶m_1->mon, &stack);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
param_1->unkB = 0;
|
||||
param_1->sub0.unkB = 0;
|
||||
break;
|
||||
case 2:
|
||||
param_1->unkB = 2;
|
||||
param_1->sub0.unkB = 2;
|
||||
break;
|
||||
}
|
||||
param_1->unk4 = 0;
|
||||
param_1->unkD = 0;
|
||||
param_1->sub0.unk4 = 0;
|
||||
param_1->sub0.unkD = 0;
|
||||
return iVar1->unk11;
|
||||
}
|
||||
|
||||
u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2)
|
||||
u8 sub_80991E0(struct DungeonSetupInfo *param_1,short *param_2)
|
||||
{
|
||||
*param_2 = gUnknown_20398C4;
|
||||
if (gUnknown_203B49C) {
|
||||
memcpy(param_1, &gUnknown_20398C8, sizeof(struct unkStruct_20398C8));
|
||||
memcpy(param_1, &gUnknown_20398C8, sizeof(struct DungeonSetupInfo));
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
@@ -835,7 +835,7 @@ u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8099220(struct unkStruct_20398C8 *param_1, s16 param_2)
|
||||
void sub_8099220(struct DungeonSetupInfo *param_1, s16 param_2)
|
||||
{
|
||||
s32 param_2_s32 = (s16)param_2;
|
||||
if (param_1 != NULL)
|
||||
@@ -843,7 +843,7 @@ void sub_8099220(struct unkStruct_20398C8 *param_1, s16 param_2)
|
||||
gUnknown_203B49C = TRUE;
|
||||
gUnknown_203B49D = 0;
|
||||
gUnknown_20398C4 = param_2_s32;
|
||||
memcpy(&gUnknown_20398C8, param_1, sizeof(struct unkStruct_20398C8));
|
||||
memcpy(&gUnknown_20398C8, param_1, sizeof(struct DungeonSetupInfo));
|
||||
}
|
||||
else {
|
||||
gUnknown_203B49C = FALSE;
|
||||
@@ -860,9 +860,9 @@ void sub_809927C(u8 param_1)
|
||||
gUnknown_2039950 = param_1;
|
||||
SetScriptVarValue(0x0,DUNGEON_ENTER,0x50);
|
||||
SetScriptVarValue(0x0,DUNGEON_ENTER_INDEX,gUnknown_2039950);
|
||||
sub_8095494(&gUnknown_20398C8.unk10,param_1);
|
||||
gUnknown_20398C8.unkB = 1;
|
||||
gUnknown_20398C8.unkC = 0;
|
||||
gUnknown_20398C8.unk4 = 0;
|
||||
gUnknown_20398C8.unkD = 0;
|
||||
sub_8095494(&gUnknown_20398C8.dungeonSeed,param_1);
|
||||
gUnknown_20398C8.sub0.unkB = 1;
|
||||
gUnknown_20398C8.sub0.unkC = 0;
|
||||
gUnknown_20398C8.sub0.unk4 = 0;
|
||||
gUnknown_20398C8.sub0.unkD = 0;
|
||||
}
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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;
|
||||
|
||||
1291
src/main_loops.c
1291
src/main_loops.c
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
PrintStringOnWindow(21, param_1->y, gMedichamMission, param_1->unk0[0], 0);
|
||||
break;
|
||||
case 7:
|
||||
PrintYellowDungeonNametoBuffer(buf_1, ¶m_1->unk8->dungeon);
|
||||
PrintYellowDungeonNametoBuffer(buf_1, ¶m_1->dungeonSeed->location);
|
||||
PrintStringOnWindow(21, param_1->y, buf_1, param_1->unk0[0], 0);
|
||||
break;
|
||||
case 12:
|
||||
@@ -74,7 +74,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
PrintStringOnWindow(21, param_1->y, gUnknown_80E886C, param_1->unk0[0],0);
|
||||
break;
|
||||
case 10: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80EAE5C[bVar2 % 4], gFormatBuffer_Monsters[0]);
|
||||
@@ -82,7 +82,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80E910C[bVar2 % 10], gFormatBuffer_Monsters[0]);
|
||||
@@ -90,7 +90,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80E8C98[bVar2 % 15], gFormatBuffer_Monsters[0]);
|
||||
@@ -109,19 +109,19 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
}
|
||||
else {
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_3, ¶m_1->unk8->dungeon);
|
||||
PrintDungeonLocationtoBuffer(buf_3, ¶m_1->dungeonSeed->location);
|
||||
sprintfStatic(buf_1, gUnknown_80E8884, buf_3);
|
||||
}
|
||||
else
|
||||
PrintDungeonLocationtoBuffer(buf_1, ¶m_1->unk8->dungeon);
|
||||
PrintDungeonLocationtoBuffer(buf_1, ¶m_1->dungeonSeed->location);
|
||||
|
||||
PrintStringOnWindow(29, param_1->y + 12, buf_1, param_1->unk0[0], 0);
|
||||
}
|
||||
|
||||
if (param_1->mailTitleType == 7)
|
||||
uVar1 = sub_803C1D0(¶m_1->unk8->dungeon, 0);
|
||||
uVar1 = sub_803C1D0(¶m_1->dungeonSeed->location, 0);
|
||||
else
|
||||
uVar1 = sub_803C1D0(¶m_1->unk8->dungeon, param_1->mail->missionType);
|
||||
uVar1 = sub_803C1D0(¶m_1->dungeonSeed->location, param_1->mail->missionType);
|
||||
|
||||
PrintStringOnWindow(180, param_1->y, GetMissionRankText(uVar1), param_1->unk0[0], 0);
|
||||
}
|
||||
@@ -190,8 +190,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
case 15:
|
||||
case 16: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor;
|
||||
BufferItemName(gFormatBuffer_Items[0], param_1->targetItem, NULL);
|
||||
sprintfStatic(buf_1, gUnknown_80EB3F8[bVar2 % 22], gFormatBuffer_Items[0]);
|
||||
PrintStringOnWindow(10, y, buf_1, param_1->unk0[0], 0);
|
||||
@@ -203,8 +203,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
case 14: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80EAEB8[bVar2 % 20], gFormatBuffer_Monsters[0]);
|
||||
@@ -217,8 +217,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80EB220[bVar2 % 6], gFormatBuffer_Monsters[0]);
|
||||
@@ -231,8 +231,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
case 13: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80E91D4[bVar2 % 45], gFormatBuffer_Monsters[0]);
|
||||
@@ -245,8 +245,8 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
u8 bVar2 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.id;
|
||||
u8 bVar3 = param_1->dungeonSeed->seed + param_1->dungeonSeed->location.floor;
|
||||
monName = GetMonSpecies(param_1->clientSpecies);
|
||||
strcpy(gFormatBuffer_Monsters[0], monName);
|
||||
sprintfStatic(buf_1, gUnknown_80E8DE4[bVar2 % 13], gFormatBuffer_Monsters[0]);
|
||||
@@ -314,18 +314,18 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
|
||||
PrintStringOnWindow(10, y, gPlaceText, param_1->unk0[0], 0);
|
||||
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_5, ¶m_1->unk8->dungeon);
|
||||
PrintDungeonLocationtoBuffer(buf_5, ¶m_1->dungeonSeed->location);
|
||||
sprintfStatic(buf_1, gUnknown_80E8884, buf_5);
|
||||
}
|
||||
else
|
||||
PrintDungeonLocationtoBuffer(buf_1, ¶m_1->unk8->dungeon);
|
||||
PrintDungeonLocationtoBuffer(buf_1, ¶m_1->dungeonSeed->location);
|
||||
|
||||
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
|
||||
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE)
|
||||
uVar3 = sub_803C1D0(¶m_1->unk8->dungeon, 0);
|
||||
uVar3 = sub_803C1D0(¶m_1->dungeonSeed->location, 0);
|
||||
else
|
||||
uVar3 = sub_803C1D0(¶m_1->unk8->dungeon, param_1->mail->missionType);
|
||||
uVar3 = sub_803C1D0(¶m_1->dungeonSeed->location, param_1->mail->missionType);
|
||||
|
||||
y += 12;
|
||||
PrintStringOnWindow(10, y, gDifficultyText, param_1->unk0[0], 0);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user