mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-25 07:29:01 -05:00
Document field moves (#430)
* initial documentation of unk_0207070C->field moves * changes for PR suggestions + menu taskdata * symbols in FieldMoveTaskData + fieldMoveMon done * function name changes, document badges, cleanup * Use enum FieldMoveError as return type for FieldMoveErrContext functions * badge enum and bool constants --------- Co-authored-by: Rachel <lhearachel@proton.me>
This commit is contained in:
parent
97e1968e98
commit
c8d41bc96a
54
include/field_move_tasks.h
Normal file
54
include/field_move_tasks.h
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#ifndef POKEPLATINUM_FIELD_MOVE_TASKS_H
|
||||
#define POKEPLATINUM_FIELD_MOVE_TASKS_H
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
|
||||
#include "field/field_system_decl.h"
|
||||
|
||||
#include "field_task.h"
|
||||
|
||||
typedef struct FieldMoveContext {
|
||||
u32 mapId;
|
||||
FieldSystem *fieldSystem;
|
||||
MapObject *mapObj;
|
||||
u16 usableMoves;
|
||||
} FieldMoveContext;
|
||||
|
||||
typedef struct FieldMovePokemon {
|
||||
FieldTask *fieldTask;
|
||||
u16 fieldMonId;
|
||||
u16 fieldMove;
|
||||
} FieldMovePokemon;
|
||||
|
||||
enum FieldMoveList {
|
||||
FIELD_MOVE_CUT,
|
||||
FIELD_MOVE_FLY, // unused
|
||||
FIELD_MOVE_SURF,
|
||||
FIELD_MOVE_STRENGTH,
|
||||
FIELD_MOVE_DEFOG,
|
||||
FIELD_MOVE_ROCK_SMASH,
|
||||
FIELD_MOVE_WATERFALL,
|
||||
FIELD_MOVE_ROCK_CLIMB,
|
||||
FIELD_MOVE_FLASH,
|
||||
};
|
||||
|
||||
enum FieldMoveError {
|
||||
FIELD_MOVE_ERROR_NONE,
|
||||
FIELD_MOVE_ERROR_LOCATION,
|
||||
FIELD_MOVE_ERROR_BADGE,
|
||||
FIELD_MOVE_ERROR_PARTNER,
|
||||
FIELD_MOVE_ERROR_STATE,
|
||||
};
|
||||
|
||||
enum TaskOrError {
|
||||
FIELD_MOVE_TASK,
|
||||
FIELD_MOVE_ERROR,
|
||||
};
|
||||
|
||||
typedef void (*FieldMoveTaskContext)(FieldMovePokemon *, const FieldMoveContext *);
|
||||
typedef enum FieldMoveError (*FieldMoveErrContext)(const FieldMoveContext *);
|
||||
|
||||
void *FieldMove_GetTaskOrError(u16 taskOrError, u16 fieldMove);
|
||||
void FieldMoves_SetUsableMoves(FieldSystem *fieldSystem, FieldMoveContext *fieldMoveContext);
|
||||
|
||||
#endif // POKEPLATINUM_FIELD_MOVE_TASKS_H
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#ifndef POKEPLATINUM_FUNCPTR_0203B7C0_H
|
||||
#define POKEPLATINUM_FUNCPTR_0203B7C0_H
|
||||
|
||||
#include "struct_decls/struct_02070950_decl.h"
|
||||
#include "struct_decls/struct_020709CC_decl.h"
|
||||
|
||||
typedef void (*UnkFuncPtr_0203B7C0)(UnkStruct_020709CC *, const UnkStruct_02070950 *);
|
||||
|
||||
#endif // POKEPLATINUM_FUNCPTR_0203B7C0_H
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#ifndef POKEPLATINUM_FUNCPTR_02084808_H
|
||||
#define POKEPLATINUM_FUNCPTR_02084808_H
|
||||
|
||||
#include "struct_decls/struct_02070950_decl.h"
|
||||
|
||||
typedef int (*UnkFuncPtr_02084808)(const UnkStruct_02070950 *);
|
||||
|
||||
#endif // POKEPLATINUM_FUNCPTR_02084808_H
|
||||
|
|
@ -12,9 +12,9 @@ void PlayerAvatar_SetRequestStateBit(PlayerAvatar *playerAvatar, u32 param1);
|
|||
void PlayerAvatar_RequestChangeState(PlayerAvatar *playerAvatar);
|
||||
int ov5_021DFDE0(FieldSystem *fieldSystem, PlayerAvatar *param1, int param2, int param3);
|
||||
void ov5_021E00EC(FieldTask *param0, int param1, int param2);
|
||||
int ov5_021E0118(PlayerAvatar *playerAvatar, u32 param1, u32 param2);
|
||||
int PlayerAvatar_CanUseSurf(PlayerAvatar *playerAvatar, u32 currTileBehavior, u32 nextTileBehavior);
|
||||
void ov5_021E0734(FieldTask *param0, int param1, int param2);
|
||||
int ov5_021E0760(u32 param0, int param1);
|
||||
BOOL PlayerAvatar_CanUseRockClimb(u32 metatileBehavior, int facingDir);
|
||||
void ov5_021E097C(FieldSystem *fieldSystem, int param1);
|
||||
void ov5_021E0998(FieldTask *param0, int param1, int param2);
|
||||
void ov5_021E0DD4(FieldTask *param0);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ MapObject *sub_0205EA24(const MapObjectManager *param0);
|
|||
int PlayerAvatar_GetDir(PlayerAvatar *const playerAvatar);
|
||||
void Player_SetDir(PlayerAvatar *playerAvatar, int param1);
|
||||
int PlayerAvatar_GetMoveDir(PlayerAvatar *const playerAvatar);
|
||||
int sub_0205EAA0(PlayerAvatar *const playerAvatar);
|
||||
int PlayerAvatar_GetDistortionDir(PlayerAvatar *const playerAvatar);
|
||||
int Player_GetXPos(PlayerAvatar *const playerAvatar);
|
||||
int Player_GetZPos(PlayerAvatar *const playerAvatar);
|
||||
int PlayerAvatar_XPosPrev(PlayerAvatar *const playerAvatar);
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_02070950_DECL_H
|
||||
#define POKEPLATINUM_STRUCT_02070950_DECL_H
|
||||
|
||||
typedef struct UnkStruct_02070950_t UnkStruct_02070950;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_02070950_DECL_H
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_020709CC_DECL_H
|
||||
#define POKEPLATINUM_STRUCT_020709CC_DECL_H
|
||||
|
||||
typedef struct UnkStruct_020709CC_t UnkStruct_020709CC;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_020709CC_DECL_H
|
||||
|
|
@ -2,11 +2,11 @@
|
|||
#define POKEPLATINUM_STRUCT_020708E0_H
|
||||
|
||||
#include "struct_defs/struct_020684D0.h"
|
||||
#include "struct_defs/struct_02070950.h"
|
||||
|
||||
#include "overlay005/struct_ov5_021D30A8.h"
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "field_move_tasks.h"
|
||||
#include "field_task.h"
|
||||
#include "menu.h"
|
||||
#include "sprite_system.h"
|
||||
|
|
@ -26,10 +26,10 @@ typedef struct {
|
|||
u32 unk_220;
|
||||
u32 unk_224;
|
||||
u32 unk_228;
|
||||
FieldTaskFunc unk_22C;
|
||||
FieldTaskFunc callback;
|
||||
UnkStruct_020684D0 unk_230;
|
||||
UnkStruct_02070950 unk_24C;
|
||||
void *unk_25C;
|
||||
FieldMoveContext fieldMoveContext;
|
||||
void *taskData;
|
||||
void *unk_260;
|
||||
} StartMenu;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_02070950_H
|
||||
#define POKEPLATINUM_STRUCT_02070950_H
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
|
||||
#include "field/field_system_decl.h"
|
||||
|
||||
typedef struct UnkStruct_02070950_t {
|
||||
u32 unk_00;
|
||||
FieldSystem *fieldSystem;
|
||||
MapObject *unk_08;
|
||||
u16 unk_0C;
|
||||
} UnkStruct_02070950;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_02070950_H
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#ifndef POKEPLATINUM_STRUCT_020709CC_H
|
||||
#define POKEPLATINUM_STRUCT_020709CC_H
|
||||
|
||||
#include "field_task.h"
|
||||
|
||||
typedef struct UnkStruct_020709CC_t {
|
||||
FieldTask *unk_00;
|
||||
u16 unk_04;
|
||||
u16 unk_06;
|
||||
} UnkStruct_020709CC;
|
||||
|
||||
#endif // POKEPLATINUM_STRUCT_020709CC_H
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef POKEPLATINUM_UNK_0203D1B8_H
|
||||
#define POKEPLATINUM_UNK_0203D1B8_H
|
||||
|
||||
#include "struct_decls/struct_02070950_decl.h"
|
||||
#include "struct_decls/struct_0209747C_decl.h"
|
||||
#include "struct_defs/choose_starter_data.h"
|
||||
#include "struct_defs/struct_0203D8AC.h"
|
||||
|
|
@ -21,6 +20,7 @@
|
|||
#include "overlay090/struct_ov90_021D0D80.h"
|
||||
|
||||
#include "field_battle_data_transfer.h"
|
||||
#include "field_move_tasks.h"
|
||||
#include "field_task.h"
|
||||
#include "pokemon.h"
|
||||
#include "savedata.h"
|
||||
|
|
@ -33,7 +33,7 @@ u16 sub_0203D2C4(void *param0);
|
|||
void sub_0203D2E4(FieldSystem *fieldSystem, void *param1);
|
||||
void sub_0203D30C(FieldSystem *fieldSystem, void *param1);
|
||||
void FieldSystem_OpenSummaryScreen(FieldSystem *fieldSystem, void *overlayArgs);
|
||||
void *sub_0203D390(FieldSystem *fieldSystem, UnkStruct_02070950 *param1, u8 param2);
|
||||
void *sub_0203D390(FieldSystem *fieldSystem, FieldMoveContext *param1, u8 param2);
|
||||
void *sub_0203D3C0(int param0, FieldSystem *fieldSystem);
|
||||
void *sub_0203D3E4(int param0, FieldSystem *fieldSystem);
|
||||
int PartyManagementData_GetSelectedSlot(PartyManagementData *partyMan);
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ u32 sub_0206156C(PlayerAvatar *playerAvatar, int param1);
|
|||
void PlayerAvatar_MoveCoordsInDirection(PlayerAvatar *playerAvatar, int direction, int *x, int *z);
|
||||
void PlayerAvatar_GetFacingTileCoords(PlayerAvatar *playerAvatar, int *x, int *z);
|
||||
void sub_02061674(PlayerAvatar *playerAvatar, int param1, int *param2, int *param3, int *param4);
|
||||
u32 sub_020616F0(PlayerAvatar *playerAvatar, int param1);
|
||||
u32 sub_02061760(PlayerAvatar *playerAvatar);
|
||||
u32 PlayerAvatar_GetDistortionTileBehaviour(PlayerAvatar *playerAvatar, int param1);
|
||||
u32 PlayerAvatar_GetDistortionCurrTileBehaviour(PlayerAvatar *playerAvatar);
|
||||
void sub_020617BC(PlayerAvatar *const playerAvatar, int *param1, int *param2, int *param3);
|
||||
|
||||
#endif // POKEPLATINUM_UNK_0205F180_H
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
#ifndef POKEPLATINUM_UNK_0207070C_H
|
||||
#define POKEPLATINUM_UNK_0207070C_H
|
||||
|
||||
#include "struct_decls/struct_02070950_decl.h"
|
||||
|
||||
#include "field/field_system_decl.h"
|
||||
|
||||
u32 sub_0207070C(u16 param0, u16 param1);
|
||||
void sub_02070728(FieldSystem *fieldSystem, UnkStruct_02070950 *param1);
|
||||
|
||||
#endif // POKEPLATINUM_UNK_0207070C_H
|
||||
|
|
@ -276,7 +276,7 @@ Static main
|
|||
Object main.nef.p/src_unk_0206F314.c.o
|
||||
Object main.nef.p/src_unk_02070428.c.o
|
||||
Object main.nef.p/src_unk_0207064C.c.o
|
||||
Object main.nef.p/src_unk_0207070C.c.o
|
||||
Object main.nef.p/src_field_move_tasks.c.o
|
||||
Object main.nef.p/src_unk_020711C8.c.o
|
||||
Object main.nef.p/src_unk_020711EC.c.o
|
||||
Object main.nef.p/src_platform_lift.c.o
|
||||
|
|
|
|||
811
src/field_move_tasks.c
Normal file
811
src/field_move_tasks.c
Normal file
|
|
@ -0,0 +1,811 @@
|
|||
#include "field_move_tasks.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/field/dynamic_map_features.h"
|
||||
#include "constants/field/map_load.h"
|
||||
#include "generated/badges.h"
|
||||
#include "generated/journal_location_events.h"
|
||||
#include "generated/object_events.h"
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
#include "struct_defs/struct_0203D8AC.h"
|
||||
#include "struct_defs/struct_020708E0.h"
|
||||
#include "struct_defs/struct_020711C8.h"
|
||||
|
||||
#include "field/field_system.h"
|
||||
#include "overlay005/ov5_021DFB54.h"
|
||||
#include "overlay005/ov5_021F101C.h"
|
||||
#include "overlay006/ov6_02247100.h"
|
||||
|
||||
#include "field_overworld_state.h"
|
||||
#include "field_task.h"
|
||||
#include "heap.h"
|
||||
#include "inlines.h"
|
||||
#include "journal.h"
|
||||
#include "map_header.h"
|
||||
#include "map_object.h"
|
||||
#include "map_tile_behavior.h"
|
||||
#include "persisted_map_features_init.h"
|
||||
#include "player_avatar.h"
|
||||
#include "save_player.h"
|
||||
#include "script_manager.h"
|
||||
#include "start_menu.h"
|
||||
#include "system_flags.h"
|
||||
#include "terrain_collision_manager.h"
|
||||
#include "trainer_info.h"
|
||||
#include "unk_0203C954.h"
|
||||
#include "unk_0203D1B8.h"
|
||||
#include "unk_0205F180.h"
|
||||
#include "unk_0206B70C.h"
|
||||
#include "unk_020711C8.h"
|
||||
#include "vars_flags.h"
|
||||
|
||||
#define FIELD_MOVE_FLAG(move) (1 << (move))
|
||||
|
||||
typedef struct {
|
||||
FieldMoveTaskContext task;
|
||||
FieldMoveErrContext error;
|
||||
} FieldMoveTaskOrError;
|
||||
|
||||
typedef struct {
|
||||
u32 magicNumber;
|
||||
MapObject *mapObj;
|
||||
FieldMovePokemon fieldMoveMon;
|
||||
} FieldMoveTaskData;
|
||||
|
||||
static void FieldMoves_CanUseSurfDistortionWorld(FieldSystem *fieldSystem, FieldMoveContext *param1);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckFly(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetFlyTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckTeleport(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetTeleportTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_TeleportTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckSurf(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetSurfTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_SurfTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckWaterfall(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetWaterfallTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_WaterfallTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckRockClimb(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetRockClimbTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_RockClimbTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckFlash(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetFlashTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_FlashTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckDefog(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetDefogTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_DefogTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckRockSmash(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetRockSmashTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_RockSmashTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckStrength(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetStrengthTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_StrengthTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckDig(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetDigTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_DigTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckSweetScent(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetSweetScentTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckChatter(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetChatterTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_ChatterTask(FieldTask *taskMan);
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckCut(const FieldMoveContext *fieldMoveContext);
|
||||
static void FieldMoves_SetCutTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
|
||||
static BOOL FieldMoves_CutTask(FieldTask *taskMan);
|
||||
|
||||
static const FieldMoveTaskOrError fieldMoveTaskOrError[] = {
|
||||
{ FieldMoves_SetCutTask, FieldMoves_CheckCut },
|
||||
{ FieldMoves_SetFlyTask, FieldMoves_CheckFly },
|
||||
{ FieldMoves_SetSurfTask, FieldMoves_CheckSurf },
|
||||
{ FieldMoves_SetStrengthTask, FieldMoves_CheckStrength },
|
||||
{ FieldMoves_SetDefogTask, FieldMoves_CheckDefog },
|
||||
{ FieldMoves_SetRockSmashTask, FieldMoves_CheckRockSmash },
|
||||
{ FieldMoves_SetWaterfallTask, FieldMoves_CheckWaterfall },
|
||||
{ FieldMoves_SetRockClimbTask, FieldMoves_CheckRockClimb },
|
||||
{ FieldMoves_SetFlashTask, FieldMoves_CheckFlash },
|
||||
{ FieldMoves_SetTeleportTask, FieldMoves_CheckTeleport },
|
||||
{ FieldMoves_SetDigTask, FieldMoves_CheckDig },
|
||||
{ FieldMoves_SetSweetScentTask, FieldMoves_CheckSweetScent },
|
||||
{ FieldMoves_SetChatterTask, FieldMoves_CheckChatter },
|
||||
};
|
||||
|
||||
static inline BOOL FieldMoves_IsMoveUsable(const FieldMoveContext *fieldMoveContext, enum FieldMoveList fieldMove)
|
||||
{
|
||||
if ((fieldMoveContext->usableMoves & FIELD_MOVE_FLAG(fieldMove)) != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static inline BOOL PlayerHasRequiredBadge(const FieldMoveContext *fieldMoveContext, enum Badge badge)
|
||||
{
|
||||
return TrainerInfo_HasBadge(SaveData_GetTrainerInfo(fieldMoveContext->fieldSystem->saveData), badge);
|
||||
}
|
||||
|
||||
static inline BOOL PlayerTravellingWithPartner(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
return SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldMoveContext->fieldSystem->saveData));
|
||||
}
|
||||
|
||||
static inline BOOL PlayerInSafariZoneOrPalPark(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if ((SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldMoveContext->fieldSystem->saveData)) == TRUE) || (SystemFlag_CheckInPalPark(SaveData_GetVarsFlags(fieldMoveContext->fieldSystem->saveData)) == TRUE)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static inline BOOL PlayerInPalPark(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (SystemFlag_CheckInPalPark(SaveData_GetVarsFlags(fieldMoveContext->fieldSystem->saveData)) == TRUE) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static inline BOOL PlayerOutsideLinkRoom(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if ((fieldMoveContext->fieldSystem->mapLoadType == MAP_LOAD_TYPE_COLOSSEUM) || (fieldMoveContext->fieldSystem->mapLoadType == MAP_LOAD_TYPE_UNION)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void *FieldMove_GetTaskOrError(u16 taskOrError, u16 fieldMove)
|
||||
{
|
||||
if (taskOrError == FIELD_MOVE_TASK) {
|
||||
return fieldMoveTaskOrError[fieldMove].task;
|
||||
}
|
||||
|
||||
return fieldMoveTaskOrError[fieldMove].error;
|
||||
}
|
||||
|
||||
void FieldMoves_SetUsableMoves(FieldSystem *fieldSystem, FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
MapObject *mapObj;
|
||||
int playerX, playerY;
|
||||
int nextTileBehavior;
|
||||
int currTileBehavior;
|
||||
|
||||
fieldMoveContext->fieldSystem = fieldSystem;
|
||||
fieldMoveContext->mapId = fieldSystem->location->mapId;
|
||||
fieldMoveContext->usableMoves = 0;
|
||||
|
||||
if (PlayerAvatar_DistortionGravityChanged(fieldSystem->playerAvatar) == TRUE) {
|
||||
FieldMoves_CanUseSurfDistortionWorld(fieldSystem, fieldMoveContext);
|
||||
return;
|
||||
}
|
||||
|
||||
sub_0203C9D4(fieldSystem, &mapObj);
|
||||
fieldMoveContext->mapObj = mapObj;
|
||||
|
||||
if (mapObj != NULL) {
|
||||
switch (MapObject_GetGraphicsID(mapObj)) {
|
||||
case OBJ_EVENT_GFX_STRENGTH_BOULDER:
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_STRENGTH);
|
||||
break;
|
||||
case OBJ_EVENT_GFX_ROCK_SMASH:
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_ROCK_SMASH);
|
||||
break;
|
||||
case OBJ_EVENT_GFX_CUT_TREE:
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_CUT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
playerX = Player_GetXPos(fieldSystem->playerAvatar);
|
||||
playerY = Player_GetZPos(fieldSystem->playerAvatar);
|
||||
currTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, playerX, playerY);
|
||||
|
||||
PlayerAvatar_GetFacingTileCoords(fieldSystem->playerAvatar, &playerX, &playerY);
|
||||
nextTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, playerX, playerY);
|
||||
|
||||
if (PlayerAvatar_CanUseSurf(fieldSystem->playerAvatar, currTileBehavior, nextTileBehavior)) {
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_SURF);
|
||||
}
|
||||
|
||||
if (PlayerAvatar_CanUseRockClimb(nextTileBehavior, PlayerAvatar_GetDir(fieldSystem->playerAvatar))) {
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_ROCK_CLIMB);
|
||||
}
|
||||
|
||||
if (TileBehavior_IsWaterfall(nextTileBehavior)) {
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_WATERFALL);
|
||||
}
|
||||
|
||||
switch (FieldOverworldState_GetWeather(SaveData_GetFieldOverworldState(fieldSystem->saveData))) {
|
||||
case OVERWORLD_WEATHER_FOG:
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_DEFOG);
|
||||
break;
|
||||
case OVERWORLD_WEATHER_DARK_FLASH:
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_FLASH);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void FieldMoves_CanUseSurfDistortionWorld(FieldSystem *fieldSystem, FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
int distortionDir;
|
||||
u32 currTileBehavior, nextTileBehavior;
|
||||
|
||||
distortionDir = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
|
||||
nextTileBehavior = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, distortionDir);
|
||||
currTileBehavior = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
|
||||
|
||||
if (PlayerAvatar_CanUseSurf(fieldSystem->playerAvatar, currTileBehavior, nextTileBehavior) == TRUE) {
|
||||
fieldMoveContext->usableMoves |= FIELD_MOVE_FLAG(FIELD_MOVE_SURF);
|
||||
}
|
||||
}
|
||||
|
||||
static FieldMoveTaskData *FieldMoves_AllocateTaskData(const FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldMoveTaskData *taskData = Heap_AllocFromHeap(HEAP_ID_FIELD_TASK, sizeof(FieldMoveTaskData));
|
||||
|
||||
taskData->magicNumber = 0x19740205;
|
||||
taskData->mapObj = fieldMoveContext->mapObj;
|
||||
taskData->fieldMoveMon = *fieldMoveMon;
|
||||
|
||||
return taskData;
|
||||
}
|
||||
|
||||
static void FieldMoves_FreeTaskData(FieldMoveTaskData *taskData)
|
||||
{
|
||||
GF_ASSERT(taskData->magicNumber == 0x19740205);
|
||||
Heap_FreeToHeap(taskData);
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckCut(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_FOREST) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_CUT)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetCutTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_CutTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_CutTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10008, taskData->mapObj);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckFly(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_COBBLE) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (MapHeader_IsFlyAllowed(fieldMoveContext->mapId) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerTravellingWithPartner(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_PARTNER;
|
||||
}
|
||||
|
||||
if (PlayerInSafariZoneOrPalPark(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetFlyTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
|
||||
u32 *fieldMonID = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(u32));
|
||||
*fieldMonID = fieldMoveMon->fieldMonId;
|
||||
menu->unk_260 = fieldMonID;
|
||||
|
||||
menu->taskData = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(UnkStruct_0203D8AC));
|
||||
|
||||
sub_0206B70C(fieldSystem, menu->taskData, 1);
|
||||
sub_0203D884(fieldSystem, menu->taskData);
|
||||
sub_0203B674(menu, sub_0203C434);
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckSurf(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_FEN) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (PlayerAvatar_GetPlayerState(fieldMoveContext->fieldSystem->playerAvatar) == 0x2) {
|
||||
return FIELD_MOVE_ERROR_STATE;
|
||||
}
|
||||
|
||||
if (!(FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_SURF))) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerTravellingWithPartner(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_PARTNER;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetSurfTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_SurfTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_SurfTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10012, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckStrength(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_MINE) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_STRENGTH)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetStrengthTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_StrengthTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_StrengthTask(FieldTask *param0)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(param0);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
|
||||
ScriptManager_Change(param0, 10010, taskData->mapObj);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckDefog(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_RELIC) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_DEFOG)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetDefogTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_DefogTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_DefogTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10014, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckRockSmash(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_COAL) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (PlayerAvatar_GetPlayerState(fieldMoveContext->fieldSystem->playerAvatar) == 0x2) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_ROCK_SMASH)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetRockSmashTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_RockSmashTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_RockSmashTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10009, taskData->mapObj);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckWaterfall(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_BEACON) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_WATERFALL)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetWaterfallTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_WaterfallTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_WaterfallTask(FieldTask *param0)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(param0);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
|
||||
ScriptManager_Change(param0, 10013, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckRockClimb(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerHasRequiredBadge(fieldMoveContext, BADGE_ID_ICICLE) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_BADGE;
|
||||
}
|
||||
|
||||
if (!(FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_ROCK_CLIMB))) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerTravellingWithPartner(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_PARTNER;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetRockClimbTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_RockClimbTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_RockClimbTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10011, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckFlash(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (FieldMoves_IsMoveUsable(fieldMoveContext, FIELD_MOVE_FLASH)) {
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetFlashTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldMoveContext->fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_FlashTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_FlashTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10015, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckTeleport(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (MapHeader_IsTeleportAllowed(fieldMoveContext->mapId) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerTravellingWithPartner(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_PARTNER;
|
||||
}
|
||||
|
||||
if (PlayerInSafariZoneOrPalPark(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetTeleportTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
UnkStruct_020711C8 *v2 = sub_020711C8(11, fieldMoveMon->fieldMonId, fieldSystem->saveData);
|
||||
|
||||
menu->callback = FieldMoves_TeleportTask;
|
||||
menu->taskData = v2;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_TeleportTask(FieldTask *param0)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
UnkStruct_020711C8 *v1 = FieldTask_GetEnv(param0);
|
||||
void *v2 = ov6_02247530(fieldSystem, v1->unk_00, 4);
|
||||
|
||||
Heap_FreeToHeap(v1);
|
||||
FieldTask_InitJump(param0, ov6_02247554, v2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckDig(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (!((MapHeader_IsCave(fieldMoveContext->mapId) == TRUE) && (MapHeader_IsEscapeRopeAllowed(fieldMoveContext->mapId) == TRUE))) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerTravellingWithPartner(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_PARTNER;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetDigTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
|
||||
StartMenu *v1 = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
UnkStruct_020711C8 *v2 = sub_020711C8(11, fieldMoveMon->fieldMonId, fieldSystem->saveData);
|
||||
|
||||
v1->callback = FieldMoves_DigTask;
|
||||
v1->taskData = v2;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_DigTask(FieldTask *param0)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
UnkStruct_020711C8 *v1 = FieldTask_GetEnv(param0);
|
||||
void *v2 = ov6_02247488(fieldSystem, v1->unk_00, 11);
|
||||
|
||||
void *journalEntryLocationEvent = JournalEntry_CreateEventUsedMove(LOCATION_EVENT_USED_DIG - LOCATION_EVENT_USED_CUT, fieldSystem->location->mapId, HEAP_ID_FIELD);
|
||||
JournalEntry_SaveData(fieldSystem->journalEntry, journalEntryLocationEvent, JOURNAL_LOCATION);
|
||||
|
||||
Heap_FreeToHeap(v1);
|
||||
FieldTask_InitJump(param0, ov6_022474AC, v2);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckSweetScent(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if (PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
if (PlayerInPalPark(fieldMoveContext) == TRUE) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetSweetScentTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
|
||||
StartMenu *startMenu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
UnkStruct_020711C8 *v2 = sub_020711C8(11, fieldMoveMon->fieldMonId, fieldSystem->saveData);
|
||||
int unused;
|
||||
void *v4;
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
startMenu->callback = ov5_021F101C;
|
||||
startMenu->taskData = v2;
|
||||
startMenu->state = START_MENU_STATE_10;
|
||||
|
||||
v4 = JournalEntry_CreateEventUsedMove(LOCATION_EVENT_LURED_POKEMON - LOCATION_EVENT_USED_CUT, fieldSystem->location->mapId, HEAP_ID_FIELDMAP);
|
||||
JournalEntry_SaveData(fieldSystem->journalEntry, v4, JOURNAL_LOCATION);
|
||||
}
|
||||
|
||||
static enum FieldMoveError FieldMoves_CheckChatter(const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
if ((PlayerOutsideLinkRoom(fieldMoveContext) == FALSE) || (PersistedMapFeatures_IsCurrentDynamicMap(fieldMoveContext->fieldSystem, 9) == TRUE)) {
|
||||
return FIELD_MOVE_ERROR_LOCATION;
|
||||
}
|
||||
|
||||
return FIELD_MOVE_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void FieldMoves_SetChatterTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
|
||||
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
|
||||
FieldMoveTaskData *taskData = FieldMoves_AllocateTaskData(fieldMoveMon, fieldMoveContext);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->callback = FieldMoves_ChatterTask;
|
||||
menu->taskData = taskData;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL FieldMoves_ChatterTask(FieldTask *taskMan)
|
||||
{
|
||||
FieldMoveTaskData *taskData = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 8900, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, taskData->fieldMoveMon.fieldMonId, 0, 0, 0);
|
||||
FieldMoves_FreeTaskData(taskData);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -263,7 +263,7 @@ pokeplatinum_c = files(
|
|||
'unk_0206F314.c',
|
||||
'unk_02070428.c',
|
||||
'unk_0207064C.c',
|
||||
'unk_0207070C.c',
|
||||
'field_move_tasks.c',
|
||||
'unk_020711C8.c',
|
||||
'unk_020711EC.c',
|
||||
'platform_lift.c',
|
||||
|
|
|
|||
|
|
@ -297,8 +297,8 @@ BOOL FieldInput_Process(const FieldInput *input, FieldSystem *fieldSystem)
|
|||
}
|
||||
}
|
||||
|
||||
int distortionDir = sub_0205EAA0(fieldSystem->playerAvatar);
|
||||
u32 distortionBehavior = sub_020616F0(fieldSystem->playerAvatar, distortionDir);
|
||||
int distortionDir = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
|
||||
u32 distortionBehavior = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, distortionDir);
|
||||
int distortionScript = Field_TileBehaviorToScript(fieldSystem, distortionBehavior);
|
||||
|
||||
if (distortionScript != 0xffff) {
|
||||
|
|
@ -680,15 +680,15 @@ u16 Field_TileBehaviorToScript(FieldSystem *fieldSystem, u8 behavior)
|
|||
return 10100;
|
||||
}
|
||||
|
||||
if (ov5_021E0760(behavior, playerDir)) {
|
||||
if (PlayerAvatar_CanUseRockClimb(behavior, playerDir)) {
|
||||
return 10003;
|
||||
}
|
||||
|
||||
if (PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar) != PLAYER_STATE_SURFING) {
|
||||
TrainerInfo *info = SaveData_GetTrainerInfo(fieldSystem->saveData);
|
||||
u32 distortionBehavior = sub_02061760(fieldSystem->playerAvatar);
|
||||
u32 distortionBehavior = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
|
||||
|
||||
if (ov5_021E0118(fieldSystem->playerAvatar, distortionBehavior, behavior) && TrainerInfo_HasBadge(info, 3)) {
|
||||
if (PlayerAvatar_CanUseSurf(fieldSystem->playerAvatar, distortionBehavior, behavior) && TrainerInfo_HasBadge(info, 3)) {
|
||||
if (Party_HasMonWithMove(SaveData_GetParty(fieldSystem->saveData), MOVE_SURF) != PARTY_SLOT_NONE) {
|
||||
return 10004;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -593,12 +593,12 @@ void ov5_021E00EC(FieldTask *taskMan, int param1, int param2)
|
|||
ov5_021E00B0(fieldSystem, param1, &v0);
|
||||
}
|
||||
|
||||
int ov5_021E0118(PlayerAvatar *playerAvatar, u32 param1, u32 param2)
|
||||
int PlayerAvatar_CanUseSurf(PlayerAvatar *playerAvatar, u32 currTileBehavior, u32 nextTileBehavior)
|
||||
{
|
||||
MapObject *v0 = Player_MapObject(playerAvatar);
|
||||
|
||||
if (TileBehavior_IsSurfable(param2) == 1) {
|
||||
if ((TileBehavior_IsBridge(param1) == 1) || (TileBehavior_IsBridgeStart(param1) == 1)) {
|
||||
if (TileBehavior_IsSurfable(nextTileBehavior) == TRUE) {
|
||||
if ((TileBehavior_IsBridge(currTileBehavior) == TRUE) || (TileBehavior_IsBridgeStart(currTileBehavior) == TRUE)) {
|
||||
if (sub_02062F30(v0) == 1) {
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -974,24 +974,24 @@ void ov5_021E0734(FieldTask *param0, int param1, int param2)
|
|||
ov5_021E06F8(fieldSystem, param1, &v0);
|
||||
}
|
||||
|
||||
int ov5_021E0760(u32 param0, int param1)
|
||||
BOOL PlayerAvatar_CanUseRockClimb(u32 metatileBehavior, int facingDir)
|
||||
{
|
||||
switch (param1) {
|
||||
case 0:
|
||||
case 1:
|
||||
if (TileBehavior_IsRockClimbNorthSouth(param0) == 1) {
|
||||
return 1;
|
||||
switch (facingDir) {
|
||||
case DIR_NORTH:
|
||||
case DIR_SOUTH:
|
||||
if (TileBehavior_IsRockClimbNorthSouth(metatileBehavior) == 1) {
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
if (TileBehavior_IsRockClimbEastWest(param0) == 1) {
|
||||
return 1;
|
||||
case DIR_WEST:
|
||||
case DIR_EAST:
|
||||
if (TileBehavior_IsRockClimbEastWest(metatileBehavior) == 1) {
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL ov5_021E07A0(FieldTask *param0)
|
||||
|
|
@ -1082,10 +1082,10 @@ static int ov5_021E08C0(UnkStruct_ov5_021F9B54 *param0)
|
|||
}
|
||||
|
||||
{
|
||||
int v0 = MapObject_GetMovingDir(param0->unk_14);
|
||||
u8 v1 = MapObject_GetTileBehaviorFromDir(param0->unk_14, v0);
|
||||
int facingDir = MapObject_GetMovingDir(param0->unk_14);
|
||||
u8 metatileBehaviour = MapObject_GetTileBehaviorFromDir(param0->unk_14, facingDir);
|
||||
|
||||
if (ov5_021E0760(v1, v0) == 1) {
|
||||
if (PlayerAvatar_CanUseRockClimb(metatileBehaviour, facingDir) == TRUE) {
|
||||
param0->unk_00 = 5;
|
||||
return 1 + 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ int PlayerAvatar_GetMoveDir(PlayerAvatar *const playerAvatar)
|
|||
return MapObject_GetMovingDir(Player_MapObject(playerAvatar));
|
||||
}
|
||||
|
||||
int sub_0205EAA0(PlayerAvatar *const playerAvatar)
|
||||
int PlayerAvatar_GetDistortionDir(PlayerAvatar *const playerAvatar)
|
||||
{
|
||||
if (PlayerAvatar_DistortionStateOnFloor(playerAvatar) == TRUE) {
|
||||
return PlayerAvatar_GetDir(playerAvatar);
|
||||
|
|
|
|||
246
src/start_menu.c
246
src/start_menu.c
|
|
@ -15,14 +15,12 @@
|
|||
#include "struct_defs/struct_0203D8AC.h"
|
||||
#include "struct_defs/struct_02068630.h"
|
||||
#include "struct_defs/struct_020708E0.h"
|
||||
#include "struct_defs/struct_020709CC.h"
|
||||
#include "struct_defs/struct_02072014.h"
|
||||
#include "struct_defs/struct_02097728.h"
|
||||
#include "struct_defs/struct_02098C44.h"
|
||||
|
||||
#include "applications/pokemon_summary_screen/main.h"
|
||||
#include "field/field_system.h"
|
||||
#include "functypes/funcptr_0203B7C0.h"
|
||||
#include "functypes/funcptr_0203BC5C.h"
|
||||
#include "overlay005/fieldmap.h"
|
||||
#include "overlay005/ov5_021D2F14.h"
|
||||
|
|
@ -33,6 +31,7 @@
|
|||
#include "bg_window.h"
|
||||
#include "catching_show.h"
|
||||
#include "dexmode_checker.h"
|
||||
#include "field_move_tasks.h"
|
||||
#include "field_overworld_state.h"
|
||||
#include "field_system.h"
|
||||
#include "field_task.h"
|
||||
|
|
@ -82,7 +81,6 @@
|
|||
#include "unk_020683F4.h"
|
||||
#include "unk_0206B9D8.h"
|
||||
#include "unk_0207064C.h"
|
||||
#include "unk_0207070C.h"
|
||||
#include "unk_02071D40.h"
|
||||
#include "unk_0207AE68.h"
|
||||
#include "unk_0207CB08.h"
|
||||
|
|
@ -346,7 +344,7 @@ static StartMenu *StartMenu_Alloc(void)
|
|||
|
||||
menu->state = START_MENU_STATE_INIT;
|
||||
menu->unk_28 = 0;
|
||||
menu->unk_25C = NULL;
|
||||
menu->taskData = NULL;
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
|
@ -415,7 +413,7 @@ static BOOL sub_0203AC44(FieldTask *taskMan)
|
|||
case START_MENU_STATE_INIT:
|
||||
MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan);
|
||||
sub_0206842C(fieldSystem, &menu->unk_230);
|
||||
sub_02070728(fieldSystem, &menu->unk_24C);
|
||||
FieldMoves_SetUsableMoves(fieldSystem, &menu->fieldMoveContext);
|
||||
sub_0203ADFC(taskMan);
|
||||
sub_0203B094(taskMan);
|
||||
menu->state = START_MENU_STATE_SELECT;
|
||||
|
|
@ -475,7 +473,7 @@ static BOOL sub_0203AC44(FieldTask *taskMan)
|
|||
break;
|
||||
case START_MENU_STATE_11:
|
||||
if (IsScreenTransitionDone()) {
|
||||
FieldTask_InitJump(taskMan, menu->unk_22C, menu->unk_25C);
|
||||
FieldTask_InitJump(taskMan, menu->callback, menu->taskData);
|
||||
Heap_FreeToHeap(menu);
|
||||
}
|
||||
break;
|
||||
|
|
@ -893,7 +891,7 @@ static void StartMenu_ApplicationStart(FieldTask *taskMan)
|
|||
Window_Remove(&menu->unk_00);
|
||||
sub_0203B200(taskMan);
|
||||
|
||||
menu->unk_22C(taskMan);
|
||||
menu->callback(taskMan);
|
||||
menu->state = START_MENU_STATE_APP_RUN;
|
||||
}
|
||||
|
||||
|
|
@ -909,12 +907,12 @@ static void StartMenu_ApplicationRun(FieldTask *taskMan)
|
|||
return;
|
||||
}
|
||||
|
||||
menu->unk_22C(taskMan);
|
||||
menu->callback(taskMan);
|
||||
}
|
||||
|
||||
void sub_0203B674(StartMenu *menu, void *param1)
|
||||
{
|
||||
menu->unk_22C = param1;
|
||||
menu->callback = param1;
|
||||
menu->state = START_MENU_STATE_APP_RUN;
|
||||
}
|
||||
|
||||
|
|
@ -924,7 +922,7 @@ static BOOL StartMenu_SelectPokedex(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = StartMenu_OpenPokedex;
|
||||
menu->callback = StartMenu_OpenPokedex;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -950,8 +948,8 @@ static BOOL StartMenu_OpenPokedex(FieldTask *taskMan)
|
|||
|
||||
sub_0203E0AC(fieldSystem, pokedexArgs);
|
||||
|
||||
menu->unk_25C = pokedexArgs;
|
||||
menu->unk_22C = StartMenu_PokedexEnd;
|
||||
menu->taskData = pokedexArgs;
|
||||
menu->callback = StartMenu_PokedexEnd;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -966,8 +964,8 @@ static BOOL StartMenu_PokedexEnd(FieldTask *taskMan)
|
|||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
if (menu->unk_25C != NULL) {
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_25C);
|
||||
if (menu->taskData != NULL) {
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->taskData);
|
||||
}
|
||||
|
||||
menu->state = START_MENU_STATE_12;
|
||||
|
|
@ -981,7 +979,7 @@ static BOOL StartMenu_SelectPokemon(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = sub_0203B78C;
|
||||
menu->callback = sub_0203B78C;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -995,8 +993,8 @@ static BOOL sub_0203B78C(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0203D390(fieldSystem, &menu->unk_24C, 0);
|
||||
menu->unk_22C = sub_0203B7C0;
|
||||
menu->taskData = sub_0203D390(fieldSystem, &menu->fieldMoveContext, 0);
|
||||
menu->callback = sub_0203B7C0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1011,8 +1009,8 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
menu = FieldTask_GetEnv(taskMan);
|
||||
partyMan = (PartyManagementData *)Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PartyManagementData));
|
||||
|
||||
memcpy(partyMan, menu->unk_25C, sizeof(PartyManagementData));
|
||||
Heap_FreeToHeap(menu->unk_25C);
|
||||
memcpy(partyMan, menu->taskData, sizeof(PartyManagementData));
|
||||
Heap_FreeToHeap(menu->taskData);
|
||||
|
||||
switch (partyMan->unk_23) {
|
||||
case 1: {
|
||||
|
|
@ -1034,7 +1032,7 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
PokemonSummaryScreen_SetPlayerProfile(summary, SaveData_GetTrainerInfo(fieldSystem->saveData));
|
||||
FieldSystem_OpenSummaryScreen(fieldSystem, summary);
|
||||
|
||||
menu->unk_25C = summary;
|
||||
menu->taskData = summary;
|
||||
sub_0203B674(menu, sub_0203C1C8);
|
||||
} break;
|
||||
case 4: {
|
||||
|
|
@ -1061,7 +1059,7 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
v5->unk_02 = 0;
|
||||
menu->unk_260 = v5;
|
||||
|
||||
menu->unk_25C = summary;
|
||||
menu->taskData = summary;
|
||||
sub_0203B674(menu, sub_0203C1C8);
|
||||
} break;
|
||||
case 5: {
|
||||
|
|
@ -1088,14 +1086,14 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
v7->unk_02 = (u16)partyMan->unk_34;
|
||||
menu->unk_260 = v7;
|
||||
|
||||
menu->unk_25C = summary;
|
||||
menu->taskData = summary;
|
||||
sub_0203B674(menu, sub_0203C1C8);
|
||||
} break;
|
||||
case 6: {
|
||||
UnkStruct_02097728 *v8;
|
||||
|
||||
v8 = sub_0203D920(fieldSystem, 2, partyMan->selectedMonSlot, Item_MailNumber(partyMan->unk_24), 11);
|
||||
menu->unk_25C = v8;
|
||||
menu->taskData = v8;
|
||||
|
||||
if (partyMan->unk_20 == 10) {
|
||||
menu->unk_260 = sub_0203C540(
|
||||
|
|
@ -1114,7 +1112,7 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
v10 = Party_GetPokemonBySlotIndex(SaveData_GetParty(fieldSystem->saveData), partyMan->selectedMonSlot);
|
||||
v9 = sub_0203D984(fieldSystem, v10, 11);
|
||||
|
||||
menu->unk_25C = v9;
|
||||
menu->taskData = v9;
|
||||
menu->unk_260 = sub_0203C540(partyMan->unk_24, 2, partyMan->selectedMonSlot);
|
||||
|
||||
sub_0203B674(menu, sub_0203C558);
|
||||
|
|
@ -1126,11 +1124,11 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
|
||||
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
|
||||
TrainerInfo *v12 = SaveData_GetTrainerInfo(fieldSystem->saveData);
|
||||
menu->unk_25C = sub_0207D824(bag, Unk_020EA020, HEAP_ID_FIELDMAP);
|
||||
menu->taskData = sub_0207D824(bag, Unk_020EA020, HEAP_ID_FIELDMAP);
|
||||
|
||||
sub_0207CB2C(menu->unk_25C, fieldSystem->saveData, 1, fieldSystem->bagCursor);
|
||||
sub_0207CB2C(menu->taskData, fieldSystem->saveData, 1, fieldSystem->bagCursor);
|
||||
|
||||
sub_0203D1E4(fieldSystem, menu->unk_25C);
|
||||
sub_0203D1E4(fieldSystem, menu->taskData);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
} break;
|
||||
case 8: {
|
||||
|
|
@ -1142,7 +1140,7 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
v14->unk_04 = partyMan->unk_38;
|
||||
v14->unk_08 = partyMan->unk_3C;
|
||||
|
||||
menu->unk_25C = v14;
|
||||
menu->taskData = v14;
|
||||
menu->state = START_MENU_STATE_EVOLVE_INIT;
|
||||
} break;
|
||||
case 9: {
|
||||
|
|
@ -1153,7 +1151,7 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
v15->unk_00 = partyMan->selectedMonSlot;
|
||||
v15->unk_04 = partyMan->unk_38;
|
||||
v15->unk_08 = partyMan->unk_3C;
|
||||
menu->unk_25C = v15;
|
||||
menu->taskData = v15;
|
||||
menu->state = START_MENU_STATE_EVOLVE_INIT;
|
||||
} break;
|
||||
case 16:
|
||||
|
|
@ -1169,33 +1167,33 @@ BOOL sub_0203B7C0(FieldTask *taskMan)
|
|||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
UnkFuncPtr_0203B7C0 v16;
|
||||
UnkStruct_020709CC v17;
|
||||
FieldMoveTaskContext v16;
|
||||
FieldMovePokemon fieldMoveMon;
|
||||
|
||||
v17.unk_06 = partyMan->unk_23 - 11;
|
||||
v17.unk_04 = partyMan->selectedMonSlot;
|
||||
v17.unk_00 = taskMan;
|
||||
fieldMoveMon.fieldMove = partyMan->unk_23 - 11;
|
||||
fieldMoveMon.fieldMonId = partyMan->selectedMonSlot;
|
||||
fieldMoveMon.fieldTask = taskMan;
|
||||
|
||||
v16 = (UnkFuncPtr_0203B7C0)sub_0207070C(0, v17.unk_06);
|
||||
v16(&v17, &menu->unk_24C);
|
||||
v16 = (FieldMoveTaskContext)FieldMove_GetTaskOrError(FIELD_MOVE_TASK, fieldMoveMon.fieldMove);
|
||||
v16(&fieldMoveMon, &menu->fieldMoveContext);
|
||||
break;
|
||||
case 10:
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
break;
|
||||
default:
|
||||
if ((partyMan->unk_20 == 5) || (partyMan->unk_20 == 6) || (partyMan->unk_20 == 7) || (partyMan->unk_20 == 16) || (partyMan->unk_20 == 8)) {
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
|
||||
if (partyMan->selectedMonSlot >= 6) {
|
||||
sub_0207CB70(menu->unk_25C, 0);
|
||||
sub_0207CB70(menu->taskData, 0);
|
||||
} else {
|
||||
sub_0207CB70(menu->unk_25C, partyMan->selectedMonSlot);
|
||||
sub_0207CB70(menu->taskData, partyMan->selectedMonSlot);
|
||||
}
|
||||
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
} else if (partyMan->unk_20 == 9) {
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
} else {
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
|
@ -1214,7 +1212,7 @@ static BOOL StartMenu_SelectBag(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = StartMenu_Bag;
|
||||
menu->callback = StartMenu_Bag;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -1225,9 +1223,9 @@ static BOOL StartMenu_Bag(FieldTask *taskMan)
|
|||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
StartMenu *menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0207CB70(menu->unk_25C, 0);
|
||||
menu->unk_22C = sub_0203BC5C;
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0207CB70(menu->taskData, 0);
|
||||
menu->callback = sub_0203BC5C;
|
||||
|
||||
FieldSystem_SaveStateIfCommunicationOff(fieldSystem);
|
||||
|
||||
|
|
@ -1244,8 +1242,8 @@ static BOOL sub_0203BC5C(FieldTask *taskMan)
|
|||
menu = FieldTask_GetEnv(taskMan);
|
||||
v2 = sub_0207CB08(HEAP_ID_FIELDMAP);
|
||||
|
||||
memcpy(v2, menu->unk_25C, sub_0207CB20());
|
||||
Heap_FreeToHeap(menu->unk_25C);
|
||||
memcpy(v2, menu->taskData, sub_0207CB20());
|
||||
Heap_FreeToHeap(menu->taskData);
|
||||
|
||||
switch (sub_0207CB9C(v2)) {
|
||||
case 0: {
|
||||
|
|
@ -1273,14 +1271,14 @@ static BOOL sub_0203BC5C(FieldTask *taskMan)
|
|||
v6->unk_04 = SaveData_GetBag(fieldSystem->saveData);
|
||||
v6->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v6->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v6->unk_18 = &menu->unk_24C;
|
||||
v6->unk_18 = &menu->fieldMoveContext;
|
||||
v6->unk_21 = 0;
|
||||
v6->unk_20 = 9;
|
||||
v6->unk_24 = sub_0207CB94(v2);
|
||||
v6->unk_1C = fieldSystem;
|
||||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v6);
|
||||
menu->unk_25C = v6;
|
||||
menu->taskData = v6;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
} break;
|
||||
case 4: {
|
||||
|
|
@ -1301,7 +1299,7 @@ static BOOL sub_0203BC5C(FieldTask *taskMan)
|
|||
UnkStruct_0203C540 *v12;
|
||||
|
||||
v11 = sub_0203D920(fieldSystem, 2, v9, Item_MailNumber(v10), 11);
|
||||
menu->unk_25C = v11;
|
||||
menu->taskData = v11;
|
||||
menu->unk_260 = sub_0203C540(v10, 0, (u8)v9);
|
||||
sub_0203B674(menu, sub_0203C558);
|
||||
} else {
|
||||
|
|
@ -1314,7 +1312,7 @@ static BOOL sub_0203BC5C(FieldTask *taskMan)
|
|||
v13->unk_04 = SaveData_GetBag(fieldSystem->saveData);
|
||||
v13->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v13->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v13->unk_18 = &menu->unk_24C;
|
||||
v13->unk_18 = &menu->fieldMoveContext;
|
||||
v13->unk_21 = 0;
|
||||
v13->unk_24 = sub_0207CB94(v2);
|
||||
v13->selectedMonSlot = (u8)v9;
|
||||
|
|
@ -1327,7 +1325,7 @@ static BOOL sub_0203BC5C(FieldTask *taskMan)
|
|||
}
|
||||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v13);
|
||||
menu->unk_25C = v13;
|
||||
menu->taskData = v13;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
} break;
|
||||
|
|
@ -1348,7 +1346,7 @@ static BOOL StartMenu_SelectTrainerCard(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = StartMenu_TrainerCard;
|
||||
menu->callback = StartMenu_TrainerCard;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -1362,12 +1360,12 @@ static BOOL StartMenu_TrainerCard(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_02071F04(HEAP_ID_FIELDMAP);
|
||||
menu->taskData = sub_02071F04(HEAP_ID_FIELDMAP);
|
||||
|
||||
sub_02071D40(1, 1, 0, 0xff, fieldSystem, (TrainerCard *)menu->unk_25C);
|
||||
sub_0203E09C(fieldSystem, (TrainerCard *)menu->unk_25C);
|
||||
sub_02071D40(1, 1, 0, 0xff, fieldSystem, (TrainerCard *)menu->taskData);
|
||||
sub_0203E09C(fieldSystem, (TrainerCard *)menu->taskData);
|
||||
|
||||
menu->unk_22C = sub_0203BF00;
|
||||
menu->callback = sub_0203BF00;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1379,8 +1377,8 @@ static BOOL sub_0203BF00(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
sub_020721D4(fieldSystem, (TrainerCard *)menu->unk_25C);
|
||||
sub_02071F20((TrainerCard *)menu->unk_25C);
|
||||
sub_020721D4(fieldSystem, (TrainerCard *)menu->taskData);
|
||||
sub_02071F20((TrainerCard *)menu->taskData);
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->state = START_MENU_STATE_12;
|
||||
|
|
@ -1412,8 +1410,8 @@ static void StartMenu_Save(FieldTask *taskMan)
|
|||
if (SaveData_OverwriteCheck(fieldSystem->saveData)) {
|
||||
ScriptManager_Start(taskMan, 2034, NULL, NULL);
|
||||
} else {
|
||||
menu->unk_25C = Heap_AllocFromHeap(HEAP_ID_FIELD_TASK, sizeof(SaveMenu));
|
||||
saveMenu = menu->unk_25C;
|
||||
menu->taskData = Heap_AllocFromHeap(HEAP_ID_FIELD_TASK, sizeof(SaveMenu));
|
||||
saveMenu = menu->taskData;
|
||||
saveMenu->unk_04 = 0;
|
||||
|
||||
ScriptManager_Start(taskMan, 2005, NULL, &saveMenu->unk_04);
|
||||
|
|
@ -1426,7 +1424,7 @@ static void StartMenu_SaveWait(FieldTask *taskMan)
|
|||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
StartMenu *menu = FieldTask_GetEnv(taskMan);
|
||||
SaveMenu *saveMenu = menu->unk_25C;
|
||||
SaveMenu *saveMenu = menu->taskData;
|
||||
|
||||
if (SaveData_OverwriteCheck(fieldSystem->saveData)) {
|
||||
menu->state = START_MENU_STATE_INIT;
|
||||
|
|
@ -1447,7 +1445,7 @@ static BOOL StartMenu_SelectOptions(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = StartMenu_Options;
|
||||
menu->callback = StartMenu_Options;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -1461,8 +1459,8 @@ static BOOL StartMenu_Options(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = FieldSystem_OpenOptionsMenu(fieldSystem);
|
||||
menu->unk_22C = sub_0203C050;
|
||||
menu->taskData = FieldSystem_OpenOptionsMenu(fieldSystem);
|
||||
menu->callback = sub_0203C050;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1475,7 +1473,7 @@ static BOOL sub_0203C050(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
Heap_FreeToHeap(menu->unk_25C);
|
||||
Heap_FreeToHeap(menu->taskData);
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->state = START_MENU_STATE_12;
|
||||
|
|
@ -1489,7 +1487,7 @@ static BOOL StartMenu_SelectChat(FieldTask *taskMan)
|
|||
|
||||
ov5_021D1744(0);
|
||||
|
||||
menu->unk_22C = sub_0203C0A0;
|
||||
menu->callback = sub_0203C0A0;
|
||||
menu->state = START_MENU_STATE_APP_START;
|
||||
|
||||
return 1;
|
||||
|
|
@ -1504,13 +1502,13 @@ static BOOL sub_0203C0A0(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0209747C(2, 0, fieldSystem->saveData, HEAP_ID_FIELDMAP);
|
||||
menu->taskData = sub_0209747C(2, 0, fieldSystem->saveData, HEAP_ID_FIELDMAP);
|
||||
|
||||
sub_02014A9C(&v2, 4);
|
||||
sub_02097500(menu->unk_25C, &v2);
|
||||
sub_0203D874(fieldSystem, (UnkStruct_0209747C *)menu->unk_25C);
|
||||
sub_02097500(menu->taskData, &v2);
|
||||
sub_0203D874(fieldSystem, (UnkStruct_0209747C *)menu->taskData);
|
||||
|
||||
menu->unk_22C = sub_0203C0F8;
|
||||
menu->callback = sub_0203C0F8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1524,8 +1522,8 @@ static BOOL sub_0203C0F8(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
if (sub_02097528(menu->unk_25C) == 0) {
|
||||
sub_02097540(menu->unk_25C, &sentence);
|
||||
if (sub_02097528(menu->taskData) == 0) {
|
||||
sub_02097540(menu->taskData, &sentence);
|
||||
|
||||
if (CommServerClient_IsInitialized()) {
|
||||
sub_0205C12C(&sentence);
|
||||
|
|
@ -1537,7 +1535,7 @@ static BOOL sub_0203C0F8(FieldTask *taskMan)
|
|||
menu->state = START_MENU_STATE_12;
|
||||
}
|
||||
|
||||
sub_020974EC((UnkStruct_0209747C *)menu->unk_25C);
|
||||
sub_020974EC((UnkStruct_0209747C *)menu->taskData);
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
sub_0205C2B0(fieldSystem->unk_80);
|
||||
|
||||
|
|
@ -1578,8 +1576,8 @@ static BOOL sub_0203C1C8(FieldTask *taskMan)
|
|||
menu = FieldTask_GetEnv(taskMan);
|
||||
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PokemonSummary));
|
||||
|
||||
memcpy(v2, menu->unk_25C, sizeof(PokemonSummary));
|
||||
Heap_FreeToHeap(menu->unk_25C);
|
||||
memcpy(v2, menu->taskData, sizeof(PokemonSummary));
|
||||
Heap_FreeToHeap(menu->taskData);
|
||||
|
||||
switch (v2->mode) {
|
||||
case SUMMARY_MODE_SELECT_MOVE: {
|
||||
|
|
@ -1595,7 +1593,7 @@ static BOOL sub_0203C1C8(FieldTask *taskMan)
|
|||
v3->unk_04 = SaveData_GetBag(fieldSystem->saveData);
|
||||
v3->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v3->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v3->unk_18 = &menu->unk_24C;
|
||||
v3->unk_18 = &menu->fieldMoveContext;
|
||||
v3->unk_21 = 0;
|
||||
v3->unk_1C = fieldSystem;
|
||||
|
||||
|
|
@ -1614,11 +1612,11 @@ static BOOL sub_0203C1C8(FieldTask *taskMan)
|
|||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v3);
|
||||
Heap_FreeToHeap(menu->unk_260);
|
||||
menu->unk_25C = v3;
|
||||
menu->taskData = v3;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
} break;
|
||||
default:
|
||||
menu->unk_25C = sub_0203D390(fieldSystem, &menu->unk_24C, v2->monIndex);
|
||||
menu->taskData = sub_0203D390(fieldSystem, &menu->fieldMoveContext, v2->monIndex);
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
|
|
@ -1635,24 +1633,24 @@ static void sub_0203C2D8(FieldTask *taskMan, u16 item)
|
|||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
StartMenu *menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_020972FC(HEAP_ID_FIELDMAP);
|
||||
menu->taskData = sub_020972FC(HEAP_ID_FIELDMAP);
|
||||
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
|
||||
sub_02097320(menu->unk_25C, item, 1);
|
||||
sub_02097320(menu->taskData, item, 1);
|
||||
v6 = 0;
|
||||
|
||||
for (i = 0; i < NUM_BERRIES; i++) {
|
||||
item = Item_ForBerryNumber(i);
|
||||
|
||||
if (Bag_CanRemoveItem(bag, item, 1, HEAP_ID_FIELDMAP) == TRUE) {
|
||||
sub_02097320(menu->unk_25C, item, 0);
|
||||
sub_02097320(menu->taskData, item, 0);
|
||||
v6++;
|
||||
}
|
||||
}
|
||||
|
||||
BagCursor_GetFieldPocketPosition(fieldSystem->bagCursor, 4, &v5, &v4);
|
||||
sub_0209733C(menu->unk_25C, v4, v5, v6 + 3);
|
||||
sub_0209733C(menu->taskData, v4, v5, v6 + 3);
|
||||
|
||||
sub_0203D2E4(fieldSystem, menu->unk_25C);
|
||||
sub_0203D2E4(fieldSystem, menu->taskData);
|
||||
sub_0203B674(menu, sub_0203C390);
|
||||
}
|
||||
|
||||
|
|
@ -1665,11 +1663,11 @@ static BOOL sub_0203C390(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
sub_02097390(menu->unk_25C, &v2, &v3);
|
||||
sub_02097390(menu->taskData, &v2, &v3);
|
||||
BagCursor_SetFieldPocketPosition(fieldSystem->bagCursor, 4, v3, v2);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_25C);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->taskData);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1683,8 +1681,8 @@ BOOL sub_0203C3F4(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->taskData);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1703,11 +1701,11 @@ BOOL sub_0203C434(FieldTask *taskMan)
|
|||
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_260);
|
||||
|
||||
v2 = (UnkStruct_0203D8AC *)menu->unk_25C;
|
||||
v2 = (UnkStruct_0203D8AC *)menu->taskData;
|
||||
|
||||
if (!(v2->unk_10)) {
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D390(fieldSystem, &menu->unk_24C, v3);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->taskData);
|
||||
menu->taskData = sub_0203D390(fieldSystem, &menu->fieldMoveContext, v3);
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
} else {
|
||||
Pokemon *mon;
|
||||
|
|
@ -1719,11 +1717,11 @@ BOOL sub_0203C434(FieldTask *taskMan)
|
|||
journalEntryLocationEvent = JournalEntry_CreateEventUsedMove(LOCATION_EVENT_FLEW_TO_LOCATION - LOCATION_EVENT_USED_CUT, v2->unk_1C, HEAP_ID_FIELDMAP);
|
||||
|
||||
JournalEntry_SaveData(fieldSystem->journalEntry, journalEntryLocationEvent, JOURNAL_LOCATION);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->unk_25C);
|
||||
Heap_FreeToHeapExplicit(HEAP_ID_FIELDMAP, menu->taskData);
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070680;
|
||||
menu->unk_25C = v5;
|
||||
menu->callback = sub_02070680;
|
||||
menu->taskData = v5;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
|
|
@ -1738,7 +1736,7 @@ BOOL sub_0203C50C(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1769,30 +1767,30 @@ BOOL sub_0203C558(FieldTask *taskMan)
|
|||
|
||||
switch (v2->unk_03) {
|
||||
case 3:
|
||||
sub_02097770(menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_02097770(menu->taskData);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
break;
|
||||
case 2:
|
||||
sub_02097770(menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D390(fieldSystem, &menu->unk_24C, v2->unk_02);
|
||||
sub_02097770(menu->taskData);
|
||||
menu->taskData = sub_0203D390(fieldSystem, &menu->fieldMoveContext, v2->unk_02);
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
break;
|
||||
case 0:
|
||||
if (sub_02097728(menu->unk_25C) == 1) {
|
||||
if (sub_02097728(menu->taskData) == 1) {
|
||||
sub_0203C668(fieldSystem, menu, 12);
|
||||
} else {
|
||||
sub_02097770(menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D390(fieldSystem, &menu->unk_24C, v2->unk_02);
|
||||
sub_02097770(menu->taskData);
|
||||
menu->taskData = sub_0203D390(fieldSystem, &menu->fieldMoveContext, v2->unk_02);
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_02097728(menu->unk_25C) == 1) {
|
||||
if (sub_02097728(menu->taskData) == 1) {
|
||||
sub_0203C668(fieldSystem, menu, 11);
|
||||
} else {
|
||||
sub_02097770(menu->unk_25C);
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_02097770(menu->taskData);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
}
|
||||
break;
|
||||
|
|
@ -1802,12 +1800,12 @@ BOOL sub_0203C558(FieldTask *taskMan)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void sub_0203C668(FieldSystem *fieldSystem, StartMenu *param1, u8 param2)
|
||||
static void sub_0203C668(FieldSystem *fieldSystem, StartMenu *menu, u8 param2)
|
||||
{
|
||||
UnkStruct_0203C540 *v0;
|
||||
PartyManagementData *partyMan;
|
||||
|
||||
v0 = param1->unk_260;
|
||||
v0 = menu->unk_260;
|
||||
partyMan = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PartyManagementData));
|
||||
|
||||
memset(partyMan, 0, sizeof(PartyManagementData));
|
||||
|
|
@ -1815,19 +1813,19 @@ static void sub_0203C668(FieldSystem *fieldSystem, StartMenu *param1, u8 param2)
|
|||
partyMan->unk_04 = SaveData_GetBag(fieldSystem->saveData);
|
||||
partyMan->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
partyMan->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
partyMan->unk_18 = ¶m1->unk_24C;
|
||||
partyMan->unk_18 = &menu->fieldMoveContext;
|
||||
partyMan->unk_21 = 0;
|
||||
partyMan->unk_24 = v0->unk_00;
|
||||
partyMan->selectedMonSlot = v0->unk_02;
|
||||
partyMan->unk_20 = param2;
|
||||
partyMan->unk_1C = fieldSystem;
|
||||
|
||||
sub_02097750(param1->unk_25C, Party_GetPokemonBySlotIndex(partyMan->unk_00, v0->unk_02));
|
||||
sub_02097770(param1->unk_25C);
|
||||
sub_02097750(menu->taskData, Party_GetPokemonBySlotIndex(partyMan->unk_00, v0->unk_02));
|
||||
sub_02097770(menu->taskData);
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, partyMan);
|
||||
|
||||
param1->unk_25C = partyMan;
|
||||
sub_0203B674(param1, sub_0203B7C0);
|
||||
menu->taskData = partyMan;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
BOOL sub_0203C710(FieldTask *taskMan)
|
||||
|
|
@ -1838,9 +1836,9 @@ BOOL sub_0203C710(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
sub_02098AF0(menu->unk_25C);
|
||||
sub_02098AF0(menu->taskData);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1854,7 +1852,7 @@ BOOL sub_0203C750(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1868,7 +1866,7 @@ BOOL sub_0203C784(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
sub_0203B674(menu, sub_0203BC5C);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1885,7 +1883,7 @@ static void StartMenu_EvolveInit(FieldTask *taskMan)
|
|||
|
||||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
v2 = menu->unk_25C;
|
||||
v2 = menu->taskData;
|
||||
|
||||
Sound_StopWaveOutAndSequences();
|
||||
Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_73, 0x30000);
|
||||
|
|
@ -1906,9 +1904,9 @@ static void StartMenu_EvolveInit(FieldTask *taskMan)
|
|||
menu->unk_260 = v6;
|
||||
}
|
||||
|
||||
Heap_FreeToHeap(menu->unk_25C);
|
||||
Heap_FreeToHeap(menu->taskData);
|
||||
|
||||
menu->unk_25C = v5;
|
||||
menu->taskData = v5;
|
||||
menu->state = START_MENU_STATE_EVOLVE;
|
||||
}
|
||||
|
||||
|
|
@ -1920,19 +1918,19 @@ static void StartMenu_Evolve(FieldTask *taskMan)
|
|||
fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
menu = FieldTask_GetEnv(taskMan);
|
||||
|
||||
if (sub_0207B0D0(menu->unk_25C) == 1) {
|
||||
sub_0207B0E0(menu->unk_25C);
|
||||
if (sub_0207B0D0(menu->taskData) == 1) {
|
||||
sub_0207B0E0(menu->taskData);
|
||||
Heap_Destroy(HEAP_ID_73);
|
||||
Sound_StopBGM(1141, 0);
|
||||
Sound_SetScene(0);
|
||||
sub_020556A0(fieldSystem, fieldSystem->location->mapId);
|
||||
|
||||
menu->unk_25C = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
menu->taskData = sub_0203D20C(fieldSystem, &menu->unk_230);
|
||||
|
||||
{
|
||||
u32 v2 = *((u32 *)menu->unk_260);
|
||||
|
||||
sub_0207CB70(menu->unk_25C, (u8)v2);
|
||||
sub_0207CB70(menu->taskData, (u8)v2);
|
||||
Heap_FreeToHeap(menu->unk_260);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
#include "struct_defs/struct_020556C4.h"
|
||||
#include "struct_defs/struct_020684D0.h"
|
||||
#include "struct_defs/struct_0206BC70.h"
|
||||
#include "struct_defs/struct_02070950.h"
|
||||
#include "struct_defs/struct_02072014.h"
|
||||
#include "struct_defs/struct_0208737C.h"
|
||||
#include "struct_defs/struct_02097728.h"
|
||||
|
|
@ -88,6 +87,7 @@
|
|||
#include "coins.h"
|
||||
#include "dexmode_checker.h"
|
||||
#include "field_battle_data_transfer.h"
|
||||
#include "field_move_tasks.h"
|
||||
#include "field_overworld_state.h"
|
||||
#include "field_system.h"
|
||||
#include "field_task.h"
|
||||
|
|
@ -115,7 +115,6 @@
|
|||
#include "unk_02017498.h"
|
||||
#include "unk_02028124.h"
|
||||
#include "unk_020298BC.h"
|
||||
#include "unk_0202ACE0.h"
|
||||
#include "unk_0202C7FC.h"
|
||||
#include "unk_0202C858.h"
|
||||
#include "unk_0202D05C.h"
|
||||
|
|
@ -393,7 +392,7 @@ static PartyManagementData *sub_0203D344(int heapID, FieldSystem *fieldSystem, i
|
|||
return v0;
|
||||
}
|
||||
|
||||
void *sub_0203D390(FieldSystem *fieldSystem, UnkStruct_02070950 *param1, u8 param2)
|
||||
void *sub_0203D390(FieldSystem *fieldSystem, FieldMoveContext *param1, u8 param2)
|
||||
{
|
||||
PartyManagementData *v0 = sub_0203D344(HEAP_ID_FIELDMAP, fieldSystem, 0, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -2427,7 +2427,7 @@ void sub_02061674(PlayerAvatar *playerAvatar, int param1, int *param2, int *para
|
|||
(*param4) += v0->unk_04;
|
||||
}
|
||||
|
||||
u32 sub_020616F0(PlayerAvatar *playerAvatar, int param1)
|
||||
u32 PlayerAvatar_GetDistortionTileBehaviour(PlayerAvatar *playerAvatar, int param1)
|
||||
{
|
||||
u32 v0;
|
||||
|
||||
|
|
@ -2447,7 +2447,7 @@ u32 sub_020616F0(PlayerAvatar *playerAvatar, int param1)
|
|||
return v0;
|
||||
}
|
||||
|
||||
u32 sub_02061760(PlayerAvatar *playerAvatar)
|
||||
u32 PlayerAvatar_GetDistortionCurrTileBehaviour(PlayerAvatar *playerAvatar)
|
||||
{
|
||||
u32 v0;
|
||||
MapObject *mapObj = Player_MapObject(playerAvatar);
|
||||
|
|
@ -2467,7 +2467,7 @@ u32 sub_02061760(PlayerAvatar *playerAvatar)
|
|||
|
||||
void sub_020617BC(PlayerAvatar *const playerAvatar, int *xOut, int *yOut, int *zOut)
|
||||
{
|
||||
int v0 = sub_0205EAA0(playerAvatar);
|
||||
int v0 = PlayerAvatar_GetDistortionDir(playerAvatar);
|
||||
MapObject *mapObj = Player_MapObject(playerAvatar);
|
||||
|
||||
*xOut = MapObject_GetX(mapObj);
|
||||
|
|
|
|||
|
|
@ -254,11 +254,11 @@ static void sub_020684D0(FieldSystem *fieldSystem, UnkStruct_020684D0 *param1)
|
|||
param1->unk_00 = fieldSystem->location->mapId;
|
||||
param1->unk_04 = SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData));
|
||||
param1->unk_08 = PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar);
|
||||
param1->unk_0E = sub_02061760(fieldSystem->playerAvatar);
|
||||
param1->unk_0E = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
|
||||
|
||||
{
|
||||
int v0 = sub_0205EAA0(fieldSystem->playerAvatar);
|
||||
param1->unk_0C = sub_020616F0(fieldSystem->playerAvatar, v0);
|
||||
int v0 = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
|
||||
param1->unk_0C = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, v0);
|
||||
}
|
||||
|
||||
param1->unk_10 = sub_02055FC8(fieldSystem, NULL);
|
||||
|
|
@ -281,16 +281,16 @@ static UnkStruct_0206851C *sub_0206851C(u32 param0, u16 param1, u16 param2, u16
|
|||
static void sub_02068540(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1, u32 param2)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = sub_020685AC;
|
||||
v1->unk_25C = sub_0206851C(param2, param0->unk_04, 0, 0, 0);
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = sub_020685AC;
|
||||
menu->taskData = sub_0206851C(param2, param0->unk_04, 0, 0, 0);
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static void sub_02068584(UnkStruct_02068870 *param0, u32 param1)
|
||||
|
|
@ -329,11 +329,11 @@ static BOOL sub_020685AC(FieldTask *task)
|
|||
static void sub_02068630(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
PartyManagementData *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PartyManagementData));
|
||||
|
||||
memset(v2, 0, sizeof(PartyManagementData));
|
||||
|
|
@ -343,7 +343,7 @@ static void sub_02068630(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
v2->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v2->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v2->unk_10 = SaveData_GetTVBroadcast(fieldSystem->saveData);
|
||||
v2->unk_18 = &v1->unk_24C;
|
||||
v2->unk_18 = &menu->fieldMoveContext;
|
||||
v2->unk_21 = 0;
|
||||
v2->unk_20 = 5;
|
||||
v2->unk_1C = fieldSystem;
|
||||
|
|
@ -351,20 +351,20 @@ static void sub_02068630(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
v2->selectedMonSlot = param0->unk_06;
|
||||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v2);
|
||||
v1->unk_25C = v2;
|
||||
sub_0203B674(v1, sub_0203B7C0);
|
||||
menu->taskData = v2;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
static void sub_020686C8(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
v1->unk_25C = sub_0203D8AC(fieldSystem);
|
||||
sub_0203B674(v1, sub_0203C3F4);
|
||||
menu->taskData = sub_0203D8AC(fieldSystem);
|
||||
sub_0203B674(menu, sub_0203C3F4);
|
||||
}
|
||||
|
||||
static BOOL sub_020686F8(UnkStruct_02068870 *param0)
|
||||
|
|
@ -381,16 +381,16 @@ static void *sub_02068708(void *param0)
|
|||
static void sub_02068710(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = FieldTask_MapChangeToUnderground;
|
||||
v1->unk_25C = sub_02053FAC(fieldSystem);
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = FieldTask_MapChangeToUnderground;
|
||||
menu->taskData = sub_02053FAC(fieldSystem);
|
||||
menu->state = START_MENU_STATE_10;
|
||||
|
||||
fieldSystem->unk_90 = 0;
|
||||
}
|
||||
|
|
@ -453,16 +453,16 @@ static u32 sub_0206877C(const UnkStruct_020684D0 *param0)
|
|||
static void sub_0206883C(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = sub_02068884;
|
||||
v1->unk_25C = NULL;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = sub_02068884;
|
||||
menu->taskData = NULL;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02068870(UnkStruct_02068870 *param0)
|
||||
|
|
@ -579,11 +579,11 @@ static void *sub_02068A28(void *param0)
|
|||
static void sub_02068A34(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
PartyManagementData *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PartyManagementData));
|
||||
|
||||
memset(v2, 0, sizeof(PartyManagementData));
|
||||
|
|
@ -592,7 +592,7 @@ static void sub_02068A34(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
v2->unk_04 = SaveData_GetBag(fieldSystem->saveData);
|
||||
v2->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v2->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v2->unk_18 = &v1->unk_24C;
|
||||
v2->unk_18 = &menu->fieldMoveContext;
|
||||
v2->unk_21 = 0;
|
||||
v2->unk_20 = 6;
|
||||
v2->unk_1C = fieldSystem;
|
||||
|
|
@ -601,24 +601,24 @@ static void sub_02068A34(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
v2->unk_26 = Item_MoveForTMHM(param0->unk_04);
|
||||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v2);
|
||||
v1->unk_25C = v2;
|
||||
sub_0203B674(v1, sub_0203B7C0);
|
||||
menu->taskData = v2;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
static void sub_02068ACC(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
UnkStruct_02097728 *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = sub_0203D94C(fieldSystem, 3, Item_MailNumber(param0->unk_04), 11);
|
||||
|
||||
v1->unk_260 = sub_0203C540(param0->unk_04, 3, 0);
|
||||
v1->unk_25C = v2;
|
||||
menu->unk_260 = sub_0203C540(param0->unk_04, 3, 0);
|
||||
menu->taskData = v2;
|
||||
|
||||
sub_0203B674(v1, sub_0203C558);
|
||||
sub_0203B674(menu, sub_0203C558);
|
||||
}
|
||||
|
||||
static u32 sub_02068B18(const UnkStruct_020684D0 *param0)
|
||||
|
|
@ -654,15 +654,15 @@ BOOL sub_02068B50(const UnkStruct_020684D0 *param0)
|
|||
static void sub_02068B5C(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
UnkStruct_0203D9B8 *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = sub_0203D9B8(fieldSystem, HEAP_ID_FIELDMAP);
|
||||
|
||||
v1->unk_25C = v2;
|
||||
sub_0203B674(v1, sub_0203C710);
|
||||
menu->taskData = v2;
|
||||
sub_0203B674(menu, sub_0203C710);
|
||||
}
|
||||
|
||||
static BOOL sub_02068B8C(UnkStruct_02068870 *param0)
|
||||
|
|
@ -679,14 +679,14 @@ static void *sub_02068B9C(void *param0)
|
|||
static void sub_02068BA8(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
sub_0203DE78(fieldSystem, fieldSystem->saveData);
|
||||
v1->unk_25C = NULL;
|
||||
sub_0203B674(v1, sub_0203C750);
|
||||
menu->taskData = NULL;
|
||||
sub_0203B674(menu, sub_0203C750);
|
||||
}
|
||||
|
||||
static BOOL sub_02068BDC(UnkStruct_02068870 *param0)
|
||||
|
|
@ -704,19 +704,19 @@ static void *sub_02068BEC(void *param0)
|
|||
static void sub_02068BF8(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
int *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = Heap_AllocFromHeapAtEnd(11, sizeof(int));
|
||||
|
||||
(*v2) = 0;
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = RefreshRadarChain;
|
||||
v1->unk_25C = v2;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = RefreshRadarChain;
|
||||
menu->taskData = v2;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02068C38(UnkStruct_02068870 *param0)
|
||||
|
|
@ -787,12 +787,12 @@ static u32 sub_02068CE0(const UnkStruct_020684D0 *param0)
|
|||
static void sub_02068CF0(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
UnkStruct_ov5_021F0468 *v2;
|
||||
int v3;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
|
|
@ -801,9 +801,9 @@ static void sub_02068CF0(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
|
||||
memset(v2, 0, v3);
|
||||
|
||||
v1->unk_22C = ov5_021F0488;
|
||||
v1->unk_25C = v2;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = ov5_021F0488;
|
||||
menu->taskData = v2;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
|
||||
Bag_TryRemoveItem(SaveData_GetBag(fieldSystem->saveData), param0->unk_04, 1, HEAP_ID_FIELDMAP);
|
||||
}
|
||||
|
|
@ -831,16 +831,16 @@ static u32 sub_02068D68(const UnkStruct_020684D0 *param0)
|
|||
static void sub_02068D80(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = ov5_021F08F8;
|
||||
v1->unk_25C = ov5_021F08CC(fieldSystem, 11, 0);
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = ov5_021F08F8;
|
||||
menu->taskData = ov5_021F08CC(fieldSystem, 11, 0);
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02068DBC(UnkStruct_02068870 *param0)
|
||||
|
|
@ -854,16 +854,16 @@ static BOOL sub_02068DBC(UnkStruct_02068870 *param0)
|
|||
static void sub_02068DDC(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = ov5_021F08F8;
|
||||
v1->unk_25C = ov5_021F08CC(fieldSystem, 11, 1);
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = ov5_021F08F8;
|
||||
menu->taskData = ov5_021F08CC(fieldSystem, 11, 1);
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02068E18(UnkStruct_02068870 *param0)
|
||||
|
|
@ -877,16 +877,16 @@ static BOOL sub_02068E18(UnkStruct_02068870 *param0)
|
|||
static void sub_02068E38(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = ov5_021F08F8;
|
||||
v1->unk_25C = ov5_021F08CC(fieldSystem, 11, 2);
|
||||
v1->state = START_MENU_STATE_10;
|
||||
menu->callback = ov5_021F08F8;
|
||||
menu->taskData = ov5_021F08CC(fieldSystem, 11, 2);
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02068E74(UnkStruct_02068870 *param0)
|
||||
|
|
@ -976,11 +976,11 @@ static BOOL sub_02068F48(FieldTask *task)
|
|||
static void sub_02068FEC(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
PartyManagementData *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(PartyManagementData));
|
||||
|
||||
memset(v2, 0, sizeof(PartyManagementData));
|
||||
|
|
@ -990,15 +990,15 @@ static void sub_02068FEC(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
v2->unk_08 = sub_02028430(fieldSystem->saveData);
|
||||
v2->unk_0C = SaveData_GetOptions(fieldSystem->saveData);
|
||||
v2->unk_10 = SaveData_GetTVBroadcast(fieldSystem->saveData);
|
||||
v2->unk_18 = &v1->unk_24C;
|
||||
v2->unk_18 = &menu->fieldMoveContext;
|
||||
v2->unk_21 = 0;
|
||||
v2->unk_20 = 16;
|
||||
v2->unk_24 = param0->unk_04;
|
||||
v2->selectedMonSlot = param0->unk_06;
|
||||
|
||||
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1E88, v2);
|
||||
v1->unk_25C = v2;
|
||||
sub_0203B674(v1, sub_0203B7C0);
|
||||
menu->taskData = v2;
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
static void sub_02069080(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
|
|
@ -1011,8 +1011,8 @@ static void sub_02069080(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *p
|
|||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_020690F0;
|
||||
menu->unk_25C = NULL;
|
||||
menu->callback = sub_020690F0;
|
||||
menu->taskData = NULL;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
|
||||
Bag_TryRemoveItem(SaveData_GetBag(fieldSystem->saveData), param0->unk_04, 1, HEAP_ID_FIELDMAP);
|
||||
|
|
@ -1077,14 +1077,14 @@ static u32 sub_02069130(const UnkStruct_020684D0 *param0)
|
|||
static void sub_02069188(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
sub_0203DE88(fieldSystem, fieldSystem->saveData);
|
||||
v1->unk_25C = NULL;
|
||||
sub_0203B674(v1, sub_0203C784);
|
||||
menu->taskData = NULL;
|
||||
sub_0203B674(menu, sub_0203C784);
|
||||
}
|
||||
|
||||
static BOOL sub_020691BC(UnkStruct_02068870 *param0)
|
||||
|
|
@ -1104,15 +1104,15 @@ static void *sub_020691CC(void *param0)
|
|||
static void sub_020691E0(UnkStruct_02068630 *param0, const UnkStruct_020684D0 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
StartMenu *menu;
|
||||
PartyManagementData *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
v1->unk_25C = sub_0203E598(fieldSystem, HEAP_ID_FIELDMAP, 466);
|
||||
menu->taskData = sub_0203E598(fieldSystem, HEAP_ID_FIELDMAP, 466);
|
||||
|
||||
sub_0203B674(v1, sub_0203B7C0);
|
||||
sub_0203B674(menu, sub_0203B7C0);
|
||||
}
|
||||
|
||||
static BOOL sub_02069218(UnkStruct_02068870 *param0)
|
||||
|
|
|
|||
|
|
@ -1,843 +0,0 @@
|
|||
#include "unk_0207070C.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/field/dynamic_map_features.h"
|
||||
#include "constants/field/map_load.h"
|
||||
#include "generated/journal_location_events.h"
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
#include "struct_defs/struct_0203D8AC.h"
|
||||
#include "struct_defs/struct_020708E0.h"
|
||||
#include "struct_defs/struct_02070950.h"
|
||||
#include "struct_defs/struct_020709CC.h"
|
||||
#include "struct_defs/struct_020711C8.h"
|
||||
|
||||
#include "field/field_system.h"
|
||||
#include "functypes/funcptr_0203B7C0.h"
|
||||
#include "functypes/funcptr_02084808.h"
|
||||
#include "overlay005/ov5_021DFB54.h"
|
||||
#include "overlay005/ov5_021F101C.h"
|
||||
#include "overlay006/ov6_02247100.h"
|
||||
|
||||
#include "field_overworld_state.h"
|
||||
#include "field_task.h"
|
||||
#include "heap.h"
|
||||
#include "inlines.h"
|
||||
#include "journal.h"
|
||||
#include "map_header.h"
|
||||
#include "map_object.h"
|
||||
#include "map_tile_behavior.h"
|
||||
#include "persisted_map_features_init.h"
|
||||
#include "player_avatar.h"
|
||||
#include "save_player.h"
|
||||
#include "script_manager.h"
|
||||
#include "start_menu.h"
|
||||
#include "system_flags.h"
|
||||
#include "terrain_collision_manager.h"
|
||||
#include "trainer_info.h"
|
||||
#include "unk_0203C954.h"
|
||||
#include "unk_0203D1B8.h"
|
||||
#include "unk_0205F180.h"
|
||||
#include "unk_0206B70C.h"
|
||||
#include "unk_020711C8.h"
|
||||
#include "vars_flags.h"
|
||||
|
||||
typedef struct {
|
||||
UnkFuncPtr_0203B7C0 unk_00;
|
||||
UnkFuncPtr_02084808 unk_04;
|
||||
} UnkStruct_020F0368;
|
||||
|
||||
typedef struct {
|
||||
u32 unk_00;
|
||||
MapObject *unk_04;
|
||||
UnkStruct_020709CC unk_08;
|
||||
} UnkStruct_0207086C;
|
||||
|
||||
static void sub_02070838(FieldSystem *fieldSystem, UnkStruct_02070950 *param1);
|
||||
static int sub_02070950(const UnkStruct_02070950 *param0);
|
||||
static void sub_020709CC(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static int sub_02070EEC(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070F54(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070F94(FieldTask *taskMan);
|
||||
static int sub_02070A24(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070A80(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070AB4(FieldTask *taskMan);
|
||||
static int sub_02070CF8(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070D30(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070D64(FieldTask *taskMan);
|
||||
static int sub_02070DA0(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070DEC(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070E20(FieldTask *taskMan);
|
||||
static int sub_02070E5C(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070E7C(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070EB0(FieldTask *taskMan);
|
||||
static int sub_02070B98(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070BD0(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070C04(FieldTask *taskMan);
|
||||
static int sub_02070C40(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070C88(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070CBC(FieldTask *taskMan);
|
||||
static int sub_02070AF0(const UnkStruct_02070950 *param0);
|
||||
static void sub_02070B28(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070B5C(FieldTask *taskMan);
|
||||
static int sub_02070FCC(const UnkStruct_02070950 *param0);
|
||||
static void sub_02071010(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02071050(FieldTask *taskMan);
|
||||
static int sub_020710A4(const UnkStruct_02070950 *param0);
|
||||
static void sub_020710D4(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static int sub_02071130(const UnkStruct_02070950 *param0);
|
||||
static void sub_02071150(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_0207118C(FieldTask *taskMan);
|
||||
static int sub_020708AC(const UnkStruct_02070950 *param0);
|
||||
static void sub_020708E0(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1);
|
||||
static BOOL sub_02070914(FieldTask *taskMan);
|
||||
|
||||
static const UnkStruct_020F0368 Unk_020F0368[] = {
|
||||
{ sub_020708E0, sub_020708AC },
|
||||
{ sub_020709CC, sub_02070950 },
|
||||
{ sub_02070A80, sub_02070A24 },
|
||||
{ sub_02070B28, sub_02070AF0 },
|
||||
{ sub_02070BD0, sub_02070B98 },
|
||||
{ sub_02070C88, sub_02070C40 },
|
||||
{ sub_02070D30, sub_02070CF8 },
|
||||
{ sub_02070DEC, sub_02070DA0 },
|
||||
{ sub_02070E7C, sub_02070E5C },
|
||||
{ sub_02070F54, sub_02070EEC },
|
||||
{ sub_02071010, sub_02070FCC },
|
||||
{ sub_020710D4, sub_020710A4 },
|
||||
{ sub_02071150, sub_02071130 }
|
||||
};
|
||||
|
||||
static inline BOOL inline_020708AC(const UnkStruct_02070950 *param0, int param1)
|
||||
{
|
||||
if ((param0->unk_0C & (1 << param1)) != 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline BOOL inline_02070950(const UnkStruct_02070950 *param0, int param1)
|
||||
{
|
||||
return TrainerInfo_HasBadge(SaveData_GetTrainerInfo(param0->fieldSystem->saveData), param1);
|
||||
}
|
||||
|
||||
static inline BOOL inline_02070A24(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
return SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(param0->fieldSystem->saveData));
|
||||
}
|
||||
|
||||
static inline BOOL inline_02070EEC(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if ((SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(param0->fieldSystem->saveData)) == 1) || (SystemFlag_CheckInPalPark(SaveData_GetVarsFlags(param0->fieldSystem->saveData)) == 1)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline BOOL inline_020710A4(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (SystemFlag_CheckInPalPark(SaveData_GetVarsFlags(param0->fieldSystem->saveData)) == 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline BOOL inline_02070AF0(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if ((param0->fieldSystem->mapLoadType == MAP_LOAD_TYPE_COLOSSEUM) || (param0->fieldSystem->mapLoadType == MAP_LOAD_TYPE_UNION)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32 sub_0207070C(u16 param0, u16 param1)
|
||||
{
|
||||
if (param0 == 0) {
|
||||
return (u32)Unk_020F0368[param1].unk_00;
|
||||
}
|
||||
|
||||
return (u32)Unk_020F0368[param1].unk_04;
|
||||
}
|
||||
|
||||
void sub_02070728(FieldSystem *fieldSystem, UnkStruct_02070950 *param1)
|
||||
{
|
||||
MapObject *mapObj;
|
||||
int v1, v2;
|
||||
int v3;
|
||||
int v4;
|
||||
|
||||
param1->fieldSystem = fieldSystem;
|
||||
param1->unk_00 = fieldSystem->location->mapId;
|
||||
param1->unk_0C = 0;
|
||||
|
||||
if (PlayerAvatar_DistortionGravityChanged(fieldSystem->playerAvatar) == TRUE) {
|
||||
sub_02070838(fieldSystem, param1);
|
||||
return;
|
||||
}
|
||||
|
||||
sub_0203C9D4(fieldSystem, &mapObj);
|
||||
param1->unk_08 = mapObj;
|
||||
|
||||
if (mapObj != NULL) {
|
||||
switch (MapObject_GetGraphicsID(mapObj)) {
|
||||
case 0x54:
|
||||
param1->unk_0C |= (1 << 3);
|
||||
break;
|
||||
case 0x55:
|
||||
param1->unk_0C |= (1 << 5);
|
||||
break;
|
||||
case 0x56:
|
||||
param1->unk_0C |= (1 << 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
v1 = Player_GetXPos(fieldSystem->playerAvatar);
|
||||
v2 = Player_GetZPos(fieldSystem->playerAvatar);
|
||||
v4 = TerrainCollisionManager_GetTileBehavior(fieldSystem, v1, v2);
|
||||
|
||||
PlayerAvatar_GetFacingTileCoords(fieldSystem->playerAvatar, &v1, &v2);
|
||||
v3 = TerrainCollisionManager_GetTileBehavior(fieldSystem, v1, v2);
|
||||
|
||||
if (ov5_021E0118(fieldSystem->playerAvatar, v4, v3)) {
|
||||
param1->unk_0C |= (1 << 2);
|
||||
}
|
||||
|
||||
if (ov5_021E0760(v3, PlayerAvatar_GetDir(fieldSystem->playerAvatar))) {
|
||||
param1->unk_0C |= (1 << 7);
|
||||
}
|
||||
|
||||
if (TileBehavior_IsWaterfall(v3)) {
|
||||
param1->unk_0C |= (1 << 6);
|
||||
}
|
||||
|
||||
switch (FieldOverworldState_GetWeather(SaveData_GetFieldOverworldState(fieldSystem->saveData))) {
|
||||
case 14:
|
||||
param1->unk_0C |= (1 << 4);
|
||||
break;
|
||||
case 16:
|
||||
param1->unk_0C |= (1 << 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070838(FieldSystem *fieldSystem, UnkStruct_02070950 *param1)
|
||||
{
|
||||
int v0;
|
||||
u32 v1, v2;
|
||||
|
||||
v0 = sub_0205EAA0(fieldSystem->playerAvatar);
|
||||
v2 = sub_020616F0(fieldSystem->playerAvatar, v0);
|
||||
v1 = sub_02061760(fieldSystem->playerAvatar);
|
||||
|
||||
if (ov5_021E0118(fieldSystem->playerAvatar, v1, v2) == 1) {
|
||||
param1->unk_0C |= (1 << 2);
|
||||
}
|
||||
}
|
||||
|
||||
static UnkStruct_0207086C *sub_0207086C(const UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = Heap_AllocFromHeap(HEAP_ID_FIELD_TASK, sizeof(UnkStruct_0207086C));
|
||||
|
||||
v0->unk_00 = 0x19740205;
|
||||
v0->unk_04 = param1->unk_08;
|
||||
v0->unk_08 = *param0;
|
||||
|
||||
return v0;
|
||||
}
|
||||
|
||||
static void sub_02070890(UnkStruct_0207086C *param0)
|
||||
{
|
||||
GF_ASSERT(param0->unk_00 == 0x19740205);
|
||||
Heap_FreeToHeap(param0);
|
||||
}
|
||||
|
||||
static int sub_020708AC(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 1) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 0)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_020708E0(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070914;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070914(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10008, v0->unk_04);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070950(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 2) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (MapHeader_IsFlyAllowed(param0->unk_00) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070A24(param0) == 1) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (inline_02070EEC(param0) == 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_020709CC(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
u32 *v2 = (u32 *)Heap_AllocFromHeap(HEAP_ID_FIELDMAP, 4);
|
||||
*v2 = param0->unk_04;
|
||||
menu->unk_260 = (void *)v2;
|
||||
|
||||
menu->unk_25C = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(UnkStruct_0203D8AC));
|
||||
|
||||
sub_0206B70C(fieldSystem, menu->unk_25C, 1);
|
||||
sub_0203D884(fieldSystem, menu->unk_25C);
|
||||
sub_0203B674(menu, sub_0203C434);
|
||||
}
|
||||
|
||||
static int sub_02070A24(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 3) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (PlayerAvatar_GetPlayerState(param0->fieldSystem->playerAvatar) == 0x2) {
|
||||
return 4;
|
||||
}
|
||||
|
||||
if (!(inline_020708AC(param0, 2))) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070A24(param0) == 1) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_02070A80(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070AB4;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070AB4(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10012, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070AF0(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 5) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 3)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070B28(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070B5C;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070B5C(FieldTask *param0)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(param0);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
|
||||
ScriptManager_Change(param0, 10010, v0->unk_04);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070B98(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 4) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 4)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070BD0(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070C04;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070C04(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10014, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070C40(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 0) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (PlayerAvatar_GetPlayerState(param0->fieldSystem->playerAvatar) == 0x2) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 5)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070C88(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070CBC;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070CBC(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10009, v0->unk_04);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070CF8(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 7) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 6)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070D30(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070D64;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070D64(FieldTask *param0)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(param0);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
|
||||
ScriptManager_Change(param0, 10013, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070DA0(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070950(param0, 6) == 0) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (!(inline_020708AC(param0, 7))) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070A24(param0) == 1) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_02070DEC(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070E20;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070E20(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10011, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070E5C(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_020708AC(param0, 8)) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_02070E7C(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v1;
|
||||
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v1 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(param1->fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_02070EB0;
|
||||
menu->unk_25C = v1;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070EB0(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 10015, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070EEC(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (MapHeader_IsTeleportAllowed(param0->unk_00) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070A24(param0) == 1) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (inline_02070EEC(param0) == 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_02070F54(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *menu;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
UnkStruct_020711C8 *v2 = sub_020711C8(11, param0->unk_04, fieldSystem->saveData);
|
||||
|
||||
menu->unk_22C = sub_02070F94;
|
||||
menu->unk_25C = v2;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_02070F94(FieldTask *param0)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
UnkStruct_020711C8 *v1 = FieldTask_GetEnv(param0);
|
||||
void *v2 = ov6_02247530(fieldSystem, v1->unk_00, 4);
|
||||
|
||||
Heap_FreeToHeap(v1);
|
||||
FieldTask_InitJump(param0, ov6_02247554, v2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sub_02070FCC(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!((MapHeader_IsCave(param0->unk_00) == 1) && (MapHeader_IsEscapeRopeAllowed(param0->unk_00) == 1))) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_02070A24(param0) == 1) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_02071010(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
{
|
||||
UnkStruct_020711C8 *v2;
|
||||
|
||||
v2 = sub_020711C8(11, param0->unk_04, fieldSystem->saveData);
|
||||
|
||||
v1->unk_22C = sub_02071050;
|
||||
v1->unk_25C = v2;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL sub_02071050(FieldTask *param0)
|
||||
{
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
||||
UnkStruct_020711C8 *v1 = FieldTask_GetEnv(param0);
|
||||
void *v2 = ov6_02247488(fieldSystem, v1->unk_00, 11);
|
||||
|
||||
void *journalEntryLocationEvent = JournalEntry_CreateEventUsedMove((LOCATION_EVENT_USED_DIG - LOCATION_EVENT_USED_CUT), fieldSystem->location->mapId, HEAP_ID_FIELD);
|
||||
JournalEntry_SaveData(fieldSystem->journalEntry, journalEntryLocationEvent, JOURNAL_LOCATION);
|
||||
|
||||
Heap_FreeToHeap(v1);
|
||||
FieldTask_InitJump(param0, ov6_022474AC, v2);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int sub_020710A4(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if (inline_02070AF0(param0) == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (inline_020710A4(param0) == 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_020710D4(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *v1;
|
||||
UnkStruct_020711C8 *v2;
|
||||
int v3;
|
||||
void *v4;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
v1 = FieldTask_GetEnv(param0->unk_00);
|
||||
|
||||
v2 = sub_020711C8(11, param0->unk_04, fieldSystem->saveData);
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
v1->unk_22C = ov5_021F101C;
|
||||
v1->unk_25C = v2;
|
||||
v1->state = START_MENU_STATE_10;
|
||||
|
||||
v4 = JournalEntry_CreateEventUsedMove((30 - 19), fieldSystem->location->mapId, 11);
|
||||
JournalEntry_SaveData(fieldSystem->journalEntry, v4, JOURNAL_LOCATION);
|
||||
}
|
||||
|
||||
static int sub_02071130(const UnkStruct_02070950 *param0)
|
||||
{
|
||||
if ((inline_02070AF0(param0) == 0) || (PersistedMapFeatures_IsCurrentDynamicMap(param0->fieldSystem, DYNAMIC_MAP_FEATURES_DISTORTION_WORLD) == 1)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_02071150(UnkStruct_020709CC *param0, const UnkStruct_02070950 *param1)
|
||||
{
|
||||
FieldSystem *fieldSystem;
|
||||
StartMenu *menu;
|
||||
UnkStruct_0207086C *v2;
|
||||
|
||||
fieldSystem = FieldTask_GetFieldSystem(param0->unk_00);
|
||||
menu = FieldTask_GetEnv(param0->unk_00);
|
||||
v2 = sub_0207086C(param0, param1);
|
||||
|
||||
FieldSystem_StartFieldMap(fieldSystem);
|
||||
|
||||
menu->unk_22C = sub_0207118C;
|
||||
menu->unk_25C = v2;
|
||||
menu->state = START_MENU_STATE_10;
|
||||
}
|
||||
|
||||
static BOOL sub_0207118C(FieldTask *taskMan)
|
||||
{
|
||||
UnkStruct_0207086C *v0 = FieldTask_GetEnv(taskMan);
|
||||
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan);
|
||||
|
||||
ScriptManager_Change(taskMan, 8900, NULL);
|
||||
FieldSystem_SetScriptParameters(fieldSystem, v0->unk_08.unk_04, 0, 0, 0);
|
||||
sub_02070890(v0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -10,11 +10,11 @@
|
|||
#include "struct_defs/struct_02083D1C.h"
|
||||
|
||||
#include "field/field_system.h"
|
||||
#include "functypes/funcptr_02084808.h"
|
||||
#include "overlay118/ov118_021D0D80.h"
|
||||
|
||||
#include "bag.h"
|
||||
#include "bg_window.h"
|
||||
#include "field_move_tasks.h"
|
||||
#include "font.h"
|
||||
#include "heap.h"
|
||||
#include "menu.h"
|
||||
|
|
@ -29,7 +29,6 @@
|
|||
#include "string_template.h"
|
||||
#include "system.h"
|
||||
#include "text.h"
|
||||
#include "unk_0207070C.h"
|
||||
#include "unk_0207E0B8.h"
|
||||
#include "unk_020819DC.h"
|
||||
#include "unk_02082C2C.h"
|
||||
|
|
@ -863,12 +862,11 @@ int sub_02084780(GameWindowLayout *param0)
|
|||
|
||||
static void sub_02084808(GameWindowLayout *param0, int *param1)
|
||||
{
|
||||
UnkFuncPtr_02084808 v0;
|
||||
FieldMoveErrContext v0;
|
||||
u32 v1;
|
||||
u32 v2;
|
||||
|
||||
v0 = (UnkFuncPtr_02084808)sub_0207070C(
|
||||
1, param0->unk_5A4->unk_23 - 11);
|
||||
v0 = (FieldMoveErrContext)FieldMove_GetTaskOrError(FIELD_MOVE_ERROR, param0->unk_5A4->unk_23 - 11);
|
||||
|
||||
if (v0 != NULL) {
|
||||
v1 = v0(param0->unk_5A4->unk_18);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user