Document and clean up field_battle_data_transfer.c

This commit is contained in:
Rachel
2024-11-04 21:20:15 -08:00
parent 479178fa05
commit 74f60d99ed
47 changed files with 577 additions and 557 deletions

View File

@@ -541,6 +541,35 @@
"TERRAIN_MAX"
]
},
"@BattleBackground": {
"type": "enum",
"values": [
"BACKGROUND_PLAIN",
"BACKGROUND_WATER",
"BACKGROUND_CITY",
"BACKGROUND_FOREST",
"BACKGROUND_MOUNTAIN",
"BACKGROUND_SNOW",
"BACKGROUND_INDOORS_1",
"BACKGROUND_INDOORS_2",
"BACKGROUND_INDOORS_3",
"BACKGROUND_CAVE_1",
"BACKGROUND_CAVE_2",
"BACKGROUND_CAVE_3",
"BACKGROUND_AARON",
"BACKGROUND_BERTHA",
"BACKGROUND_FLINT",
"BACKGROUND_LUCIAN",
"BACKGROUND_CYNTHIA",
"BACKGROUND_DISTORTION_WORLD",
"BACKGROUND_BATTLE_TOWER",
"BACKGROUND_BATTLE_FACTORY",
"BACKGROUND_BATTLE_ARCADE",
"BACKGROUND_BATTLE_CASTLE",
"BACKGROUND_BATTLE_HALL",
"BACKGROUND_MAX"
]
},
"@BattleAnimation": {
"type": "enum",
"values": [

View File

@@ -2,6 +2,7 @@
#define POKEPLATINUM_FIELD_BATTLE_DATA_TRANSFER_H
#include "constants/battle.h"
#include "consts/map.h"
#include "struct_decls/pokedexdata_decl.h"
#include "struct_decls/struct_02027F8C_decl.h"
@@ -77,25 +78,26 @@ typedef struct FieldBattleDTO {
u32 unk_19C;
} FieldBattleDTO;
FieldBattleDTO *sub_02051D8C(int param0, u32 param1);
FieldBattleDTO *sub_02051F24(int param0, int param1);
FieldBattleDTO *sub_02051F38(int param0, int param1);
FieldBattleDTO *sub_02051F4C(int param0, const FieldSystem *fieldSystem);
void sub_020520A4(FieldBattleDTO *param0);
void sub_0205213C(FieldBattleDTO *param0, Pokemon *param1, int param2);
void sub_02052164(FieldBattleDTO *param0, const Party *param1, int param2);
void sub_02052184(FieldBattleDTO *param0, const TrainerInfo *param1, int param2);
void sub_020521A4(FieldBattleDTO *param0, const ChatotCry *param1, int param2);
void sub_020521B8(FieldBattleDTO *param0, const FieldSystem *fieldSystem, SaveData *param2, int param3, Journal *param4, BagCursor *param5, u8 *param6);
void sub_02052314(FieldBattleDTO *param0, const FieldSystem *fieldSystem);
void sub_02052348(FieldBattleDTO *param0, const FieldSystem *fieldSystem, int param2);
void sub_020524E4(FieldBattleDTO *param0, const FieldSystem *fieldSystem, const Party *param2, const u8 *param3);
void sub_020526CC(FieldBattleDTO *param0, const FieldSystem *fieldSystem, const u8 *param2);
void sub_020526E8(const FieldBattleDTO *param0, FieldSystem *fieldSystem);
void sub_02052754(const FieldBattleDTO *param0, FieldSystem *fieldSystem);
void sub_0205285C(FieldBattleDTO *param0);
BOOL FieldBattleDTO_PlayerWon(u32 battleResult);
BOOL FieldBattleDTO_PlayerLost(u32 battleResult);
BOOL FieldBattleDTO_PlayerDidNotCapture(u32 battleResult);
FieldBattleDTO *FieldBattleDTO_New(enum HeapId heapID, u32 battleType);
FieldBattleDTO *FieldBattleDTO_NewSafari(enum HeapId heapID, int countSafariBalls);
FieldBattleDTO *FieldBattleDTO_NewPalPark(enum HeapId heapID, int countParkBalls);
FieldBattleDTO *FieldBattleDTO_NewCatchingTutorial(enum HeapId heapID, const FieldSystem *fieldSystem);
void FieldBattleDTO_Free(FieldBattleDTO *dto);
void FieldBattleDTO_AddPokemonToBattler(FieldBattleDTO *dto, Pokemon *src, int battler);
void FieldBattleDTO_CopyPartyToBattler(FieldBattleDTO *dto, const Party *src, int battler);
void FieldBattleDTO_CopyTrainerInfoToBattler(FieldBattleDTO *dto, const TrainerInfo *src, int battler);
void FieldBattleDTO_CopyChatotCryToBattler(FieldBattleDTO *dto, const ChatotCry *src, int battler);
void FieldBattleDTO_InitFromGameState(FieldBattleDTO *dto, const FieldSystem *fieldSystem, SaveData *save, enum MapHeader mapHeaderID, Journal *journal, BagCursor *bagCursor, u8 *subscreenCursorOn);
void FieldBattleDTO_Init(FieldBattleDTO *dto, const FieldSystem *fieldSystem);
void FieldBattleDTO_InitWithNormalizedMonLevels(FieldBattleDTO *dto, const FieldSystem *fieldSystem, int level);
void FieldBattleDTO_InitWithPartyOrder(FieldBattleDTO *dto, const FieldSystem *fieldSystem, const Party *party, const u8 *partyOrder);
void FieldBattleDTO_InitWithPartyOrderFromSave(FieldBattleDTO *dto, const FieldSystem *fieldSystem, const u8 *partyOrder);
void FieldBattleDTO_UpdateFieldSystem(const FieldBattleDTO *dto, FieldSystem *fieldSystem);
void FieldBattleDTO_UpdatePokedex(const FieldBattleDTO *dto, FieldSystem *fieldSystem);
void FieldBattleDTO_SetWaterTerrain(FieldBattleDTO *dto);
BOOL CheckPlayerWonBattle(u32 battleResult);
BOOL CheckPlayerLostBattle(u32 battleResult);
BOOL CheckPlayerDidNotCaptureWildMon(u32 battleResult);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *dto);
#endif // POKEPLATINUM_FIELD_BATTLE_DATA_TRANSFER_H

View File

@@ -13,6 +13,12 @@
#include "field/field_system_decl.h"
#include "overlay101/struct_ov101_021D5D90_decl.h"
enum PlayerAvatarForm {
PLAYER_AVATAR_WALKING = 0,
PLAYER_AVATAR_BIKING,
PLAYER_AVATAR_SURFING,
};
PlayerAvatar *PlayerAvatar_Init(const MapObjectManager *param0, int param1, int param2, int param3, int param4, int param5, int param6, PlayerData *param7);
PlayerAvatar *sub_0205E820(const MapObjectManager *param0, PlayerData *param1, int gender);
void PlayerAvatar_InitDraw(PlayerAvatar *playerAvatar, int param1);
@@ -68,9 +74,6 @@ int PlayerData_CyclingGear(PlayerData *param0);
void PlayerData_SetCyclingGear(PlayerData *param0, int param1);
void PlayerAvatar_SetCyclingGear(PlayerAvatar *playerAvatar, int param1);
int PlayerAvatar_CyclingGear(PlayerAvatar *playerAvatar);
u32 sub_0205EC94(PlayerData *param0);
void sub_0205ECA0(PlayerData *param0, u32 param1);
void sub_0205ECA8(PlayerAvatar *playerAvatar, u32 param1);
void sub_0205ECB8(PlayerAvatar *playerAvatar, const VecFx32 *param1, int param2);
void sub_0205ECE0(PlayerAvatar *playerAvatar, int param1, int param2, int param3);
void sub_0205ED0C(PlayerAvatar *playerAvatar, fx32 param1);

View File

@@ -4,7 +4,7 @@
typedef struct {
u16 unk_00;
u16 runningShoes;
u32 unk_04;
u32 form;
} PlayerData;
#endif // POKEPLATINUM_STRUCT_0205EC34_H

View File

@@ -8,7 +8,7 @@
int Pokedex_SaveSize(void);
PokedexData *sub_02026324(u32 param0);
void sub_02026338(const PokedexData *param0, PokedexData *param1);
void Pokedex_Copy(const PokedexData *src, PokedexData *dest);
void Pokedex_Init(PokedexData *param0);
u16 sub_02026DD0(const PokedexData *param0);
u16 Pokedex_CountSeenNational(const PokedexData *pokedex);

View File

@@ -11,7 +11,7 @@
void sub_02054F44(const TerrainCollisionManager **param0, int param1);
BOOL FieldSystem_CheckCollision(const FieldSystem *fieldSystem, const int param1, const int param2);
u8 sub_02054F94(const FieldSystem *fieldSystem, const int param1, const int param2);
u8 FieldSystem_GetTileAttributes(const FieldSystem *fieldSystem, const int x, const int z);
const fx32 sub_02054FBC(const FieldSystem *fieldSystem, const fx32 param1, const fx32 param2, const fx32 param3, u8 *param4);
BOOL sub_02055024(const FieldSystem *fieldSystem, const VecFx32 *param1, const int param2, const int param3, s8 *param4);
BOOL sub_0205507C(FieldSystem *fieldSystem, const VecFx32 *param1, const int param2, const int param3, s8 *param4);

View File

@@ -5,8 +5,10 @@
#include "field/field_system_decl.h"
#include "rtc.h"
void sub_020559DC(FieldSystem *fieldSystem);
int sub_02055BA8(const FieldSystem *fieldSystem);
enum TimeOfDay FieldSystem_GetTimeOfDay(const FieldSystem *fieldSystem);
int sub_02055BB8(const FieldSystem *fieldSystem);
int sub_02055BC4(const FieldSystem *fieldSystem);
int sub_02055BD0(const FieldSystem *fieldSystem);

View File

@@ -731,7 +731,7 @@ static void ov16_0223BCB4(OverlayManager *param0)
sub_02015760(v0->unk_1AC);
Bag_Copy(v0->unk_58, v1->bag);
Heap_FreeToHeap(v0->unk_58);
sub_02026338(v0->pokedex, v1->pokedex);
Pokedex_Copy(v0->pokedex, v1->pokedex);
Heap_FreeToHeap(v0->pokedex);
v1->pcBoxes = v0->pcBoxes;
@@ -1085,7 +1085,7 @@ static void ov16_0223C2C0(BattleSystem *param0, FieldBattleDTO *param1)
Bag_Copy(param1->bag, param0->unk_58);
param0->pokedex = sub_02026324(5);
sub_02026338(param1->pokedex, param0->pokedex);
Pokedex_Copy(param1->pokedex, param0->pokedex);
param0->pcBoxes = param1->pcBoxes;
param0->unk_1B0 = param1->options;

View File

@@ -122,7 +122,7 @@ static UnkStruct_02050ACC *sub_02050ACC(FieldBattleDTO *param0, int param1, int
static void sub_02050AF0(UnkStruct_02050ACC *param0)
{
sub_020520A4(param0->unk_10);
FieldBattleDTO_Free(param0->unk_10);
Heap_FreeToHeap(param0);
}
@@ -134,7 +134,7 @@ static BOOL sub_02050B04(UnkStruct_02050ACC *param0)
*(param0->unk_00) = param0->unk_10->resultMask;
}
v0 = FieldBattleDTO_PlayerWon(param0->unk_10->resultMask);
v0 = CheckPlayerWonBattle(param0->unk_10->resultMask);
return v0;
}
@@ -144,7 +144,7 @@ static void sub_02050B1C(const FieldBattleDTO *param0, FieldSystem *fieldSystem)
return;
}
sub_020526E8(param0, fieldSystem);
FieldBattleDTO_UpdateFieldSystem(param0, fieldSystem);
}
static BOOL sub_02050B30(FieldTask *taskMan)
@@ -256,7 +256,7 @@ static BOOL sub_02050CA8(FieldTask *taskMan)
break;
case 3:
sub_02050C6C(v1->unk_10->resultMask, fieldSystem);
sub_02052754(v1->unk_10, fieldSystem);
FieldBattleDTO_UpdatePokedex(v1->unk_10, fieldSystem);
{
GameRecords *v3 = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
@@ -295,7 +295,7 @@ static BOOL sub_02050D4C(FieldTask *taskMan)
break;
case 1: {
sub_02050C6C(v1->unk_10->resultMask, fieldSystem);
sub_02052754(v1->unk_10, fieldSystem);
FieldBattleDTO_UpdatePokedex(v1->unk_10, fieldSystem);
}
{
GameRecords *v3 = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
@@ -334,7 +334,7 @@ static UnkStruct_02050DD4 *sub_02050DD4(FieldBattleDTO *param0, int param1, int
static void sub_02050DFC(UnkStruct_02050DD4 *param0)
{
sub_020520A4(param0->unk_10);
FieldBattleDTO_Free(param0->unk_10);
Heap_FreeToHeap(param0);
}
@@ -395,7 +395,7 @@ static BOOL sub_02050EE0(FieldTask *taskMan)
sub_02050B1C(v1->unk_10, fieldSystem);
sub_0206D1B8(fieldSystem, v1->unk_10->unk_10C, v1->unk_10->resultMask);
if (FieldBattleDTO_PlayerWon(v1->unk_10->resultMask) == 0) {
if (CheckPlayerWonBattle(v1->unk_10->resultMask) == 0) {
sub_02050DFC(v1);
RadarChain_Clear(fieldSystem->chain);
FieldTask_InitJump(taskMan, sub_02052B2C, NULL);
@@ -541,8 +541,8 @@ void sub_0205120C(FieldTask *taskMan, int *param1)
fieldSystem = FieldTask_GetFieldSystem(taskMan);
RadarChain_Clear(fieldSystem->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, fieldSystem);
v1 = FieldBattleDTO_New(11, (0x0 | 0x0));
FieldBattleDTO_Init(v1, fieldSystem);
v1->background = 0;
v1->terrain = TERRAIN_PLAIN;
@@ -562,8 +562,8 @@ void sub_02051270(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL p
fieldSystem = FieldTask_GetFieldSystem(taskMan);
RadarChain_Clear(fieldSystem->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, fieldSystem);
v1 = FieldBattleDTO_New(11, (0x0 | 0x0));
FieldBattleDTO_Init(v1, fieldSystem);
ov6_022420D4(fieldSystem, param1, param2, v1);
@@ -586,8 +586,8 @@ void sub_020512E4(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL p
fieldSystem = FieldTask_GetFieldSystem(taskMan);
RadarChain_Clear(fieldSystem->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, fieldSystem);
v1 = FieldBattleDTO_New(11, (0x0 | 0x0));
FieldBattleDTO_Init(v1, fieldSystem);
ov6_022420D4(fieldSystem, param1, param2, v1);
@@ -674,9 +674,9 @@ void sub_02051480(FieldTask *taskMan, int param1, int param2, int *param3)
FieldSystem *fieldSystem;
fieldSystem = FieldTask_GetFieldSystem(taskMan);
v1 = sub_02051D8C(11, 0x1);
v1 = FieldBattleDTO_New(11, 0x1);
sub_02052314(v1, fieldSystem);
FieldBattleDTO_Init(v1, fieldSystem);
v1->battleStatusMask = BATTLE_STATUS_FIRST_BATTLE;
v1->trainerIDs[1] = param1;
@@ -735,7 +735,7 @@ void sub_02051590(FieldTask *taskMan)
FieldBattleDTO *v1;
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
v1 = sub_02051F4C(11, fieldSystem);
v1 = FieldBattleDTO_NewCatchingTutorial(11, fieldSystem);
v0 = sub_02050ACC(v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), NULL);
FieldTask_InitCall(taskMan, sub_020514E8, v0);
@@ -763,8 +763,8 @@ void sub_020515CC(FieldTask *taskMan, int param1, int param2, int param3, int pa
}
RadarChain_Clear(fieldSystem->chain);
v2 = sub_02051D8C(11, v0);
sub_02052314(v2, fieldSystem);
v2 = FieldBattleDTO_New(11, v0);
FieldBattleDTO_Init(v2, fieldSystem);
if ((fieldSystem->location->mapId >= MAP_HEADER_DISTORTION_WORLD_1F) && (fieldSystem->location->mapId <= MAP_HEADER_DISTORTION_WORLD_TURNBACK_CAVE_ROOM)) {
v2->battleStatusMask |= BATTLE_STATUS_DISTORTION;
@@ -785,8 +785,8 @@ void sub_0205167C(FieldTask *taskMan, const u8 *param1, int param2)
UnkStruct_02050ACC *v1;
FieldBattleDTO *v2;
v2 = sub_02051D8C(11, param2);
sub_020526CC(v2, fieldSystem, param1);
v2 = FieldBattleDTO_New(11, param2);
FieldBattleDTO_InitWithPartyOrderFromSave(v2, fieldSystem, param1);
v1 = sub_02050ACC(v2, EncEffects_CutInEffect(v2), EncEffects_BGM(v2), NULL);
FieldTask_InitCall(taskMan, sub_02050CA8, v1);
@@ -823,15 +823,15 @@ void sub_020516F4(FieldTask *taskMan, int param1, int param2, int param3)
if (param3 == 0) {
v4 = (0x4 | 0x1);
v2 = sub_02051D8C(11, (0x4 | 0x1));
v2 = FieldBattleDTO_New(11, (0x4 | 0x1));
v5 = (UnkEnum_0202F510_00);
} else if (param3 == 1) {
v4 = ((0x4 | 0x1) | 0x2);
v2 = sub_02051D8C(11, ((0x4 | 0x1) | 0x2));
v2 = FieldBattleDTO_New(11, ((0x4 | 0x1) | 0x2));
v5 = (UnkEnum_0202F510_07);
} else {
v4 = ((((0x4 | 0x1) | 0x2) | 0x8) | 0x80);
v2 = sub_02051D8C(11, ((((0x4 | 0x1) | 0x2) | 0x8) | 0x80));
v2 = FieldBattleDTO_New(11, ((((0x4 | 0x1) | 0x2) | 0x8) | 0x80));
v2->trainerIDs[1] = 1;
v2->trainerIDs[3] = 2;
@@ -841,7 +841,7 @@ void sub_020516F4(FieldTask *taskMan, int param1, int param2, int param3)
v5 = (UnkEnum_0202F510_14);
}
sub_02052348(v2, fieldSystem, param2);
FieldBattleDTO_InitWithNormalizedMonLevels(v2, fieldSystem, param2);
sub_0202F1F8(fieldSystem->saveData, 11, &v3);
v2->unk_18A = v5;
@@ -881,9 +881,9 @@ void sub_020517E8(FieldSystem *fieldSystem, const u8 *param1, int param2)
FieldBattleDTO *v1;
int v2;
v1 = sub_02051D8C(11, param2);
v1 = FieldBattleDTO_New(11, param2);
sub_020526CC(v1, fieldSystem, param1);
FieldBattleDTO_InitWithPartyOrderFromSave(v1, fieldSystem, param1);
sub_0202F1F8(fieldSystem->saveData, 11, &v2);
v1->unk_18A = sub_020516C8(fieldSystem->unk_B0, param2);
@@ -898,9 +898,9 @@ void sub_0205184C(FieldSystem *fieldSystem, const Party *param1, int param2)
FieldBattleDTO *v1;
int v2;
v1 = sub_02051D8C(11, param2);
v1 = FieldBattleDTO_New(11, param2);
sub_020524E4(v1, fieldSystem, param1, NULL);
FieldBattleDTO_InitWithPartyOrder(v1, fieldSystem, param1, NULL);
sub_0202F1F8(fieldSystem->saveData, 11, &v2);
v1->unk_18A = sub_020516C8(fieldSystem->unk_B0, param2);
@@ -1011,8 +1011,8 @@ void sub_02051ABC(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL p
fieldSystem = FieldTask_GetFieldSystem(taskMan);
RadarChain_Clear(fieldSystem->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, fieldSystem);
v1 = FieldBattleDTO_New(11, (0x0 | 0x0));
FieldBattleDTO_Init(v1, fieldSystem);
ov6_022420D4(fieldSystem, param1, param2, v1);

View File

@@ -4,8 +4,13 @@
#include <string.h>
#include "constants/battle.h"
#include "constants/heap.h"
#include "constants/narc.h"
#include "constants/overworld_weather.h"
#include "constants/pokemon.h"
#include "constants/string.h"
#include "consts/battle.h"
#include "consts/items.h"
#include "consts/species.h"
#include "struct_decls/pokedexdata_decl.h"
@@ -32,6 +37,7 @@
#include "map_header.h"
#include "message.h"
#include "party.h"
#include "player_avatar.h"
#include "pokemon.h"
#include "poketch_data.h"
#include "rtc.h"
@@ -57,485 +63,464 @@
#include "vars_flags.h"
#include "res/text/gmm/message_bank_location_names.h"
#include "res/text/pl_msg.naix"
static void sub_0205281C(FieldBattleDTO *param0, const FieldSystem *fieldSystem);
void sub_02052894(FieldBattleDTO *param0);
static int CalcTerrain(const FieldSystem *fieldSystem, enum BattleBackground background);
static void SetBackgroundAndTerrain(FieldBattleDTO *dto, const FieldSystem *fieldSystem);
FieldBattleDTO *sub_02051D8C(int param0, u32 param1)
FieldBattleDTO *FieldBattleDTO_New(enum HeapId heapID, u32 battleType)
{
int v0;
FieldBattleDTO *v1;
int i;
FieldBattleDTO *dto = Heap_AllocFromHeap(heapID, sizeof(FieldBattleDTO));
MI_CpuClear8(dto, sizeof(FieldBattleDTO));
v1 = Heap_AllocFromHeap(param0, sizeof(FieldBattleDTO));
MI_CpuClear8(v1, sizeof(FieldBattleDTO));
dto->battleType = battleType;
dto->battleStatusMask = 0;
dto->resultMask = 0;
v1->battleType = param1;
v1->battleStatusMask = 0;
v1->resultMask = 0;
for (v0 = 0; v0 < 4; v0++) {
v1->trainerIDs[v0] = 0;
MI_CpuClear32(&v1->trainerData[v0], sizeof(TrainerData));
for (i = 0; i < MAX_BATTLERS; i++) {
dto->trainerIDs[i] = 0;
MI_CpuClear32(&dto->trainerData[i], sizeof(TrainerData));
}
v1->background = 0;
v1->terrain = TERRAIN_MAX;
v1->mapLabelTextID = pl_msg_00000433_00000;
v1->timeOfDay = TOD_MORNING;
v1->mapEvolutionMethod = 0;
v1->visitedContestHall = 1;
v1->metBebe = 1;
v1->fieldWeather = 0;
dto->background = BACKGROUND_PLAIN;
dto->terrain = TERRAIN_MAX;
dto->mapLabelTextID = pl_msg_00000433_00000;
dto->timeOfDay = TOD_MORNING;
dto->mapEvolutionMethod = 0;
dto->visitedContestHall = TRUE;
dto->metBebe = TRUE;
dto->fieldWeather = OVERWORLD_WEATHER_CLEAR;
for (v0 = 0; v0 < 4; v0++) {
v1->parties[v0] = Party_New(param0);
for (i = 0; i < MAX_BATTLERS; i++) {
dto->parties[i] = Party_New(heapID);
}
for (v0 = 0; v0 < 4; v0++) {
v1->trainerInfo[v0] = TrainerInfo_New(param0);
for (i = 0; i < MAX_BATTLERS; i++) {
dto->trainerInfo[i] = TrainerInfo_New(heapID);
}
for (v0 = 0; v0 < 4; v0++) {
v1->chatotCries[v0] = AllocateAndInitializeChatotCryData(param0);
for (i = 0; i < MAX_BATTLERS; i++) {
dto->chatotCries[i] = AllocateAndInitializeChatotCryData(heapID);
}
v1->bag = Bag_New(param0);
v1->pokedex = sub_02026324(param0);
v1->options = Options_New(param0);
v1->unk_10C = sub_0206D140(param0);
v1->bagCursor = NULL;
v1->subscreenCursorOn = NULL;
v1->countSafariBalls = 0;
v1->unk_104 = NULL;
v1->records = NULL;
v1->journal = NULL;
v1->rulesetMask = 0;
dto->bag = Bag_New(heapID);
dto->pokedex = sub_02026324(heapID);
dto->options = Options_New(heapID);
dto->unk_10C = sub_0206D140(heapID);
dto->bagCursor = NULL;
dto->subscreenCursorOn = NULL;
dto->countSafariBalls = 0;
dto->unk_104 = NULL;
dto->records = NULL;
dto->journal = NULL;
dto->rulesetMask = 0;
{
RTCDate v2;
RTCTime v3;
RTCDate date;
RTCTime time;
GetCurrentDateTime(&date, &time);
dto->seed = date.year
+ date.month * 0x100 * date.day * 0x10000
+ time.hour * 0x10000
+ (time.minute + time.second) * 0x1000000
+ gCoreSys.vblankCounter;
GetCurrentDateTime(&v2, &v3);
v1->seed = v2.year + v2.month * 0x100 * v2.day * 0x10000 + v3.hour * 0x10000 + (v3.minute + v3.second) * 0x1000000 + gCoreSys.vblankCounter;
}
if (CommSys_IsInitialized() == 1) {
for (v0 = 0; v0 < CommSys_ConnectedCount(); v0++) {
v1->unk_178[v0] = sub_020362F4(v0);
if (CommSys_IsInitialized() == TRUE) {
for (i = 0; i < CommSys_ConnectedCount(); i++) {
dto->unk_178[i] = sub_020362F4(i);
}
v1->networkID = CommSys_CurNetId();
dto->networkID = CommSys_CurNetId();
}
MI_CpuClear8(&(v1->battleRecords), sizeof(BattleRecords));
return v1;
MI_CpuClear8(&(dto->battleRecords), sizeof(BattleRecords));
return dto;
}
FieldBattleDTO *sub_02051F24(int param0, int param1)
FieldBattleDTO *FieldBattleDTO_NewSafari(enum HeapId heapID, int countSafariBalls)
{
FieldBattleDTO *v0;
v0 = sub_02051D8C(param0, 0x20);
v0->countSafariBalls = param1;
return v0;
FieldBattleDTO *dto = FieldBattleDTO_New(heapID, BATTLE_TYPE_SAFARI);
dto->countSafariBalls = countSafariBalls;
return dto;
}
FieldBattleDTO *sub_02051F38(int param0, int param1)
FieldBattleDTO *FieldBattleDTO_NewPalPark(enum HeapId heapID, int countParkBalls)
{
FieldBattleDTO *v0;
v0 = sub_02051D8C(param0, 0x200);
v0->countSafariBalls = param1;
return v0;
FieldBattleDTO *dto = FieldBattleDTO_New(heapID, BATTLE_TYPE_PAL_PARK);
dto->countSafariBalls = countParkBalls;
return dto;
}
FieldBattleDTO *sub_02051F4C(int param0, const FieldSystem *fieldSystem)
FieldBattleDTO *FieldBattleDTO_NewCatchingTutorial(enum HeapId heapID, const FieldSystem *fieldSystem)
{
TrainerInfo *v0 = SaveData_GetTrainerInfo(fieldSystem->saveData);
Options *v1 = SaveData_Options(fieldSystem->saveData);
MessageLoader *v2;
Strbuf *v3;
FieldBattleDTO *v4;
Pokemon *v5;
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(fieldSystem->saveData);
Options *options = SaveData_Options(fieldSystem->saveData);
MessageLoader *msgLoader;
Strbuf *strbuf;
FieldBattleDTO *dto;
Pokemon *mon;
v4 = sub_02051D8C(param0, 0x400);
v2 = MessageLoader_Init(1, 26, 553, param0);
v3 = Strbuf_Init(8, param0);
dto = FieldBattleDTO_New(heapID, BATTLE_TYPE_CATCH_TUTORIAL);
msgLoader = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, message_bank_counterpart_names, heapID);
strbuf = Strbuf_Init(TRAINER_NAME_LEN + 1, heapID);
MessageLoader_GetStrbuf(v2, TrainerInfo_Gender(v0) ^ 1, v3);
TrainerInfo_SetName(v4->trainerInfo[0], Strbuf_GetData(v3));
Strbuf_Free(v3);
MessageLoader_Free(v2);
TrainerInfo_SetGender(v4->trainerInfo[0], TrainerInfo_Gender(v0) ^ 1);
sub_0205281C(v4, fieldSystem);
Options_Copy(v1, v4->options);
MessageLoader_GetStrbuf(msgLoader, TrainerInfo_Gender(trainerInfo) ^ 1, strbuf);
TrainerInfo_SetName(dto->trainerInfo[BATTLER_PLAYER_SLOT_1], Strbuf_GetData(strbuf));
Strbuf_Free(strbuf);
MessageLoader_Free(msgLoader);
v4->timeOfDay = sub_02055BA8(fieldSystem);
Bag_TryAddItem(v4->bag, 4, 20, param0);
v5 = Pokemon_New(param0);
TrainerInfo_SetGender(dto->trainerInfo[BATTLER_PLAYER_SLOT_1], TrainerInfo_Gender(trainerInfo) ^ 1);
SetBackgroundAndTerrain(dto, fieldSystem);
Options_Copy(options, dto->options);
dto->timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
Bag_TryAddItem(dto->bag, ITEM_POKE_BALL, 20, heapID);
Pokemon_InitWith(v5, sub_0206B08C(SaveData_GetVarsFlags(fieldSystem->saveData)), 5, 32, FALSE, 0, OTID_NOT_SHINY, 0);
Party_AddPokemon(v4->parties[0], v5);
Pokemon_InitWith(v5, SPECIES_BIDOOF, 2, 32, FALSE, 0, OTID_NOT_SHINY, 0);
Party_AddPokemon(v4->parties[1], v5);
Heap_FreeToHeap(v5);
mon = Pokemon_New(heapID);
Pokemon_InitWith(mon, sub_0206B08C(SaveData_GetVarsFlags(fieldSystem->saveData)), 5, 32, FALSE, 0, OTID_NOT_SHINY, 0);
Party_AddPokemon(dto->parties[BATTLER_PLAYER_SLOT_1], mon);
Pokemon_InitWith(mon, SPECIES_BIDOOF, 2, 32, FALSE, 0, OTID_NOT_SHINY, 0);
Party_AddPokemon(dto->parties[BATTLER_ENEMY_SLOT_1], mon);
Heap_FreeToHeap(mon);
v4->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
v4->bagCursor = fieldSystem->unk_98;
v4->subscreenCursorOn = NULL;
v4->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
v4->journal = fieldSystem->journal;
v4->mapHeaderID = fieldSystem->location->mapId;
dto->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
dto->bagCursor = fieldSystem->unk_98;
dto->subscreenCursorOn = NULL;
dto->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
dto->journal = fieldSystem->journal;
dto->mapHeaderID = fieldSystem->location->mapId;
sub_02052894(v4);
FieldBattleDTO_CopyPlayerInfoToTrainerData(dto);
return v4;
return dto;
}
void sub_020520A4(FieldBattleDTO *param0)
void FieldBattleDTO_Free(FieldBattleDTO *dto)
{
int v0;
for (v0 = 0; v0 < 4; v0++) {
GF_ASSERT(param0->parties[v0] != NULL);
Heap_FreeToHeap(param0->parties[v0]);
int i;
for (i = 0; i < 4; i++) {
GF_ASSERT(dto->parties[i] != NULL);
Heap_FreeToHeap(dto->parties[i]);
}
for (v0 = 0; v0 < 4; v0++) {
GF_ASSERT(param0->trainerInfo[v0] != NULL);
Heap_FreeToHeap(param0->trainerInfo[v0]);
for (i = 0; i < 4; i++) {
GF_ASSERT(dto->trainerInfo[i] != NULL);
Heap_FreeToHeap(dto->trainerInfo[i]);
}
for (v0 = 0; v0 < 4; v0++) {
GF_ASSERT(param0->chatotCries[v0] != NULL);
Heap_FreeToHeap(param0->chatotCries[v0]);
for (i = 0; i < 4; i++) {
GF_ASSERT(dto->chatotCries[i] != NULL);
Heap_FreeToHeap(dto->chatotCries[i]);
}
Heap_FreeToHeap(param0->bag);
Heap_FreeToHeap(param0->pokedex);
Heap_FreeToHeap(param0->options);
sub_0206D158(param0->unk_10C);
Heap_FreeToHeap(param0);
Heap_FreeToHeap(dto->bag);
Heap_FreeToHeap(dto->pokedex);
Heap_FreeToHeap(dto->options);
sub_0206D158(dto->unk_10C);
Heap_FreeToHeap(dto);
}
void sub_0205213C(FieldBattleDTO *param0, Pokemon *param1, int param2)
void FieldBattleDTO_AddPokemonToBattler(FieldBattleDTO *dto, Pokemon *src, int battler)
{
int v0;
GF_ASSERT(param2 < 4);
v0 = Party_AddPokemon(param0->parties[param2], param1);
GF_ASSERT(v0);
GF_ASSERT(battler < MAX_BATTLERS);
BOOL success = Party_AddPokemon(dto->parties[battler], src);
GF_ASSERT(success);
}
void sub_02052164(FieldBattleDTO *param0, const Party *param1, int param2)
void FieldBattleDTO_CopyPartyToBattler(FieldBattleDTO *dto, const Party *src, int battler)
{
GF_ASSERT(param2 < 4);
Party_cpy(param1, param0->parties[param2]);
GF_ASSERT(battler < MAX_BATTLERS);
Party_cpy(src, dto->parties[battler]);
}
void sub_02052184(FieldBattleDTO *param0, const TrainerInfo *param1, int param2)
void FieldBattleDTO_CopyTrainerInfoToBattler(FieldBattleDTO *dto, const TrainerInfo *src, int battler)
{
GF_ASSERT(param2 < 4);
TrainerInfo_Copy(param1, param0->trainerInfo[param2]);
GF_ASSERT(battler < MAX_BATTLERS);
TrainerInfo_Copy(src, dto->trainerInfo[battler]);
}
void sub_020521A4(FieldBattleDTO *param0, const ChatotCry *param1, int param2)
void FieldBattleDTO_CopyChatotCryToBattler(FieldBattleDTO *dto, const ChatotCry *src, int battler)
{
CopyChatotCryData(param0->chatotCries[param2], param1);
CopyChatotCryData(dto->chatotCries[battler], src);
}
void sub_020521B8(FieldBattleDTO *param0, const FieldSystem *fieldSystem, SaveData *param2, int param3, Journal *param4, BagCursor *param5, u8 *param6)
void FieldBattleDTO_InitFromGameState(FieldBattleDTO *dto, const FieldSystem *fieldSystem, SaveData *save, enum MapHeader mapHeaderID, Journal *journal, BagCursor *bagCursor, u8 *subscreenCursorOn)
{
TrainerInfo *v0 = SaveData_GetTrainerInfo(param2);
Party *v1 = Party_GetFromSavedata(param2);
Bag *v2 = SaveData_GetBag(param2);
PokedexData *v3 = SaveData_Pokedex(param2);
ChatotCry *v4 = GetChatotCryDataFromSave(param2);
Options *v5 = SaveData_Options(param2);
FieldOverworldState *v6 = SaveData_GetFieldOverworldState(param2);
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(save);
Party *party = Party_GetFromSavedata(save);
Bag *bag = SaveData_GetBag(save);
PokedexData *pokedex = SaveData_Pokedex(save);
ChatotCry *chatotCry = GetChatotCryDataFromSave(save);
Options *options = SaveData_Options(save);
FieldOverworldState *fieldOverworldState = SaveData_GetFieldOverworldState(save);
if (fieldSystem != NULL) {
sub_0205281C(param0, fieldSystem);
param0->timeOfDay = sub_02055BA8(fieldSystem);
SetBackgroundAndTerrain(dto, fieldSystem);
dto->timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
} else {
param0->background = MapHeader_GetBattleBG(param3);
param0->terrain = TERRAIN_BUILDING;
{
GameTime *v7 = SaveData_GetGameTime(param2);
dto->background = MapHeader_GetBattleBG(mapHeaderID);
dto->terrain = TERRAIN_BUILDING;
param0->timeOfDay = TimeOfDayForHour(v7->time.hour);
}
GameTime *gameTime = SaveData_GetGameTime(save);
dto->timeOfDay = TimeOfDayForHour(gameTime->time.hour);
}
sub_02052184(param0, v0, 0);
sub_02052164(param0, v1, 0);
Bag_Copy(v2, param0->bag);
sub_02026338(v3, param0->pokedex);
Options_Copy(v5, param0->options);
sub_020521A4(param0, v4, 0);
FieldBattleDTO_CopyTrainerInfoToBattler(dto, trainerInfo, BATTLER_PLAYER_SLOT_1);
FieldBattleDTO_CopyPartyToBattler(dto, party, BATTLER_PLAYER_SLOT_1);
Bag_Copy(bag, dto->bag);
Pokedex_Copy(pokedex, dto->pokedex);
Options_Copy(options, dto->options);
FieldBattleDTO_CopyChatotCryToBattler(dto, chatotCry, BATTLER_PLAYER_SLOT_1);
param0->pcBoxes = SaveData_PCBoxes(param2);
param0->mapLabelTextID = MapHeader_GetMapLabelTextID(param3);
param0->mapEvolutionMethod = MapHeader_GetMapEvolutionMethod(param3);
param0->visitedContestHall = PokemonSummaryScreen_ShowContestData(param2);
param0->metBebe = SystemFlag_CheckMetBebe(SaveData_GetVarsFlags(param2));
param0->fieldWeather = FieldOverworldState_GetWeather(v6);
param0->bagCursor = param5;
param0->subscreenCursorOn = param6;
param0->poketchData = SaveData_PoketchData(param2);
param0->unk_104 = sub_0202C878(param2);
param0->records = SaveData_GetGameRecordsPtr(param2);
param0->journal = param4;
param0->unk_124 = sub_02027F8C(param2);
param0->mapHeaderID = param3;
param0->saveData = param2;
dto->pcBoxes = SaveData_PCBoxes(save);
dto->mapLabelTextID = MapHeader_GetMapLabelTextID(mapHeaderID);
dto->mapEvolutionMethod = MapHeader_GetMapEvolutionMethod(mapHeaderID);
dto->visitedContestHall = PokemonSummaryScreen_ShowContestData(save);
dto->metBebe = SystemFlag_CheckMetBebe(SaveData_GetVarsFlags(save));
dto->fieldWeather = FieldOverworldState_GetWeather(fieldOverworldState);
dto->bagCursor = bagCursor;
dto->subscreenCursorOn = subscreenCursorOn;
dto->poketchData = SaveData_PoketchData(save);
dto->unk_104 = sub_0202C878(save);
dto->records = SaveData_GetGameRecordsPtr(save);
dto->journal = journal;
dto->unk_124 = sub_02027F8C(save);
dto->mapHeaderID = mapHeaderID;
dto->saveData = save;
}
void sub_02052314(FieldBattleDTO *battleParams, const FieldSystem *fieldSystem)
void FieldBattleDTO_Init(FieldBattleDTO *dto, const FieldSystem *fieldSystem)
{
sub_020521B8(battleParams, fieldSystem, fieldSystem->saveData, fieldSystem->location->mapId, fieldSystem->journal, fieldSystem->unk_98, fieldSystem->battleSubscreenCursorOn);
sub_02052894(battleParams);
FieldBattleDTO_InitFromGameState(dto, fieldSystem, fieldSystem->saveData, fieldSystem->location->mapId, fieldSystem->journal, fieldSystem->unk_98, fieldSystem->battleSubscreenCursorOn);
FieldBattleDTO_CopyPlayerInfoToTrainerData(dto);
}
void sub_02052348(FieldBattleDTO *param0, const FieldSystem *fieldSystem, int param2)
void FieldBattleDTO_InitWithNormalizedMonLevels(FieldBattleDTO *dto, const FieldSystem *fieldSystem, int level)
{
int v0;
u32 v1;
TrainerInfo *v2 = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *v3 = Party_GetFromSavedata(fieldSystem->saveData);
Bag *v4 = SaveData_GetBag(fieldSystem->saveData);
PokedexData *v5 = SaveData_Pokedex(fieldSystem->saveData);
ChatotCry *v6 = GetChatotCryDataFromSave(fieldSystem->saveData);
Options *v7 = SaveData_Options(fieldSystem->saveData);
Pokemon *v8;
int i;
u32 levelBaseExp;
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *party = Party_GetFromSavedata(fieldSystem->saveData);
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
PokedexData *pokedex = SaveData_Pokedex(fieldSystem->saveData);
ChatotCry *chatotCry = GetChatotCryDataFromSave(fieldSystem->saveData);
Options *options = SaveData_Options(fieldSystem->saveData);
param0->background = 6;
param0->terrain = TERRAIN_BUILDING;
dto->background = BACKGROUND_INDOORS_1;
dto->terrain = TERRAIN_BUILDING;
sub_02052184(param0, v2, 0);
v8 = Pokemon_New(11);
Party_InitWithCapacity(param0->parties[0], Party_GetCurrentCount(v3));
FieldBattleDTO_CopyTrainerInfoToBattler(dto, trainerInfo, BATTLER_PLAYER_SLOT_1);
for (v0 = 0; v0 < Party_GetCurrentCount(v3); v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(v3, v0), v8);
Pokemon *mon = Pokemon_New(HEAP_ID_FIELDMAP);
Party_InitWithCapacity(dto->parties[BATTLER_PLAYER_SLOT_1], Party_GetCurrentCount(party));
for (i = 0; i < Party_GetCurrentCount(party); i++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(party, i), mon);
if ((Pokemon_GetValue(v8, MON_DATA_LEVEL, NULL) != param2) && (param2 != 0)) {
v1 = Pokemon_GetSpeciesBaseExpAt(Pokemon_GetValue(v8, MON_DATA_SPECIES, NULL), param2);
Pokemon_SetValue(v8, MON_DATA_EXP, &v1);
Pokemon_CalcLevelAndStats(v8);
if (Pokemon_GetValue(mon, MON_DATA_LEVEL, NULL) != level && level != 0) {
levelBaseExp = Pokemon_GetSpeciesBaseExpAt(Pokemon_GetValue(mon, MON_DATA_SPECIES, NULL), level);
Pokemon_SetValue(mon, MON_DATA_EXP, &levelBaseExp);
Pokemon_CalcLevelAndStats(mon);
}
sub_0205213C(param0, v8, 0);
FieldBattleDTO_AddPokemonToBattler(dto, mon, BATTLER_PLAYER_SLOT_1);
}
Heap_FreeToHeap(mon);
Heap_FreeToHeap(v8);
Bag_Copy(v4, param0->bag);
sub_02026338(v5, param0->pokedex);
Options_Copy(v7, param0->options);
sub_020521A4(param0, v6, 0);
Bag_Copy(bag, dto->bag);
Pokedex_Copy(pokedex, dto->pokedex);
Options_Copy(options, dto->options);
FieldBattleDTO_CopyChatotCryToBattler(dto, chatotCry, BATTLER_PLAYER_SLOT_1);
param0->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
param0->timeOfDay = sub_02055BA8(fieldSystem);
param0->bagCursor = fieldSystem->unk_98;
param0->subscreenCursorOn = fieldSystem->battleSubscreenCursorOn;
param0->poketchData = SaveData_PoketchData(fieldSystem->saveData);
param0->unk_104 = sub_0202C878(fieldSystem->saveData);
param0->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
param0->journal = fieldSystem->journal;
param0->unk_124 = sub_02027F8C(fieldSystem->saveData);
param0->mapHeaderID = fieldSystem->location->mapId;
param0->saveData = fieldSystem->saveData;
dto->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
dto->timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
dto->bagCursor = fieldSystem->unk_98;
dto->subscreenCursorOn = fieldSystem->battleSubscreenCursorOn;
dto->poketchData = SaveData_PoketchData(fieldSystem->saveData);
dto->unk_104 = sub_0202C878(fieldSystem->saveData);
dto->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
dto->journal = fieldSystem->journal;
dto->unk_124 = sub_02027F8C(fieldSystem->saveData);
dto->mapHeaderID = fieldSystem->location->mapId;
dto->saveData = fieldSystem->saveData;
sub_02052894(param0);
FieldBattleDTO_CopyPlayerInfoToTrainerData(dto);
}
void sub_020524E4(FieldBattleDTO *param0, const FieldSystem *fieldSystem, const Party *param2, const u8 *param3)
void FieldBattleDTO_InitWithPartyOrder(FieldBattleDTO *dto, const FieldSystem *fieldSystem, const Party *party, const u8 *partyOrder)
{
TrainerInfo *v0 = SaveData_GetTrainerInfo(fieldSystem->saveData);
Bag *v1 = SaveData_GetBag(fieldSystem->saveData);
PokedexData *v2 = SaveData_Pokedex(fieldSystem->saveData);
ChatotCry *v3 = GetChatotCryDataFromSave(fieldSystem->saveData);
Options *v4 = SaveData_Options(fieldSystem->saveData);
const BattleRegulation *v5 = fieldSystem->unk_B0;
int v6, v7, v8;
Pokemon *v9;
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(fieldSystem->saveData);
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
PokedexData *pokedex = SaveData_Pokedex(fieldSystem->saveData);
ChatotCry *chatotCry = GetChatotCryDataFromSave(fieldSystem->saveData);
Options *options = SaveData_Options(fieldSystem->saveData);
const BattleRegulation *regulation = fieldSystem->unk_B0;
int i;
Pokemon *mon;
param0->background = 6;
param0->terrain = TERRAIN_BUILDING;
dto->background = BACKGROUND_INDOORS_1;
dto->terrain = TERRAIN_BUILDING;
sub_02052184(param0, v0, 0);
FieldBattleDTO_CopyTrainerInfoToBattler(dto, trainerInfo, BATTLER_PLAYER_SLOT_1);
if (param3 == NULL) {
sub_02052164(param0, param2, 0);
if (partyOrder == NULL) {
FieldBattleDTO_CopyPartyToBattler(dto, party, BATTLER_PLAYER_SLOT_1);
} else {
int v10;
v10 = 0;
for (v8 = 0; v8 < 6; v8++) {
if (param3[v8] != 0) {
v10++;
int numToCopy = 0;
for (i = 0; i < MAX_PARTY_SIZE; i++) {
if (partyOrder[i] != 0) {
numToCopy++;
}
}
if (v10 == 0) {
sub_02052164(param0, param2, 0);
if (numToCopy == 0) {
FieldBattleDTO_CopyPartyToBattler(dto, party, BATTLER_PLAYER_SLOT_1);
} else {
v9 = Pokemon_New(11);
Party_InitWithCapacity(param0->parties[0], v10);
for (v8 = 0; v8 < v10; v8++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param2, param3[v8] - 1), v9);
sub_0205213C(param0, v9, 0);
mon = Pokemon_New(HEAP_ID_FIELDMAP);
Party_InitWithCapacity(dto->parties[BATTLER_PLAYER_SLOT_1], numToCopy);
for (i = 0; i < numToCopy; i++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(party, partyOrder[i] - 1), mon);
FieldBattleDTO_AddPokemonToBattler(dto, mon, BATTLER_PLAYER_SLOT_1);
}
Heap_FreeToHeap(v9);
Heap_FreeToHeap(mon);
}
}
if (v5) {
if (sub_02026074(v5, 12)) {
param0->rulesetMask = 1;
if (regulation) {
if (sub_02026074(regulation, 12)) {
dto->rulesetMask = 1;
}
}
Bag_Copy(v1, param0->bag);
sub_02026338(v2, param0->pokedex);
Options_Copy(v4, param0->options);
sub_020521A4(param0, v3, 0);
Bag_Copy(bag, dto->bag);
Pokedex_Copy(pokedex, dto->pokedex);
Options_Copy(options, dto->options);
FieldBattleDTO_CopyChatotCryToBattler(dto, chatotCry, BATTLER_PLAYER_SLOT_1);
param0->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
param0->timeOfDay = sub_02055BA8(fieldSystem);
param0->bagCursor = fieldSystem->unk_98;
param0->subscreenCursorOn = fieldSystem->battleSubscreenCursorOn;
param0->unk_104 = sub_0202C878(fieldSystem->saveData);
param0->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
param0->journal = fieldSystem->journal;
param0->mapHeaderID = fieldSystem->location->mapId;
param0->unk_124 = sub_02027F8C(fieldSystem->saveData);
param0->saveData = fieldSystem->saveData;
dto->pcBoxes = SaveData_PCBoxes(fieldSystem->saveData);
dto->timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
dto->bagCursor = fieldSystem->unk_98;
dto->subscreenCursorOn = fieldSystem->battleSubscreenCursorOn;
dto->unk_104 = sub_0202C878(fieldSystem->saveData);
dto->records = SaveData_GetGameRecordsPtr(fieldSystem->saveData);
dto->journal = fieldSystem->journal;
dto->mapHeaderID = fieldSystem->location->mapId;
dto->unk_124 = sub_02027F8C(fieldSystem->saveData);
dto->saveData = fieldSystem->saveData;
if (sub_020326C4(sub_0203895C())) {
int v11 = TrainerInfo_Appearance(v0);
int v12 = TrainerInfo_Gender(v0);
int unionAppearance = TrainerInfo_Appearance(trainerInfo);
int unionGender = TrainerInfo_Gender(trainerInfo);
param0->trainerData[0].class = sub_0205CA14(v12, v11, 1);
CharCode_Copy(&param0->trainerData[0].name[0], TrainerInfo_Name(param0->trainerInfo[0]));
param0->trainerData[2] = param0->trainerData[0];
dto->trainerData[BATTLER_PLAYER_SLOT_1].class = sub_0205CA14(unionGender, unionAppearance, 1);
CharCode_Copy(dto->trainerData[BATTLER_PLAYER_SLOT_1].name, TrainerInfo_Name(dto->trainerInfo[BATTLER_PLAYER_SLOT_1]));
dto->trainerData[BATTLER_PLAYER_SLOT_2] = dto->trainerData[BATTLER_PLAYER_SLOT_1];
} else {
sub_02052894(param0);
FieldBattleDTO_CopyPlayerInfoToTrainerData(dto);
}
}
void sub_020526CC(FieldBattleDTO *param0, const FieldSystem *fieldSystem, const u8 *param2)
void FieldBattleDTO_InitWithPartyOrderFromSave(FieldBattleDTO *dto, const FieldSystem *fieldSystem, const u8 *partyOrder)
{
sub_020524E4(param0, fieldSystem, Party_GetFromSavedata(fieldSystem->saveData), param2);
FieldBattleDTO_InitWithPartyOrder(dto, fieldSystem, Party_GetFromSavedata(fieldSystem->saveData), partyOrder);
}
void sub_020526E8(const FieldBattleDTO *param0, FieldSystem *fieldSystem)
void FieldBattleDTO_UpdateFieldSystem(const FieldBattleDTO *dto, FieldSystem *fieldSystem)
{
TrainerInfo *v0 = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *v1 = Party_GetFromSavedata(fieldSystem->saveData);
Bag *v2 = SaveData_GetBag(fieldSystem->saveData);
PokedexData *v3 = SaveData_Pokedex(fieldSystem->saveData);
u16 *v4 = sub_0203A784(SaveData_GetFieldOverworldState(fieldSystem->saveData));
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *party = Party_GetFromSavedata(fieldSystem->saveData);
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
PokedexData *pokedex = SaveData_Pokedex(fieldSystem->saveData);
u16 *fieldSysSafariBalls = sub_0203A784(SaveData_GetFieldOverworldState(fieldSystem->saveData));
TrainerInfo_Copy(param0->trainerInfo[0], v0);
Party_cpy(param0->parties[0], v1);
Bag_Copy(param0->bag, v2);
sub_02026338(param0->pokedex, v3);
TrainerInfo_Copy(dto->trainerInfo[BATTLER_PLAYER_SLOT_1], trainerInfo);
Party_cpy(dto->parties[BATTLER_PLAYER_SLOT_1], party);
Bag_Copy(dto->bag, bag);
Pokedex_Copy(dto->pokedex, pokedex);
*v4 = param0->countSafariBalls;
*fieldSysSafariBalls = dto->countSafariBalls;
}
void sub_02052754(const FieldBattleDTO *param0, FieldSystem *fieldSystem)
void FieldBattleDTO_UpdatePokedex(const FieldBattleDTO *dto, FieldSystem *fieldSystem)
{
TrainerInfo *v0 = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *v1 = Party_GetFromSavedata(fieldSystem->saveData);
Bag *v2 = SaveData_GetBag(fieldSystem->saveData);
PokedexData *v3 = SaveData_Pokedex(fieldSystem->saveData);
TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(fieldSystem->saveData);
Party *party = Party_GetFromSavedata(fieldSystem->saveData);
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
PokedexData *pokedex = SaveData_Pokedex(fieldSystem->saveData);
sub_02026338(param0->pokedex, v3);
Pokedex_Copy(dto->pokedex, pokedex);
}
static int sub_02052780(const FieldSystem *fieldSystem, int param1)
{
u8 v0 = sub_02054F94(fieldSystem, fieldSystem->location->x, fieldSystem->location->z);
static const v1[] = {
0,
7,
9,
2,
4,
6,
9,
9,
9,
5,
5,
5,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22
};
static const enum Terrain sTerrainForBackground[] = {
[BACKGROUND_PLAIN] = TERRAIN_PLAIN,
[BACKGROUND_WATER] = TERRAIN_WATER,
[BACKGROUND_CITY] = TERRAIN_BUILDING,
[BACKGROUND_FOREST] = TERRAIN_GRASS,
[BACKGROUND_MOUNTAIN] = TERRAIN_MOUNTAIN,
[BACKGROUND_SNOW] = TERRAIN_SNOW,
[BACKGROUND_INDOORS_1] = TERRAIN_BUILDING,
[BACKGROUND_INDOORS_2] = TERRAIN_BUILDING,
[BACKGROUND_INDOORS_3] = TERRAIN_BUILDING,
[BACKGROUND_CAVE_1] = TERRAIN_CAVE,
[BACKGROUND_CAVE_2] = TERRAIN_CAVE,
[BACKGROUND_CAVE_3] = TERRAIN_CAVE,
[BACKGROUND_AARON] = TERRAIN_AARON,
[BACKGROUND_BERTHA] = TERRAIN_BERTHA,
[BACKGROUND_FLINT] = TERRAIN_FLINT,
[BACKGROUND_LUCIAN] = TERRAIN_LUCIAN,
[BACKGROUND_CYNTHIA] = TERRAIN_CYNTHIA,
[BACKGROUND_DISTORTION_WORLD] = TERRAIN_DISTORTION_WORLD,
[BACKGROUND_BATTLE_TOWER] = TERRAIN_BATTLE_TOWER,
[BACKGROUND_BATTLE_FACTORY] = TERRAIN_BATTLE_FACTORY,
[BACKGROUND_BATTLE_ARCADE] = TERRAIN_BATTLE_ARCADE,
[BACKGROUND_BATTLE_CASTLE] = TERRAIN_BATTLE_CASTLE,
[BACKGROUND_BATTLE_HALL] = TERRAIN_BATTLE_HALL,
};
if (sub_0205DC5C(v0)) {
return 8;
} else if (sub_0205DAC8(v0) || sub_0205DAD4(v0)) {
return 2;
} else if (sub_0205DB6C(v0)) {
return 1;
} else if (sub_0205DD18(v0)) {
return 6;
} else if (sub_0205DCE0(v0) || sub_0205DCFC(v0)) {
return 10;
} else if (sub_0205DDA8(v0)) {
return 5;
static int CalcTerrain(const FieldSystem *fieldSystem, enum BattleBackground background)
{
u8 tileAttr = FieldSystem_GetTileAttributes(fieldSystem, fieldSystem->location->x, fieldSystem->location->z);
if (sub_0205DC5C(tileAttr)) {
return TERRAIN_ICE;
} else if (sub_0205DAC8(tileAttr) || sub_0205DAD4(tileAttr)) {
return TERRAIN_GRASS;
} else if (sub_0205DB6C(tileAttr)) {
return TERRAIN_SAND;
} else if (sub_0205DD18(tileAttr)) {
return TERRAIN_SNOW;
} else if (sub_0205DCE0(tileAttr) || sub_0205DCFC(tileAttr)) {
return TERRAIN_GREAT_MARSH;
} else if (sub_0205DDA8(tileAttr)) {
return TERRAIN_CAVE;
}
if (sub_0205DB58(v0)) {
return 7;
if (sub_0205DB58(tileAttr)) {
return TERRAIN_WATER;
}
if (param1 < NELEMS(v1)) {
return v1[param1];
if (background < NELEMS(sTerrainForBackground)) {
return sTerrainForBackground[background];
}
GF_ASSERT(0);
return 24;
GF_ASSERT(FALSE);
return TERRAIN_MAX;
}
static void sub_0205281C(FieldBattleDTO *param0, const FieldSystem *fieldSystem)
static void SetBackgroundAndTerrain(FieldBattleDTO *dto, const FieldSystem *fieldSystem)
{
PlayerData *v0 = FieldOverworldState_GetPlayerData(SaveData_GetFieldOverworldState(fieldSystem->saveData));
param0->background = MapHeader_GetBattleBG(fieldSystem->location->mapId);
if (v0->unk_04 == 0x2) {
param0->background = 1;
PlayerData *player = FieldOverworldState_GetPlayerData(SaveData_GetFieldOverworldState(fieldSystem->saveData));
dto->background = MapHeader_GetBattleBG(fieldSystem->location->mapId);
if (player->form == PLAYER_AVATAR_SURFING) {
dto->background = BACKGROUND_WATER;
}
param0->terrain = sub_02052780(fieldSystem, param0->background);
dto->terrain = CalcTerrain(fieldSystem, dto->background);
}
void sub_0205285C(FieldBattleDTO *param0)
void FieldBattleDTO_SetWaterTerrain(FieldBattleDTO *dto)
{
param0->terrain = TERRAIN_WATER;
dto->terrain = TERRAIN_WATER;
}
BOOL FieldBattleDTO_PlayerWon(u32 battleResult)
BOOL CheckPlayerWonBattle(u32 battleResult)
{
switch (battleResult) {
case BATTLE_RESULT_LOSE:
@@ -546,7 +531,7 @@ BOOL FieldBattleDTO_PlayerWon(u32 battleResult)
}
}
BOOL FieldBattleDTO_PlayerLost(u32 battleResult)
BOOL CheckPlayerLostBattle(u32 battleResult)
{
switch (battleResult) {
case BATTLE_RESULT_WIN:
@@ -557,7 +542,7 @@ BOOL FieldBattleDTO_PlayerLost(u32 battleResult)
}
}
BOOL FieldBattleDTO_PlayerDidNotCapture(u32 battleResult)
BOOL CheckPlayerDidNotCaptureWildMon(u32 battleResult)
{
switch (battleResult) {
case BATTLE_RESULT_CAPTURED_MON:
@@ -567,9 +552,9 @@ BOOL FieldBattleDTO_PlayerDidNotCapture(u32 battleResult)
}
}
void sub_02052894(FieldBattleDTO *param0)
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *dto)
{
param0->trainerData[0].class = TrainerInfo_Gender(param0->trainerInfo[0]);
CharCode_Copy(&param0->trainerData[0].name[0], TrainerInfo_Name(param0->trainerInfo[0]));
param0->trainerData[2] = param0->trainerData[0];
dto->trainerData[BATTLER_PLAYER_SLOT_1].class = TrainerInfo_Gender(dto->trainerInfo[BATTLER_PLAYER_SLOT_1]);
CharCode_Copy(dto->trainerData[BATTLER_PLAYER_SLOT_1].name, TrainerInfo_Name(dto->trainerInfo[BATTLER_PLAYER_SLOT_1]));
dto->trainerData[BATTLER_PLAYER_SLOT_2] = dto->trainerData[BATTLER_PLAYER_SLOT_1];
}

View File

@@ -339,7 +339,7 @@ static void FieldMapChange_CreateObjects(FieldSystem *fieldSystem)
fieldState = SaveData_GetFieldOverworldState(fieldSystem->saveData);
playerData = FieldOverworldState_GetPlayerData(fieldState);
fieldSystem->playerAvatar = PlayerAvatar_Init(fieldSystem->mapObjMan, fieldSystem->location->x, fieldSystem->location->z, fieldSystem->location->faceDirection, playerData->unk_04, gender, 0, playerData);
fieldSystem->playerAvatar = PlayerAvatar_Init(fieldSystem->mapObjMan, fieldSystem->location->x, fieldSystem->location->z, fieldSystem->location->faceDirection, playerData->form, gender, 0, playerData);
sub_0203A418(fieldSystem);
MapObjectMan_StopAllMovement(fieldSystem->mapObjMan);

View File

@@ -954,7 +954,7 @@ static BOOL FieldMenu_Pokedex(FieldTask *taskMan)
v2->unk_00 = v3;
v2->unk_04 = v4;
v2->timeOfDay = sub_02055BA8(fieldSystem);
v2->timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
v2->fullmoonIslandVisible = VarFlags_HiddenLocationsUnlocked(v5, HL_FULLMOONISLAND);
v2->newmoonIslandVisible = VarFlags_HiddenLocationsUnlocked(v5, HL_NEWMOONISLAND);
v2->springPathVisible = VarFlags_HiddenLocationsUnlocked(v5, HL_SPRINGPATH);

View File

@@ -688,7 +688,7 @@ int sub_02064004(const MapObject *mapObj, int param1, int param2, int param3)
if (sub_02062FDC(mapObj) == 0) {
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
u8 v1 = sub_02062BE8(mapObj);
u8 v2 = sub_02054F94(fieldSystem, param1, param2);
u8 v2 = FieldSystem_GetTileAttributes(fieldSystem, param1, param2);
if (v2 == sub_0205DF98()) {
return 1;
@@ -855,7 +855,7 @@ u32 sub_02064238(MapObject *mapObj, int param1)
int v0 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param1);
int v1 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param1);
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
u8 v3 = sub_02054F94(fieldSystem, v0, v1);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
return v3;
}
@@ -937,10 +937,10 @@ int sub_02064390(MapObject *mapObj)
int z = MapObject_ZPosPrev(mapObj);
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
v0 = sub_02054F94(fieldSystem, v2, z);
v0 = FieldSystem_GetTileAttributes(fieldSystem, v2, z);
v2 = MapObject_GetXPos(mapObj);
z = MapObject_GetZPos(mapObj);
v1 = sub_02054F94(fieldSystem, v2, z);
v1 = FieldSystem_GetTileAttributes(fieldSystem, v2, z);
}
sub_02062BF0(mapObj, v0);

View File

@@ -579,7 +579,7 @@ static BOOL Field_CheckMapTransition(FieldSystem *fieldSystem, const FieldInput
Location nextMap;
if (Field_MapConnection(fieldSystem, playerX, playerZ, &nextMap) && input->transitionDir != DIR_NONE) {
tileBehavior = sub_02054F94(fieldSystem, playerX, playerZ);
tileBehavior = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
if (sub_0205DAEC(tileBehavior)) {
int v6 = input->transitionDir;
@@ -596,7 +596,7 @@ static BOOL Field_CheckMapTransition(FieldSystem *fieldSystem, const FieldInput
Field_GetPlayerPos(fieldSystem, &playerX, &playerZ);
tileBehavior = sub_02054F94(fieldSystem, playerX, playerZ);
tileBehavior = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
if (sub_0205DAF8(tileBehavior) || sub_0205DB28(tileBehavior)) {
if (input->transitionDir != DIR_EAST) {
@@ -715,7 +715,7 @@ static BOOL Field_ProcessStep(FieldSystem *fieldSystem)
int playerX = Player_GetXPos(fieldSystem->playerAvatar);
int playerZ = Player_GetZPos(fieldSystem->playerAvatar);
u8 tileBehavior = sub_02054F94(fieldSystem, playerX, playerZ);
u8 tileBehavior = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
if (Field_CheckCoordEvent(fieldSystem) == TRUE) {
return TRUE;
@@ -982,14 +982,14 @@ static u8 Field_CurrentTileBehavior(const FieldSystem *fieldSystem)
{
int playerX, playerZ;
Field_GetPlayerPos(fieldSystem, &playerX, &playerZ);
return sub_02054F94(fieldSystem, playerX, playerZ);
return FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
}
static u8 Field_NextTileBehavior(const FieldSystem *fieldSystem)
{
int playerX, playerZ;
Field_Step(fieldSystem, &playerX, &playerZ);
return sub_02054F94(fieldSystem, playerX, playerZ);
return FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
}
static BOOL Field_MapConnection(const FieldSystem *fieldSystem, int playerX, int playerZ, Location *nextMap)

View File

@@ -49,7 +49,7 @@ static void ov5_021EE768(UnkStruct_ov5_021D1BEC *param0, FieldSystem *fieldSyste
v4->unk_00 = v1;
v4->unk_04 = v2;
v0 = sub_02054F94(fieldSystem, v1, v2);
v0 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (sub_0205DD84(v0)) {
v3 = 0;

View File

@@ -485,7 +485,7 @@ BOOL ov5_021F0488(FieldTask *param0)
v4 = Player_GetXPos(fieldSystem->playerAvatar);
v5 = Player_GetZPos(fieldSystem->playerAvatar);
v3 = (u8)sub_02054F94(fieldSystem, v4, v5);
v3 = (u8)FieldSystem_GetTileAttributes(fieldSystem, v4, v5);
if (ov6_02242110(fieldSystem, v3)) {
v1->unk_0C = 6;

View File

@@ -130,7 +130,7 @@ BOOL ov5_021F08F8(FieldTask *taskMan)
}
if (v1->unk_10 != NULL) {
sub_020520A4(v1->unk_10);
FieldBattleDTO_Free(v1->unk_10);
}
MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan);

View File

@@ -241,7 +241,7 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem)
int playerX = Player_GetXPos(fieldSystem->playerAvatar);
int playerZ = Player_GetZPos(fieldSystem->playerAvatar);
v4 = sub_02054F94(fieldSystem, playerX, playerZ);
v4 = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
u8 encounterRate = ov6_02241874(fieldSystem, v4, &encounterType);
@@ -296,9 +296,9 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem)
if (ov6_02242440(fieldSystem, &v17)) {
if (!ov6_02242388(sub_0202D93C(v17, 6), &encounterFieldParams)) {
battleParams = sub_02051D8C(11, BATTLE_TYPE_ROAMER);
battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_ROAMER);
sub_02052314(battleParams, fieldSystem);
FieldBattleDTO_Init(battleParams, fieldSystem);
ov6_0224239C(encounterFieldParams.trainerID, v17, battleParams);
RadarChain_Clear(fieldSystem->chain);
sub_02050E10(fieldSystem, battleParams);
@@ -313,10 +313,10 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem)
v9 = SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldSystem->saveData));
ov6_02242328(fieldSystem, v9, &battleParams);
} else {
battleParams = sub_02051D8C(11, BATTLE_TYPE_AI_PARTNER);
battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_AI_PARTNER);
}
sub_02052314(battleParams, fieldSystem);
FieldBattleDTO_Init(battleParams, fieldSystem);
if (encounterType == ENCOUNTER_TYPE_GRASS) {
for (int i = 0; i < MAX_GRASS_ENCOUNTERS; i++) {
@@ -353,7 +353,7 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem)
v7 = ov6_02241790(fieldSystem, firstPartyMon, battleParams, v13, &encounterFieldParams);
} else {
GF_ASSERT(FALSE);
sub_020520A4(battleParams);
FieldBattleDTO_Free(battleParams);
return FALSE;
}
@@ -367,7 +367,7 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem)
GF_ASSERT(GF_heap_c_dummy_return_true(11));
if (!v6) {
sub_020520A4(battleParams);
FieldBattleDTO_Free(battleParams);
}
fieldSystem->unk_78.unk_00 = 0;
@@ -399,8 +399,8 @@ BOOL ov6_0224106C(FieldSystem *fieldSystem, const int fishingRodType, FieldBattl
ov6_02242328(fieldSystem, v2, battleParams);
sub_02052314(*battleParams, fieldSystem);
sub_0205285C(*battleParams);
FieldBattleDTO_Init(*battleParams, fieldSystem);
FieldBattleDTO_SetWaterTerrain(*battleParams);
if (MapHeader_HasFeebasTiles(fieldSystem->location->mapId) && ov6_02247660(fieldSystem)) {
int species;
@@ -458,7 +458,7 @@ BOOL ov6_022411C8(FieldSystem *fieldSystem, FieldTask *param1)
int playerX = Player_GetXPos(fieldSystem->playerAvatar);
int playerZ = Player_GetZPos(fieldSystem->playerAvatar);
u8 v4 = sub_02054F94(fieldSystem, playerX, playerZ);
u8 v4 = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
u8 encounterRate = ov6_02241874(fieldSystem, v4, &encounterType);
@@ -487,9 +487,9 @@ BOOL ov6_022411C8(FieldSystem *fieldSystem, FieldTask *param1)
UnkStruct_0206C638 *v15;
if (ov6_02242440(fieldSystem, &v15)) {
battleParams = sub_02051D8C(11, BATTLE_TYPE_ROAMER);
battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_ROAMER);
sub_02052314(battleParams, fieldSystem);
FieldBattleDTO_Init(battleParams, fieldSystem);
ov6_0224239C(encounterFieldParams.trainerID, v15, battleParams);
RadarChain_Clear(fieldSystem->chain);
sub_02050E78(fieldSystem, param1, battleParams);
@@ -501,10 +501,10 @@ BOOL ov6_022411C8(FieldSystem *fieldSystem, FieldTask *param1)
v7 = SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldSystem->saveData));
ov6_02242328(fieldSystem, v7, &battleParams);
} else {
battleParams = sub_02051D8C(11, BATTLE_TYPE_AI_PARTNER);
battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_AI_PARTNER);
}
sub_02052314(battleParams, fieldSystem);
FieldBattleDTO_Init(battleParams, fieldSystem);
if (encounterType == ENCOUNTER_TYPE_GRASS) {
for (int i = 0; i < MAX_GRASS_ENCOUNTERS; i++) {
@@ -568,7 +568,7 @@ BOOL ov6_022413E4(FieldSystem *fieldSystem, FieldBattleDTO **battleParams)
int playerX = Player_GetXPos(fieldSystem->playerAvatar);
int playerZ = Player_GetZPos(fieldSystem->playerAvatar);
u8 v3 = sub_02054F94(fieldSystem, playerX, playerZ);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, playerX, playerZ);
u8 encounterRate = ov6_02241874(fieldSystem, v3, &encounterType);
@@ -614,9 +614,9 @@ BOOL ov6_022413E4(FieldSystem *fieldSystem, FieldBattleDTO **battleParams)
if (ov6_02242440(fieldSystem, &v16)) {
if (!ov6_02242388(sub_0202D93C(v16, 6), &encounterFieldParams)) {
*battleParams = sub_02051D8C(11, BATTLE_TYPE_ROAMER);
*battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_ROAMER);
sub_02052314(*battleParams, fieldSystem);
FieldBattleDTO_Init(*battleParams, fieldSystem);
ov6_0224239C(encounterFieldParams.trainerID, v16, *battleParams);
RadarChain_Clear(fieldSystem->chain);
return TRUE;
@@ -630,10 +630,10 @@ BOOL ov6_022413E4(FieldSystem *fieldSystem, FieldBattleDTO **battleParams)
v8 = SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldSystem->saveData));
ov6_02242328(fieldSystem, v8, battleParams);
} else {
*battleParams = sub_02051D8C(11, BATTLE_TYPE_AI_PARTNER);
*battleParams = FieldBattleDTO_New(11, BATTLE_TYPE_AI_PARTNER);
}
sub_02052314(*battleParams, fieldSystem);
FieldBattleDTO_Init(*battleParams, fieldSystem);
if (encounterType == ENCOUNTER_TYPE_GRASS) {
for (int i = 0; i < MAX_GRASS_ENCOUNTERS; i++) {
@@ -662,7 +662,7 @@ BOOL ov6_022413E4(FieldSystem *fieldSystem, FieldBattleDTO **battleParams)
}
} else {
GF_ASSERT(FALSE);
sub_020520A4(*battleParams);
FieldBattleDTO_Free(*battleParams);
return FALSE;
}
@@ -674,7 +674,7 @@ BOOL ov6_022413E4(FieldSystem *fieldSystem, FieldBattleDTO **battleParams)
GF_ASSERT(GF_heap_c_dummy_return_true(11));
if (!v5) {
sub_020520A4(*battleParams);
FieldBattleDTO_Free(*battleParams);
} else {
fieldSystem->unk_78.unk_00 = 0;
}
@@ -1387,10 +1387,10 @@ static BOOL ov6_022422D0(const WildEncounters_FieldParams *encounterFieldParams,
static void ov6_02242328(FieldSystem *fieldSystem, const BOOL param1, FieldBattleDTO **param2)
{
if (!param1) {
*param2 = sub_02051D8C(11, (0x0 | 0x0));
*param2 = FieldBattleDTO_New(11, (0x0 | 0x0));
} else {
u16 *v0 = sub_0203A784(SaveData_GetFieldOverworldState(fieldSystem->saveData));
*param2 = sub_02051F24(11, *v0);
*param2 = FieldBattleDTO_NewSafari(11, *v0);
}
}

View File

@@ -132,7 +132,7 @@ void ov6_02246254(FieldSystem *fieldSystem, UnkStruct_ov6_02246204 *param1, int
param3->unk_10 = 1;
param3->unk_14 = SaveData_Options(fieldSystem->saveData);
v4 = sub_02055BA8(fieldSystem);
v4 = FieldSystem_GetTimeOfDay(fieldSystem);
if ((v4 == 0) || (v4 == 1)) {
param3->unk_0C = 0;

View File

@@ -384,7 +384,7 @@ BOOL ov8_02249A40(FieldSystem *fieldSystem, const int param1, const int param2,
{
u8 v0;
v0 = sub_02054F94(fieldSystem, param1, param2);
v0 = FieldSystem_GetTileAttributes(fieldSystem, param1, param2);
if (sub_0205DBFC(v0)) {
if (param3 != 0) {

View File

@@ -134,9 +134,9 @@ BOOL ov104_0223338C(UnkStruct_ov104_0222E930 *param0)
v0 = sub_0209B978(param0->unk_00->unk_00);
v1 = v0->unk_4FC;
v0->unk_14 = FieldBattleDTO_PlayerWon(v1->resultMask);
v0->unk_14 = CheckPlayerWonBattle(v1->resultMask);
sub_020520A4(v1);
FieldBattleDTO_Free(v1);
return 0;
}

View File

@@ -148,8 +148,8 @@ BOOL ov104_02234994(UnkStruct_ov104_0222E930 *param0)
v0 = sub_0209B978(param0->unk_00->unk_00);
v1 = v0->unk_700;
v0->unk_14 = FieldBattleDTO_PlayerWon(v1->resultMask);
sub_020520A4(v1);
v0->unk_14 = CheckPlayerWonBattle(v1->resultMask);
FieldBattleDTO_Free(v1);
return 0;
}

View File

@@ -188,8 +188,8 @@ BOOL ov104_02235A24(UnkStruct_ov104_0222E930 *param0)
sub_0207A128(v1->unk_28, 3, v3);
}
v1->unk_1C = FieldBattleDTO_PlayerWon(v2->resultMask);
sub_020520A4(v2);
v1->unk_1C = CheckPlayerWonBattle(v2->resultMask);
FieldBattleDTO_Free(v2);
return 0;
}

View File

@@ -156,7 +156,7 @@ BOOL ov104_02237460(UnkStruct_ov104_0222E930 *param0)
v10 = v9->unk_0C;
v9->unk_1D = ov104_02238538(v9, v10->parties[0], v10->parties[2], v10->totalTurnsElapsed);
v9->unk_28 = FieldBattleDTO_PlayerWon(v10->resultMask);
v9->unk_28 = CheckPlayerWonBattle(v10->resultMask);
if (v9->unk_13 == 27) {
v2 = 1;
@@ -215,7 +215,7 @@ BOOL ov104_02237460(UnkStruct_ov104_0222E930 *param0)
Pokemon_SetValue(v11, MON_DATA_SP_DEF, &v5);
}
sub_020520A4(v10);
FieldBattleDTO_Free(v10);
return 0;
}

View File

@@ -214,10 +214,10 @@ BOOL ov104_02239364(UnkStruct_ov104_0222E930 *param0)
v2 = ov104_0222FBE4(param0);
v1 = v0->unk_8D0;
v0->unk_8CC = FieldBattleDTO_PlayerWon(v1->resultMask);
v0->unk_8CC = CheckPlayerWonBattle(v1->resultMask);
*v2 = v0->unk_8CC;
sub_020520A4(v1);
FieldBattleDTO_Free(v1);
return 0;
}

View File

@@ -628,7 +628,7 @@ static const UnkStruct_ov104_0223FCB4 Unk_ov104_0223FCB4[] = {
},
};
void sub_02052894(FieldBattleDTO *param0);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *param0);
BOOL ov104_0223A0C4(UnkStruct_0204AFC4 *param0, UnkStruct_ov104_0223A348 *param1, u16 param2, int param3, u16 *param4, u16 *param5, UnkStruct_0204B404 *param6, int param7);
void ov104_0223A30C(SaveData *param0, UnkStruct_ov104_0223A348 *param1, const u8 param2);
FieldBattleDTO *ov104_0223A580(UnkStruct_0204AFC4 *param0, UnkStruct_ov104_02230BE4 *param1);
@@ -912,11 +912,11 @@ FieldBattleDTO *ov104_0223A580(UnkStruct_0204AFC4 *param0, UnkStruct_ov104_02230
Party *v5;
Pokemon *v6;
v3 = sub_02051D8C(param0->unk_04, ov104_0223A700(param0->unk_0F));
v3 = FieldBattleDTO_New(param0->unk_04, ov104_0223A700(param0->unk_0F));
v4 = param1->unk_08;
v5 = Party_GetFromSavedata(v4);
sub_020521B8(v3, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
FieldBattleDTO_InitFromGameState(v3, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v3->background = 18;
v3->terrain = TERRAIN_BATTLE_TOWER;
@@ -936,11 +936,11 @@ FieldBattleDTO *ov104_0223A580(UnkStruct_0204AFC4 *param0, UnkStruct_ov104_02230
Pokemon_CalcLevelAndStats(v6);
}
sub_0205213C(v3, v6, 0);
FieldBattleDTO_AddPokemonToBattler(v3, v6, 0);
}
Heap_FreeToHeap(v6);
sub_02052894(v3);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v3);
ov104_0223A6AC(v3, &(param0->unk_78[0]), param0->unk_0E, 1, param0->unk_04);

View File

@@ -98,7 +98,7 @@ void ov104_0223AE30(UnkStruct_ov104_0223ADA0 *param0);
BOOL ov104_0223AED4(u8 param0);
static u16 ov104_0223AEE4(UnkStruct_ov104_0223ADA0 *param0);
u16 ov104_0223AF34(UnkStruct_ov104_0223ADA0 *param0);
void sub_02052894(FieldBattleDTO *param0);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *param0);
static int ov104_0223A7F4(u8 param0, int param1, int param2)
{
@@ -359,8 +359,8 @@ FieldBattleDTO *ov104_0223ABA0(UnkStruct_ov104_0223ADA0 *param0, UnkStruct_ov104
HealAllPokemonInParty(param0->unk_4D4);
HealAllPokemonInParty(param0->unk_4D8);
v4 = sub_02051D8C(11, ov104_0223AD74(param0->unk_04));
sub_020521B8(v4, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v4 = FieldBattleDTO_New(11, ov104_0223AD74(param0->unk_04));
FieldBattleDTO_InitFromGameState(v4, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v4->background = 19;
v4->terrain = TERRAIN_BATTLE_FACTORY;
@@ -370,11 +370,11 @@ FieldBattleDTO *ov104_0223ABA0(UnkStruct_ov104_0223ADA0 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v2; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_4D4, v0), v5);
sub_0205213C(v4, v5, 0);
FieldBattleDTO_AddPokemonToBattler(v4, v5, 0);
}
Heap_FreeToHeap(v5);
sub_02052894(v4);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v4);
v7 = ov104_0222DD04(&v6, param0->unk_18[param0->unk_06], 11, 178);
Heap_FreeToHeap(v7);
@@ -390,7 +390,7 @@ FieldBattleDTO *ov104_0223ABA0(UnkStruct_ov104_0223ADA0 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_4D8, v0), v5);
sub_0205213C(v4, v5, 1);
FieldBattleDTO_AddPokemonToBattler(v4, v5, 1);
}
Heap_FreeToHeap(v5);
@@ -398,7 +398,7 @@ FieldBattleDTO *ov104_0223ABA0(UnkStruct_ov104_0223ADA0 *param0, UnkStruct_ov104
switch (param0->unk_04) {
case 2:
case 3:
sub_02052894(v4);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v4);
v10 = CommInfo_TrainerInfo(1 - CommSys_CurNetId());
TrainerInfo_Copy(v10, v4->trainerInfo[2]);
@@ -413,7 +413,7 @@ FieldBattleDTO *ov104_0223ABA0(UnkStruct_ov104_0223ADA0 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_4D8, (v3 + v0)), v5);
sub_0205213C(v4, v5, 3);
FieldBattleDTO_AddPokemonToBattler(v4, v5, 3);
}
Heap_FreeToHeap(v5);

View File

@@ -36,7 +36,7 @@ typedef struct {
u16 unk_02;
} UnkStruct_ov104_02240364;
void sub_02052894(FieldBattleDTO *param0);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *param0);
void ov104_0223AF58(u8 param0, u8 param1, u8 param2, u8 param3, u16 param4[]);
void ov104_0223AFB4(u8 param0, u8 param1, int param2, u8 param3, u8 param4, u16 param5[]);
void ov104_0223B0C8(u8 param0, u8 param1, u8 param2, u8 param3, u16 param4, u16 param5[], u8 param6);
@@ -1590,8 +1590,8 @@ FieldBattleDTO *ov104_0223B250(UnkStruct_ov104_0223B5C0 *param0, UnkStruct_ov104
HealAllPokemonInParty(v13);
v8 = sub_02051D8C(11, ov104_0223B4D4(param0->unk_04));
sub_020521B8(v8, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v8 = FieldBattleDTO_New(11, ov104_0223B4D4(param0->unk_04));
FieldBattleDTO_InitFromGameState(v8, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v8->background = 22;
v8->terrain = TERRAIN_BATTLE_HALL;
@@ -1601,11 +1601,11 @@ FieldBattleDTO *ov104_0223B250(UnkStruct_ov104_0223B5C0 *param0, UnkStruct_ov104
for (v1 = 0; v1 < v4; v1++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(v13, param0->unk_260[v1]), v9);
sub_0205213C(v8, v9, 0);
FieldBattleDTO_AddPokemonToBattler(v8, v9, 0);
}
Heap_FreeToHeap(v9);
sub_02052894(v8);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v8);
v11 = ov104_0222DD04(&v10, param0->unk_18[v6], 11, 178);
@@ -1639,7 +1639,7 @@ FieldBattleDTO *ov104_0223B250(UnkStruct_ov104_0223B5C0 *param0, UnkStruct_ov104
ov104_0222DF40(&param0->unk_290[v6], v9, ov104_0223B57C(param0, v7));
Pokemon_CalcAbility(v9);
sub_0205213C(v8, v9, 1);
FieldBattleDTO_AddPokemonToBattler(v8, v9, 1);
}
Heap_FreeToHeap(v9);
@@ -1647,7 +1647,7 @@ FieldBattleDTO *ov104_0223B250(UnkStruct_ov104_0223B5C0 *param0, UnkStruct_ov104
switch (param0->unk_04) {
case 2:
case 3:
sub_02052894(v8);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v8);
v12 = CommInfo_TrainerInfo(1 - CommSys_CurNetId());
TrainerInfo_Copy(v12, v8->trainerInfo[2]);
@@ -1669,7 +1669,7 @@ FieldBattleDTO *ov104_0223B250(UnkStruct_ov104_0223B5C0 *param0, UnkStruct_ov104
ov104_0222DF40(&param0->unk_290[v6], v9, ov104_0223B57C(param0, v7));
Pokemon_CalcAbility(v9);
sub_0205213C(v8, v9, 3);
FieldBattleDTO_AddPokemonToBattler(v8, v9, 3);
Heap_FreeToHeap(v9);
break;
}

View File

@@ -45,7 +45,7 @@ void ov104_0223BAA0(UnkStruct_ov104_0223BA10 *param0, Party *param1, Pokemon *pa
static u16 ov104_0223BB10(UnkStruct_ov104_0223BA10 *param0);
u16 ov104_0223BB60(UnkStruct_ov104_0223BA10 *param0);
u16 ov104_0223BC24(u16 param0);
void sub_02052894(FieldBattleDTO *param0);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *param0);
void ov104_0223BB84(BgConfig *param0, UnkStruct_ov104_0223BA10 *param1, u32 param2);
static void ov104_0223BBC4(u16 *param0, u16 param1);
@@ -174,8 +174,8 @@ FieldBattleDTO *ov104_0223B810(UnkStruct_ov104_0223BA10 *param0, UnkStruct_ov104
v3 = ov104_0223B7DC(param0->unk_10, 0);
HealAllPokemonInParty(param0->unk_2C);
v5 = sub_02051D8C(11, ov104_0223B9E4(param0->unk_10));
sub_020521B8(v5, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v5 = FieldBattleDTO_New(11, ov104_0223B9E4(param0->unk_10));
FieldBattleDTO_InitFromGameState(v5, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v5->background = 21;
v5->terrain = TERRAIN_BATTLE_CASTLE;
@@ -193,11 +193,11 @@ FieldBattleDTO *ov104_0223B810(UnkStruct_ov104_0223BA10 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v2; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_28, (v4 + v0)), v6);
sub_0205213C(v5, v6, 0);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 0);
}
Heap_FreeToHeap(v6);
sub_02052894(v5);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v5);
v8 = ov104_0222DD04(&v7, param0->unk_30[param0->unk_11], 11, 178);
@@ -213,7 +213,7 @@ FieldBattleDTO *ov104_0223B810(UnkStruct_ov104_0223BA10 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_2C, v0), v6);
sub_0205213C(v5, v6, 1);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 1);
}
Heap_FreeToHeap(v6);
@@ -221,7 +221,7 @@ FieldBattleDTO *ov104_0223B810(UnkStruct_ov104_0223BA10 *param0, UnkStruct_ov104
switch (param0->unk_10) {
case 2:
case 3:
sub_02052894(v5);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v5);
v11 = CommInfo_TrainerInfo(1 - CommSys_CurNetId());
TrainerInfo_Copy(v11, v5->trainerInfo[2]);
@@ -236,7 +236,7 @@ FieldBattleDTO *ov104_0223B810(UnkStruct_ov104_0223BA10 *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(param0->unk_2C, (v3 + v0)), v6);
sub_0205213C(v5, v6, 3);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 3);
}
Heap_FreeToHeap(v6);

View File

@@ -37,7 +37,7 @@ u16 ov104_0223C0BC(UnkStruct_ov104_0223BFFC *param0, u8 param1);
static u16 ov104_0223C0D0(UnkStruct_ov104_0223BFFC *param0);
u16 ov104_0223C124(UnkStruct_ov104_0223BFFC *param0);
u8 ov104_0223C148(u8 param0);
void sub_02052894(FieldBattleDTO *param0);
void FieldBattleDTO_CopyPlayerInfoToTrainerData(FieldBattleDTO *param0);
static int ov104_0223BCBC(u8 param0, int param1, int param2);
void ov104_0223BD28(u8 param0, int param1, u16 param2[], u8 param3);
@@ -176,9 +176,9 @@ FieldBattleDTO *ov104_0223BDD8(UnkStruct_ov104_0223BFFC *param0, UnkStruct_ov104
v2 = ov104_0223BD70(param0->unk_10, 0);
v3 = ov104_0223BDA4(param0->unk_10, 0);
v5 = sub_02051D8C(11, ov104_0223BFD0(param0->unk_10));
v5 = FieldBattleDTO_New(11, ov104_0223BFD0(param0->unk_10));
sub_020521B8(v5, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
FieldBattleDTO_InitFromGameState(v5, NULL, param1->unk_08, param1->unk_1C, param1->unk_0C, param1->unk_10, param1->unk_20);
v5->background = 20;
v5->terrain = TERRAIN_BATTLE_ARCADE;
@@ -204,11 +204,11 @@ FieldBattleDTO *ov104_0223BDD8(UnkStruct_ov104_0223BFFC *param0, UnkStruct_ov104
for (v0 = 0; v0 < v2; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(v12, (v4 + v0)), v6);
sub_0205213C(v5, v6, 0);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 0);
}
Heap_FreeToHeap(v6);
sub_02052894(v5);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v5);
v8 = ov104_0222DD04(&v7, param0->unk_78[param0->unk_11], 11, 178);
@@ -224,7 +224,7 @@ FieldBattleDTO *ov104_0223BDD8(UnkStruct_ov104_0223BFFC *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(v13, v0), v6);
sub_0205213C(v5, v6, 1);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 1);
}
Heap_FreeToHeap(v6);
@@ -232,7 +232,7 @@ FieldBattleDTO *ov104_0223BDD8(UnkStruct_ov104_0223BFFC *param0, UnkStruct_ov104
switch (param0->unk_10) {
case 2:
case 3:
sub_02052894(v5);
FieldBattleDTO_CopyPlayerInfoToTrainerData(v5);
v11 = CommInfo_TrainerInfo(1 - CommSys_CurNetId());
TrainerInfo_Copy(v11, v5->trainerInfo[2]);
@@ -247,7 +247,7 @@ FieldBattleDTO *ov104_0223BDD8(UnkStruct_ov104_0223BFFC *param0, UnkStruct_ov104
for (v0 = 0; v0 < v3; v0++) {
Pokemon_Copy(Party_GetPokemonBySlotIndex(v13, (v3 + v0)), v6);
sub_0205213C(v5, v6, 3);
FieldBattleDTO_AddPokemonToBattler(v5, v6, 3);
}
Heap_FreeToHeap(v6);

View File

@@ -43,6 +43,9 @@ static void sub_0205EB9C(PlayerAvatar *playerAvatar, u32 param1);
static void sub_0205EBA4(PlayerAvatar *playerAvatar, u32 param1);
static u32 sub_0205EBB0(PlayerAvatar *playerAvatar, u32 param1);
static void PlayerAvatar_SetPlayerData(PlayerAvatar *playerAvatar, PlayerData *param1);
static u32 GetPlayerForm(PlayerData *player);
static void SetPlayerForm(PlayerData *player, u32 form);
static void SetAvatarForm(PlayerAvatar *playerAvatar, u32 form);
PlayerAvatar *PlayerAvatar_Init(const MapObjectManager *mapObjMan, int x, int z, int dir, int param4, int param5, int param6, PlayerData *param7)
{
@@ -73,7 +76,7 @@ PlayerAvatar *sub_0205E820(const MapObjectManager *mapObjMan, PlayerData *param1
MapObject *mapObj;
playerAvatar = PlayerAvatar_Alloc();
v0 = sub_0205EC94(param1);
v0 = GetPlayerForm(param1);
sub_0205E91C(playerAvatar, v0, gender, param1);
mapObj = sub_0205EA64(mapObjMan);
@@ -293,12 +296,12 @@ const MapObject *PlayerAvatar_ConstMapObject(const PlayerAvatar *playerAvatar)
return playerAvatar->mapObject;
}
void PlayerAvatar_SetPlayerState(PlayerAvatar *playerAvatar, int param1)
void PlayerAvatar_SetPlayerState(PlayerAvatar *playerAvatar, int form)
{
GF_ASSERT(param1 < 0x6);
playerAvatar->unk_1C = param1;
GF_ASSERT(form < 0x6);
playerAvatar->unk_1C = form;
sub_0205ECA8(playerAvatar, param1);
SetAvatarForm(playerAvatar, form);
}
int PlayerAvatar_GetPlayerState(PlayerAvatar *playerAvatar)
@@ -450,7 +453,7 @@ void PlayerData_Init(PlayerData *playerData)
{
playerData->unk_00 = 0;
playerData->runningShoes = FALSE;
playerData->unk_04 = 0x0;
playerData->form = 0x0;
}
int PlayerData_HasRunningShoes(PlayerData *playerData)
@@ -501,26 +504,26 @@ int PlayerAvatar_CyclingGear(PlayerAvatar *playerAvatar)
return PlayerData_CyclingGear(player);
}
u32 sub_0205EC94(PlayerData *player)
u32 GetPlayerForm(PlayerData *player)
{
if (player != NULL) {
return player->unk_04;
return player->form;
}
return 0x0;
}
void sub_0205ECA0(PlayerData *player, u32 param1)
void SetPlayerForm(PlayerData *player, u32 form)
{
if (player != NULL) {
player->unk_04 = param1;
player->form = form;
}
}
void sub_0205ECA8(PlayerAvatar *playerAvatar, u32 param1)
void SetAvatarForm(PlayerAvatar *playerAvatar, u32 form)
{
PlayerData *player = PlayerAvatar_PlayerData(playerAvatar);
sub_0205ECA0(player, param1);
SetPlayerForm(player, form);
}
void sub_0205ECB8(PlayerAvatar *playerAvatar, const VecFx32 *param1, int param2)

View File

@@ -307,7 +307,7 @@ static BOOL CheckTileIsGrass(FieldSystem *fieldSystem, const fx32 param1, const
int v1 = (param3 - (9 / 2)) + param5;
patch->unk_00 = v0;
patch->unk_04 = v1;
u8 v2 = sub_02054F94(fieldSystem, v0, v1);
u8 v2 = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
if (sub_0205DAC8(v2)) {
u8 v3;

View File

@@ -6020,7 +6020,7 @@ static BOOL ScrCmd_1B5(ScriptContext *ctx)
static BOOL ScrCmd_GetTimeOfDay(ScriptContext *ctx)
{
u16 *timeOfDay = ScriptContext_GetVarPointer(ctx);
*timeOfDay = sub_02055BA8(ctx->fieldSystem);
*timeOfDay = FieldSystem_GetTimeOfDay(ctx->fieldSystem);
return FALSE;
}

View File

@@ -55,9 +55,9 @@ PokedexData *sub_02026324(u32 param0)
return v0;
}
void sub_02026338(const PokedexData *param0, PokedexData *param1)
void Pokedex_Copy(const PokedexData *src, PokedexData *dest)
{
MI_CpuCopy8(param0, param1, sizeof(PokedexData));
MI_CpuCopy8(src, dest, sizeof(PokedexData));
}
static inline void CheckPokedexIntegrity(const PokedexData *param0)

View File

@@ -561,7 +561,7 @@ void sub_0202FAFC(FieldBattleDTO *param0, SaveData *param1)
param0->resultMask = BATTLE_IN_PROGRESS;
param0->leveledUpMonsMask = 0;
sub_02026338(SaveData_Pokedex(param1), param0->pokedex);
Pokedex_Copy(SaveData_Pokedex(param1), param0->pokedex);
for (v0 = 0; v0 < 4; v0++) {
param0->trainerIDs[v0] = v1->unk_00.unk_08[v0];

View File

@@ -61,7 +61,7 @@ void sub_0203C9D4(FieldSystem *fieldSystem, MapObject **param1)
u8 v3;
v2 = sub_0203C954(fieldSystem, &v0, &v1);
v3 = sub_02054F94(fieldSystem, v0, v1);
v3 = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
if (sub_0205DAE0(v3) == 1) {
switch (v2) {

View File

@@ -1046,7 +1046,7 @@ BOOL sub_0203DBF0(FieldTask *param0)
v2->unk_48.unk_14 = SaveData_Options(fieldSystem->saveData);
v2->unk_48.unk_10 = 1;
switch (sub_02055BA8(fieldSystem)) {
switch (FieldSystem_GetTimeOfDay(fieldSystem)) {
case 0:
case 1:
default:

View File

@@ -266,7 +266,7 @@ BOOL ScrCmd_CheckWonBattle(ScriptContext *ctx)
BOOL *battleResult = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT);
u16 *destVar = ScriptContext_GetVarPointer(ctx);
*destVar = FieldBattleDTO_PlayerWon(*battleResult);
*destVar = CheckPlayerWonBattle(*battleResult);
return TRUE;
}
@@ -275,7 +275,7 @@ BOOL ScrCmd_CheckLostBattle(ScriptContext *ctx)
BOOL *battleResult = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT);
u16 *destVar = ScriptContext_GetVarPointer(ctx);
*destVar = FieldBattleDTO_PlayerLost(*battleResult);
*destVar = CheckPlayerLostBattle(*battleResult);
return TRUE;
}
@@ -284,7 +284,7 @@ BOOL ScrCmd_CheckDidNotCapture(ScriptContext *ctx)
BOOL *battleResult = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT);
u16 *destVar = ScriptContext_GetVarPointer(ctx);
*destVar = FieldBattleDTO_PlayerDidNotCapture(*battleResult);
*destVar = CheckPlayerDidNotCaptureWildMon(*battleResult);
return TRUE;
}

View File

@@ -285,23 +285,18 @@ BOOL FieldSystem_CheckCollision(const FieldSystem *fieldSystem, const int param1
return 0;
}
u8 sub_02054F94(const FieldSystem *fieldSystem, const int param1, const int param2)
u8 FieldSystem_GetTileAttributes(const FieldSystem *fieldSystem, const int x, const int z)
{
BOOL v0;
u16 v1;
u16 metaAttributes;
BOOL hasAttributes = fieldSystem->terrainCollisionMan->getAttrFunc(fieldSystem, x, z, &metaAttributes);
v0 = fieldSystem->terrainCollisionMan->getAttrFunc(fieldSystem, param1, param2, &v1);
if (v0) {
u8 v2;
v2 = v1;
v2 &= 0xff;
return v2;
if (hasAttributes) {
u8 attributes = metaAttributes;
attributes &= 0xFF;
return attributes;
}
return 0xff;
return 0xFF;
}
const fx32 sub_02054FBC(const FieldSystem *fieldSystem, const fx32 param1, const fx32 param2, const fx32 param3, u8 *param4)
@@ -365,7 +360,7 @@ BOOL sub_02055024(const FieldSystem *fieldSystem, const VecFx32 *param1, const i
v2 = FieldSystem_CheckCollision(fieldSystem, param2, param3);
if ((!v2) && (v1 == 2)) {
u8 v3 = sub_02054F94(fieldSystem, param2, param3);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, param2, param3);
if (sub_0205DC20(v3)) {
return 1;
@@ -399,7 +394,7 @@ BOOL sub_0205507C(FieldSystem *fieldSystem, const VecFx32 *param1, const int par
v2 = FieldSystem_CheckCollision(fieldSystem, param2, param3);
if ((!v2) && (v1 == 2)) {
u8 v4 = sub_02054F94(fieldSystem, param2, param3);
u8 v4 = FieldSystem_GetTileAttributes(fieldSystem, param2, param3);
if (sub_0205DC20(v4)) {
return 1;

View File

@@ -149,7 +149,7 @@ static void sub_02055B64(FieldSystem *fieldSystem, s32 param1, const RTCTime *pa
}
}
int sub_02055BA8(const FieldSystem *fieldSystem)
enum TimeOfDay FieldSystem_GetTimeOfDay(const FieldSystem *fieldSystem)
{
GameTime *v0 = SaveData_GetGameTime(fieldSystem->saveData);
return TimeOfDayForHour(v0->time.hour);

View File

@@ -201,7 +201,7 @@ static BOOL sub_020564F4(UnkStruct_020564B4 *param0)
static int sub_0205650C(FieldSystem *fieldSystem, int param1, int param2)
{
u16 v0 = sub_02054F94(fieldSystem, param1, param2);
u16 v0 = FieldSystem_GetTileAttributes(fieldSystem, param1, param2);
int v1;
v1 = (param1 < 32) ? 0 : 1;
@@ -279,11 +279,11 @@ static FieldBattleDTO *sub_0205664C(FieldSystem *fieldSystem, UnkStruct_020564B4
PalParkTransfer *v2 = SaveData_PalParkTransfer(fieldSystem->saveData);
int v3 = sub_020563BC(fieldSystem);
v0 = sub_02051F38(11, v3);
v0 = FieldBattleDTO_NewPalPark(11, v3);
sub_02052314(v0, fieldSystem);
FieldBattleDTO_Init(v0, fieldSystem);
sub_0202F000(v2, param1->unk_3C, v1);
sub_0205213C(v0, v1, 1);
FieldBattleDTO_AddPokemonToBattler(v0, v1, 1);
Heap_FreeToHeap(v1);
return v0;

View File

@@ -431,7 +431,7 @@ static BOOL sub_02057050(FieldTask *taskMan)
u8 v4;
MapObject *v5 = Player_MapObject(fieldSystem->playerAvatar);
v4 = sub_02054F94(fieldSystem, Player_GetXPos(fieldSystem->playerAvatar), Player_GetZPos(fieldSystem->playerAvatar));
v4 = FieldSystem_GetTileAttributes(fieldSystem, Player_GetXPos(fieldSystem->playerAvatar), Player_GetZPos(fieldSystem->playerAvatar));
if (sub_0205DAEC(v4)) {
MapObject_SetHidden(v5, 1);
@@ -482,7 +482,7 @@ static BOOL sub_0205711C(FieldTask *taskMan)
u8 v4;
MapObject *v5 = Player_MapObject(fieldSystem->playerAvatar);
v4 = sub_02054F94(fieldSystem, Player_GetXPos(fieldSystem->playerAvatar), Player_GetZPos(fieldSystem->playerAvatar));
v4 = FieldSystem_GetTileAttributes(fieldSystem, Player_GetXPos(fieldSystem->playerAvatar), Player_GetZPos(fieldSystem->playerAvatar));
if (sub_0205DAEC(v4)) {
MapObject_SetHidden(v5, 1);
@@ -634,7 +634,7 @@ static void sub_02057368(FieldSystem *fieldSystem)
v0 = Player_GetXPos(fieldSystem->playerAvatar);
v1 = Player_GetZPos(fieldSystem->playerAvatar);
v4 = sub_02054F94(fieldSystem, v0, v1);
v4 = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
if (sub_0205DC44(v4)) {
v3.x += (FX32_ONE * 16);

View File

@@ -1778,7 +1778,7 @@ static int sub_02060CE4(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
}
{
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
switch (param2) {
case 0:
@@ -1816,7 +1816,7 @@ static int sub_02060D98(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v2 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param2);
int v3 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param2);
u8 v4 = sub_02054F94(fieldSystem, v2, v3);
u8 v4 = FieldSystem_GetTileAttributes(fieldSystem, v2, v3);
switch (param2) {
case 0:
@@ -1851,7 +1851,7 @@ static int sub_02060E40(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v1 = MapObject_GetXPos(mapObj);
int v2 = MapObject_GetZPos(mapObj);
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
switch (param2) {
case 0:
@@ -1878,7 +1878,7 @@ static int sub_02060E40(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
v1 += MapObject_GetDxFromDir(param2);
v2 += MapObject_GetDyFromDir(param2);
v3 = sub_02054F94(fieldSystem, v1, v2);
v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (sub_0205DAEC(v3) == 1) {
return 1;
@@ -1894,7 +1894,7 @@ static int sub_02060EE4(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v1 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param2);
int v2 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param2);
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if ((param2 == 3) && sub_0205DD90(v3)) {
return 1;
@@ -1914,7 +1914,7 @@ static int sub_02060F4C(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v1 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param2);
int v2 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param2);
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (sub_0206406C(mapObj, v3)) {
return 1;
@@ -1930,7 +1930,7 @@ static int sub_02060FA8(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v1 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param2);
int v2 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param2);
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (PlayerAvatar_GetPlayerState(playerAvatar) == PLAYER_STATE_CYCLING) {
if (sub_0206415C(mapObj, v3) == 1) {
@@ -1964,7 +1964,7 @@ static int sub_02061058(PlayerAvatar *playerAvatar, MapObject *mapObj, int param
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
int v1 = MapObject_GetXPos(mapObj) + MapObject_GetDxFromDir(param2);
int v2 = MapObject_GetZPos(mapObj) + MapObject_GetDyFromDir(param2);
u8 v3 = sub_02054F94(fieldSystem, v1, v2);
u8 v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (sub_0206406C(mapObj, v3)) {
return 1;
@@ -2468,7 +2468,7 @@ u32 sub_02061760(PlayerAvatar *playerAvatar)
int z = MapObject_GetZPos(mapObj);
if (PlayerAvatar_DistortionGravityChanged(playerAvatar) == FALSE) {
v0 = sub_02054F94(fieldSystem, x, z);
v0 = FieldSystem_GetTileAttributes(fieldSystem, x, z);
} else {
ov9_02251044(fieldSystem, x, y, z, &v0);
}

View File

@@ -222,7 +222,7 @@ void sub_0206842C(FieldSystem *fieldSystem, UnkStruct_020684D0 *param1)
v0 = Player_GetXPos(fieldSystem->playerAvatar);
v1 = Player_GetZPos(fieldSystem->playerAvatar);
param1->unk_0E = sub_02054F94(fieldSystem, v0, v1);
param1->unk_0E = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
v2 = PlayerAvatar_GetDir(fieldSystem->playerAvatar);
@@ -241,7 +241,7 @@ void sub_0206842C(FieldSystem *fieldSystem, UnkStruct_020684D0 *param1)
break;
}
param1->unk_0C = sub_02054F94(fieldSystem, v0, v1);
param1->unk_0C = FieldSystem_GetTileAttributes(fieldSystem, v0, v1);
sub_0203C9D4(fieldSystem, &v3);
param1->unk_10 = sub_02055FC8(fieldSystem, v3);

View File

@@ -14,6 +14,7 @@
#include "journal.h"
#include "location.h"
#include "map_header.h"
#include "player_avatar.h"
#include "roaming_pokemon.h"
#include "save_player.h"
#include "system_flags.h"
@@ -89,10 +90,10 @@ void FieldSystem_InitFlagsWarp(FieldSystem *fieldSystem)
{
PlayerData *v2 = FieldOverworldState_GetPlayerData(SaveData_GetFieldOverworldState(fieldSystem->saveData));
if ((v2->unk_04 == 0x1) && (MapHeader_IsBikeAllowed(fieldSystem->location->mapId) == 0)) {
v2->unk_04 = 0x0;
} else if (v2->unk_04 == 0x2) {
v2->unk_04 = 0x0;
if ((v2->form == PLAYER_AVATAR_BIKING) && (MapHeader_IsBikeAllowed(fieldSystem->location->mapId) == 0)) {
v2->form = PLAYER_AVATAR_WALKING;
} else if (v2->form == PLAYER_AVATAR_SURFING) {
v2->form = PLAYER_AVATAR_WALKING;
}
}

View File

@@ -198,10 +198,10 @@ void sub_02070728(FieldSystem *fieldSystem, UnkStruct_02070950 *param1)
v1 = Player_GetXPos(fieldSystem->playerAvatar);
v2 = Player_GetZPos(fieldSystem->playerAvatar);
v4 = sub_02054F94(fieldSystem, v1, v2);
v4 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
sub_020615AC(fieldSystem->playerAvatar, &v1, &v2);
v3 = sub_02054F94(fieldSystem, v1, v2);
v3 = FieldSystem_GetTileAttributes(fieldSystem, v1, v2);
if (ov5_021E0118(fieldSystem->playerAvatar, v4, v3)) {
param1->unk_0C |= (1 << 2);

View File

@@ -256,7 +256,7 @@ static BOOL sub_0208BC8C(UnkStruct_0208BC3C *param0, int param1)
case 1: {
int v0;
param0->unk_10 = sub_02051D8C(param1, 0x0);
param0->unk_10 = FieldBattleDTO_New(param1, 0x0);
if (sub_0202F250() == 0) {
sub_0202F298(param0->saveData, param1, &v0, param0->unk_10, param0->unk_14->unk_86C);
@@ -277,7 +277,7 @@ static BOOL sub_0208BC8C(UnkStruct_0208BC3C *param0, int param1)
if (v0 != 1) {
Heap_FreeToHeap(param0->unk_10->bagCursor);
sub_020520A4(param0->unk_10);
FieldBattleDTO_Free(param0->unk_10);
param0->unk_00 = 0;
return 1;
} else {
@@ -311,7 +311,7 @@ static BOOL sub_0208BC8C(UnkStruct_0208BC3C *param0, int param1)
}
Heap_FreeToHeap(param0->unk_10->bagCursor);
sub_020520A4(param0->unk_10);
FieldBattleDTO_Free(param0->unk_10);
OverlayManager_Free(param0->unk_08);
{