document most start menu code (#991)
Some checks are pending
build / build (push) Waiting to run

This commit is contained in:
scbroede 2026-03-08 14:12:02 -04:00 committed by GitHub
parent 7c1e6f0a3a
commit fbcfa7400a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 1083 additions and 1215 deletions

View File

@ -14,7 +14,7 @@ enum BagApplicationMode {
enum BagApplicationExitCode {
BAG_EXIT_CODE_USE_ITEM = 0,
BAG_EXIT_CODE_SHOW_BERRY_DATA,
BAG_EXIT_CODE_CHECK_BERRY_TAG,
BAG_EXIT_CODE_GIVE_ITEM,
BAG_EXIT_CODE_POFFIN_BERRY_CHOSEN,
BAG_EXIT_CODE_GIVE_FROM_MON_MENU,

View File

@ -75,8 +75,8 @@ enum PartyMenuExitCodes {
PARTY_MENU_EXIT_CODE_SUMMARY,
PARTY_MENU_EXIT_CODE_2,
PARTY_MENU_EXIT_CODE_GIVE_ITEM,
PARTY_MENU_EXIT_CODE_LEARNED_MOVE,
PARTY_MENU_EXIT_CODE_FORGET_MOVE,
PARTY_MENU_EXIT_CODE_OVERWRITE_MOVE_TM_HM,
PARTY_MENU_EXIT_CODE_OVERWRITE_MOVE_LEVEL_UP,
PARTY_MENU_EXIT_CODE_MAIL,
PARTY_MENU_EXIT_CODE_READ_MAIL,
PARTY_MENU_EXIT_CODE_EVOLVE_BY_ITEM,
@ -225,7 +225,7 @@ typedef struct PartyMenu {
u8 minSelectionSlots : 4;
u8 maxSelectionSlots : 4;
u8 reqLevel;
int unk_34;
int levelUpMoveIndex;
u16 evoTargetSpecies;
u8 padding_3A[2];
int evoType;

View File

@ -75,7 +75,7 @@ enum HeapID {
HEAP_ID_70,
HEAP_ID_71,
HEAP_ID_BOAT_CUTSCENE,
HEAP_ID_73,
HEAP_ID_EVOLUTION,
HEAP_ID_74,
HEAP_ID_75,
HEAP_ID_76,
@ -157,6 +157,7 @@ enum HeapSize {
HEAP_SIZE_DISTORTION_WORLD_WARP = 0x50000,
HEAP_SIZE_UNDERGROUND = 0xE800,
HEAP_SIZE_BOAT_CUTSCENE = 0x20000,
HEAP_SIZE_EVOLUTION = 0x30000,
HEAP_SIZE_GAME_START = 0x20000,
HEAP_SIZE_MAIN_MENU = 0x40000,
HEAP_SIZE_MIGRATE_FROM_GBA = 0x38000,

View File

@ -15,6 +15,7 @@
#define POCKET_BATTLE_ITEMS 6
#define POCKET_KEY_ITEMS 7
#define POCKET_MAX 8
#define POCKET_LIST_END 0xFF
#define BATTLE_POCKET_SHIFT_POKE_BALLS 0
#define BATTLE_POCKET_SHIFT_BATTLE_ITEMS 1

View File

@ -0,0 +1,17 @@
#ifndef POKEPLATINUM_CONSTANTS_START_MENU_H
#define POKEPLATINUM_CONSTANTS_START_MENU_H
#define ICON_ANIM_NONE 0
#define ICON_ANIM_SWELL 1
#define ICON_ANIM_WIGGLE 2
#define ICON_ANIM_COUNT 3
#define PALETTE_GRAYSCALE 0
#define PALETTE_COLORED 1
#define CURSOR_TEMPLATE 0
#define ICON_TEMPLATE 1
#define CURSOR_SPRITE_INDEX 0
#endif // POKEPLATINUM_CONSTANTS_START_MENU_H

View File

@ -1,6 +0,0 @@
#ifndef POKEPLATINUM_CONST_020EA02C_H
#define POKEPLATINUM_CONST_020EA02C_H
extern const u8 Unk_020EA02C[];
#endif // POKEPLATINUM_CONST_020EA02C_H

View File

@ -6,6 +6,7 @@
#include "field/field_system_decl.h"
#include "field_task.h"
#include "pokemon.h"
typedef struct FieldMoveContext {
u32 mapId;
@ -45,9 +46,21 @@ enum TaskOrError {
FIELD_MOVE_ERROR,
};
typedef void (*FieldMoveTaskContext)(FieldMovePokemon *, const FieldMoveContext *);
typedef struct FlyContext {
FieldSystem *fieldSystem;
int state;
u16 mapID;
s16 x;
s16 z;
Pokemon *mon;
SysTask *cutInTask;
} FlyContext;
typedef void (*FieldMoveTask)(FieldMovePokemon *, const FieldMoveContext *);
typedef enum FieldMoveError (*FieldMoveErrContext)(const FieldMoveContext *);
FlyContext *FlyContext_New(enum HeapID heapID, FieldSystem *fieldSystem, Pokemon *mon, u16 mapID, s16 x, s16 z);
BOOL FieldMoves_FlyTask(FieldTask *fieldTask);
void *FieldMove_GetTaskOrError(u16 taskOrError, u16 fieldMove);
void FieldMoves_SetUsableMoves(FieldSystem *fieldSystem, FieldMoveContext *fieldMoveContext);

View File

@ -312,7 +312,7 @@ u8 Item_BerryNumber(u16 item);
* @param berry
* @return The item for the berry number, or ITEM_RETURN_ID if none exists.
*/
u16 Item_ForBerryNumber(u8 item);
u16 Item_ForBerryNumber(u8 berry);
/**
* @brief Check if a given item is herbal medicine.

View File

@ -9,9 +9,9 @@
#include "field_task.h"
#include "string_gf.h"
#define USE_ITEM_TASK_MENU 0
#define USE_ITEM_TASK_FIELD 1
#define USE_ITEM_TASK_CHECK 2
#define ITEM_FUNC_USE_FROM_MENU 0
#define ITEM_FUNC_USE_IN_FIELD 1
#define ITEM_FUNC_CHECK_CAN_USE 2
enum ItemUseCheckResult {
ITEM_USE_CANNOT_USE_GENERIC = -1,
@ -70,8 +70,8 @@ typedef struct UnkStruct_02068EFC {
u16 unk_16;
} UnkStruct_02068EFC;
u32 GetItemUseFunction(u16 param0, u16 param1);
void sub_0206842C(FieldSystem *fieldSystem, ItemUseContext *param1);
u32 ItemUseFunction_Get(u16 funcType, u16 functionIdx);
void ItemUseContext_Init(FieldSystem *fieldSystem, ItemUseContext *param1);
BOOL BerryPatch_IsEmpty(const ItemUseContext *usageContext);
BOOL sub_02069238(FieldSystem *fieldSystem);

View File

@ -6,9 +6,9 @@
#include "pokemon.h"
#include "sys_task_manager.h"
SysTask *SysTask_HMCutIn_New(FieldSystem *fieldSystem, BOOL isNotFly, Pokemon *shownPokemon, int playerGender);
int CheckHMCutInFinished(SysTask *cutInTask);
void SysTask_HMCutIn_SetTaskDone(SysTask *cutInTask);
SysTask *HMCutIn_StartTask(FieldSystem *fieldSystem, BOOL isNotFly, Pokemon *shownPokemon, int playerGender);
int HMCutIn_IsFinished(SysTask *cutInTask);
void HMCutIn_EndTask(SysTask *cutInTask);
SysTask *FieldTask_FlyLanding_InitTask(FieldSystem *fieldSystem, int playerGender);
int FlyLanding_IsAnimFinished(SysTask *sysTask);
void FlyLanding_SetTaskDone(SysTask *sysTask);

View File

@ -1,26 +1,74 @@
#ifndef POKEPLATINUM_UNK_0203A9C8_H
#define POKEPLATINUM_UNK_0203A9C8_H
#include "struct_defs/struct_020708E0.h"
#include "field/field_system_decl.h"
#include "overlay005/sprite_resource_manager.h"
#include "bg_window.h"
#include "field_move_tasks.h"
#include "field_task.h"
#include "item_use_functions.h"
#include "menu.h"
#include "string_list.h"
BOOL sub_0203A9C8(FieldSystem *fieldSystem);
void StartMenu_Init(struct FieldSystem_t *fieldSystem);
void sub_0203AA78(struct FieldSystem_t *fieldSystem);
void sub_0203AABC(FieldSystem *fieldSystem);
#define MAX_START_MENU_OPTIONS 7
typedef struct StartMenu {
Window primaryWindow;
Window secondaryWindow;
Menu *menu;
StringList *menuOptions;
u16 cursorPos;
u16 state;
u32 input;
u8 options[MAX_START_MENU_OPTIONS];
SpriteResourceManager spriteManager;
ManagedSprite *sprites[MAX_START_MENU_OPTIONS + 1];
u32 spriteCount;
u32 hideOptionFlags;
BOOL inUnionRoom;
FieldTaskFunc callback;
ItemUseContext itemUseCtx;
FieldMoveContext fieldMoveContext;
void *taskData;
void *additionalTaskContext;
} StartMenu;
enum StartMenuState {
START_MENU_STATE_INIT = 0,
START_MENU_STATE_SELECT,
START_MENU_STATE_APP_START,
START_MENU_STATE_APP_RUN,
START_MENU_STATE_SAVE,
START_MENU_STATE_SAVE_WAIT,
START_MENU_STATE_EVOLVE_INIT,
START_MENU_STATE_EVOLVE,
START_MENU_STATE_8,
START_MENU_STATE_9,
START_MENU_STATE_NEW_TASK,
START_MENU_STATE_EXIT_WITH_NEW_TASK,
START_MENU_STATE_REINIT,
START_MENU_STATE_END,
START_MENU_STATE_REINIT_WAIT_FOR_FADE,
START_MENU_STATE_SAVED,
};
extern const u8 gAllSummaryScreenPages[];
BOOL FieldSystem_IsInValidLocation(FieldSystem *fieldSystem);
void StartMenu_Open(FieldSystem *fieldSystem);
void StartMenu_OpenUnionRoom(FieldSystem *fieldSystem);
void StartMenu_OpenColosseum(FieldSystem *fieldSystem);
void StartMenu_OpenFromScript(FieldSystem *fieldSystem);
void StartMenu_SetCallback(StartMenu *menu, void *callback);
BOOL StartMenu_ExitPartyMenu(FieldTask *taskMan);
BOOL sub_0203C3F4(FieldTask *param0);
BOOL sub_0203C434(FieldTask *param0);
BOOL sub_0203C50C(FieldTask *param0);
BOOL StartMenu_ExitPartyMenu(FieldTask *fieldTask);
BOOL StartMenu_ExitTownMap(FieldTask *fieldTask);
BOOL StartMenu_FlyDestinationSelected(FieldTask *fieldTask);
BOOL StartMenu_ExitJournal(FieldTask *fieldTask);
void *sub_0203C540(u16 param0, u8 param1, u8 param2);
BOOL StartMenu_ExitMail(FieldTask *taskMan);
BOOL sub_0203C710(FieldTask *param0);
BOOL sub_0203C750(FieldTask *param0);
BOOL sub_0203C784(FieldTask *param0);
BOOL StartMenu_ExitMail(FieldTask *fieldTask);
BOOL StartMenu_ExitPoffinCase(FieldTask *fieldTask);
BOOL StartMenu_ExitPalPad(FieldTask *fieldTask);
BOOL StartMenu_ExitVsRecorder(FieldTask *fieldTask);
#endif // POKEPLATINUM_UNK_0203A9C8_H

View File

@ -1,53 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_020708E0_H
#define POKEPLATINUM_STRUCT_020708E0_H
#include "overlay005/sprite_resource_manager.h"
#include "bg_window.h"
#include "field_move_tasks.h"
#include "field_task.h"
#include "item_use_functions.h"
#include "menu.h"
#include "string_list.h"
typedef struct {
Window unk_00;
Window unk_10;
Menu *unk_20;
StringList *unk_24;
u16 unk_28;
u16 state;
u32 unk_2C;
u8 options[7];
SpriteResourceManager spriteManager;
ManagedSprite *unk_200[8];
u32 unk_220;
u32 hideOptionFlags;
u32 unk_228;
FieldTaskFunc callback;
ItemUseContext unk_230;
FieldMoveContext fieldMoveContext;
void *taskData;
void *unk_260;
} StartMenu;
enum StartMenuState {
START_MENU_STATE_INIT,
START_MENU_STATE_SELECT,
START_MENU_STATE_APP_START,
START_MENU_STATE_APP_RUN,
START_MENU_STATE_SAVE,
START_MENU_STATE_SAVE_WAIT,
START_MENU_STATE_EVOLVE_INIT,
START_MENU_STATE_EVOLVE,
START_MENU_STATE_8,
START_MENU_STATE_9,
START_MENU_STATE_10,
START_MENU_STATE_11,
START_MENU_STATE_12,
START_MENU_STATE_END,
START_MENU_STATE_14,
START_MENU_STATE_15
};
#endif // POKEPLATINUM_STRUCT_020708E0_H

View File

@ -16,11 +16,13 @@
#include "applications/party_menu/defs.h"
#include "applications/pc_boxes/pokemon_storage_session.h"
#include "applications/poffin_case/main.h"
#include "applications/pokedex/pokedex_main.h"
#include "applications/pokemon_summary_screen/main.h"
#include "applications/town_map/main.h"
#include "field/field_system_decl.h"
#include "overlay090/struct_ov90_021D0D80.h"
#include "bag_context.h"
#include "field_battle_data_transfer.h"
#include "field_move_tasks.h"
#include "field_task.h"
@ -31,8 +33,8 @@
#include "trainer_card.h"
void FieldSystem_StartBattleProcess(FieldSystem *fieldSystem, FieldBattleDTO *dto);
void sub_0203D1E4(FieldSystem *fieldSystem, void *param1);
void *sub_0203D20C(FieldSystem *fieldSystem, ItemUseContext *param1);
void sub_0203D1E4(FieldSystem *fieldSystem, BagContext *param1);
BagContext *FieldSystem_OpenBag(FieldSystem *fieldSystem, ItemUseContext *param1);
void *FieldSystem_CreateBagContext(FieldSystem *fieldSystem, int pocketType);
u16 BagContext_GetSelectedItem(void *bagContext);
void sub_0203D2E4(FieldSystem *fieldSystem, void *param1);
@ -85,7 +87,7 @@ void sub_0203DFE8(
u16 *param6);
void sub_0203E09C(FieldSystem *fieldSystem, TrainerCard *param1);
void FieldSystem_OpenTrainerCardScreen(FieldSystem *fieldSystem, TrainerCard *trainerCard);
BOOL sub_0203E0AC(FieldSystem *fieldSystem, void *param1);
BOOL FieldSystem_OpenPokedex(FieldSystem *fieldSystem, PokedexOverlayArgs *args);
void FieldSystem_LaunchChooseStarterApp(FieldSystem *fieldSystem, ChooseStarterData *param1);
void sub_0203E0D0(FieldSystem *fieldSystem);
void FieldSystem_LaunchGTSApp(FieldSystem *fieldSystem, BOOL connectToWiFi);

View File

@ -15,7 +15,7 @@ int PlayerAvatar_CheckStartMove(PlayerAvatar *playerAvatar, int param1);
void sub_0205F490(PlayerAvatar *playerAvatar);
void sub_0205F56C(PlayerAvatar *playerAvatar);
int sub_0205F588(PlayerAvatar *playerAvatar);
void sub_0205F5E4(PlayerAvatar *playerAvatar, int param1);
void sub_0205F5E4(PlayerAvatar *playerAvatar, int dir);
u32 sub_02060B7C(PlayerAvatar *playerAvatar, MapObject *param1, int param2);
u32 sub_020611FC(PlayerAvatar *playerAvatar, MapObject *param1, int param2);
enum FaceDirection PlayerAvatar_CalcFaceDirection(PlayerAvatar *playerAvatar, u16 pressedKeys, u16 heldKeys);
@ -30,7 +30,7 @@ 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 PlayerAvatar_GetDistortionTileBehaviour(PlayerAvatar *playerAvatar, int param1);
u32 PlayerAvatar_GetDistortionFacingTileBehaviour(PlayerAvatar *playerAvatar, int distortionDir);
u32 PlayerAvatar_GetDistortionCurrTileBehaviour(PlayerAvatar *playerAvatar);
void sub_020617BC(PlayerAvatar *const playerAvatar, int *param1, int *param2, int *param3);

View File

@ -1,12 +0,0 @@
#ifndef POKEPLATINUM_UNK_0207064C_H
#define POKEPLATINUM_UNK_0207064C_H
#include "field/field_system_decl.h"
#include "field_task.h"
#include "pokemon.h"
void *sub_0207064C(enum HeapID heapID, FieldSystem *fieldSystem, Pokemon *mon, u16 mapID, s16 param4, s16 param5);
BOOL sub_02070680(FieldTask *param0);
#endif // POKEPLATINUM_UNK_0207064C_H

View File

@ -275,7 +275,6 @@ Static main
Object main.nef.p/src_tv_episode_segment.c.o
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_field_move_tasks.c.o
Object main.nef.p/src_unk_020711C8.c.o
Object main.nef.p/src_overworld_anim_manager.c.o

View File

@ -14,7 +14,7 @@
"en_US": "BAG"
},
{
"id": "StartMenu_Text_Player",
"id": "StartMenu_Text_PlayerTemplate",
"en_US": "{STRVAR_1 3, 0, 0}"
},
{

View File

@ -724,7 +724,7 @@
"en_US": "TREASURES"
},
{
"id": "UndergroundCommon_Text_TrainerNameTemplate",
"id": "UndergroundCommon_Text_PlayerTemplate",
"en_US": "{STRVAR_1 1, 1, 0}"
},
{

View File

@ -2072,7 +2072,7 @@ static int ItemActionFunc_Use(BagController *controller)
BagUI_CloseItemActionsMenu(controller);
s32 itemUseFuncIdx = Item_LoadParam(controller->bagCtx->selectedItem, ITEM_PARAM_FIELD_USE_FUNC, HEAP_ID_BAG);
ItemCheckUseFunc checkFunc = (ItemCheckUseFunc)GetItemUseFunction(USE_ITEM_TASK_CHECK, itemUseFuncIdx);
ItemCheckUseFunc checkFunc = (ItemCheckUseFunc)ItemUseFunction_Get(ITEM_FUNC_CHECK_CAN_USE, itemUseFuncIdx);
if (checkFunc != NULL) {
enum ItemUseCheckResult checkResult = checkFunc(controller->bagCtx->itemUseCtx);
@ -2319,7 +2319,7 @@ static int ItemActionFunc_CheckTag(BagController *controller)
{
BagUI_CloseItemActionsMenu(controller);
App_StartScreenFade(TRUE, HEAP_ID_BAG);
controller->bagCtx->exitCode = BAG_EXIT_CODE_SHOW_BERRY_DATA;
controller->bagCtx->exitCode = BAG_EXIT_CODE_CHECK_BERRY_TAG;
return BAG_APP_STATE_EXIT;
}

View File

@ -743,13 +743,13 @@ static int sub_02085C50(void *applicationPtr)
Sound_PlayEffect(SEQ_SE_CONFIRM);
PartyMenu_RemoveContextWindow(application);
application->unk_B13 = 3;
application->partyMenu->unk_34 = 0;
application->partyMenu->levelUpMoveIndex = 0;
}
break;
case 3:
mon = Party_GetPokemonBySlotIndex(application->partyMenu->party, application->currPartySlot);
switch (Pokemon_LevelUpMove(mon, &application->partyMenu->unk_34, &application->partyMenu->learnedMove)) {
switch (Pokemon_LevelUpMove(mon, &application->partyMenu->levelUpMoveIndex, &application->partyMenu->learnedMove)) {
case 0x0:
application->unk_B13 = 6;
break;
@ -864,7 +864,7 @@ static int sub_02085FB4(void *applicationPtr)
String_Free(string);
PartyMenu_PrintLongMessage(application, PRINT_MESSAGE_PRELOADED, FALSE);
application->partyMenu->menuSelectionResult = PARTY_MENU_EXIT_CODE_FORGET_MOVE;
application->partyMenu->menuSelectionResult = PARTY_MENU_EXIT_CODE_OVERWRITE_MOVE_LEVEL_UP;
application->unk_B0E = 25;
return 24;
@ -1057,7 +1057,7 @@ static int sub_02086438(void *applicationPtr)
String_Free(string);
PartyMenu_PrintLongMessage(application, PRINT_MESSAGE_PRELOADED, FALSE);
application->partyMenu->menuSelectionResult = PARTY_MENU_EXIT_CODE_LEARNED_MOVE;
application->partyMenu->menuSelectionResult = PARTY_MENU_EXIT_CODE_OVERWRITE_MOVE_TM_HM;
application->unk_B0E = 25;
return 24;

View File

@ -2570,7 +2570,7 @@ static void BoxAppMan_GiveItemFromBagAction(BoxApplicationManager *boxAppMan, u3
POCKET_BERRIES,
POCKET_BATTLE_ITEMS,
POCKET_KEY_ITEMS,
-1
POCKET_LIST_END,
};
static u32 item;

View File

@ -326,7 +326,7 @@ void *BagContext_CreateWithPockets(Bag *bag, const u8 *pockets, enum HeapID heap
bagContext = BagContext_New(heapID);
for (i = 0; pockets[i] != 0xff; i++) {
for (i = 0; pockets[i] != POCKET_LIST_END; i++) {
switch (pockets[i]) {
case POCKET_KEY_ITEMS:
BagContext_InitPocket(bagContext, bag->keyItems, POCKET_KEY_ITEMS, i);

View File

@ -255,9 +255,9 @@ BOOL Battle_Main(ApplicationManager *appMan, int *param1)
v2 = Battle_FindEvolvingPartyMember(v0, &v1, &v3);
if (v2) {
Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_73, 0x30000);
Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_EVOLUTION, HEAP_SIZE_EVOLUTION);
v4 = Party_GetPokemonBySlotIndex(v0->parties[0], v1);
v0->unk_170 = Evolution_Begin(v0->parties[0], v4, v2, v0->options, v0->visitedContestHall, v0->pokedex, v0->bag, v0->records, v0->poketch, v3, 0x1 | 0x2, HEAP_ID_73);
v0->unk_170 = Evolution_Begin(v0->parties[0], v4, v2, v0->options, v0->visitedContestHall, v0->pokedex, v0->bag, v0->records, v0->poketch, v3, 0x1 | 0x2, HEAP_ID_EVOLUTION);
*param1 = 14;
} else {
*param1 = 15;
@ -268,7 +268,7 @@ BOOL Battle_Main(ApplicationManager *appMan, int *param1)
if (Evolution_IsDone(v5) == 1) {
Evolution_Free(v5);
Heap_Destroy(HEAP_ID_73);
Heap_Destroy(HEAP_ID_EVOLUTION);
*param1 = 13;
}
} break;

View File

@ -10,7 +10,6 @@
#include "generated/object_events_gfx.h"
#include "struct_decls/struct_02061AB4_decl.h"
#include "struct_defs/struct_020708E0.h"
#include "struct_defs/struct_020711C8.h"
#include "applications/town_map/main.h"
@ -43,8 +42,13 @@
#define FIELD_MOVE_FLAG(move) (1 << (move))
enum FlyState {
FLY_STATE_START_CUT_IN = 0,
FLY_STATE_MAIN,
};
typedef struct {
FieldMoveTaskContext task;
FieldMoveTask task;
FieldMoveErrContext error;
} FieldMoveTaskOrError;
@ -57,7 +61,7 @@ typedef struct {
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 void FieldMoves_SetSelectFlyDestinationTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
static enum FieldMoveError FieldMoves_CheckTeleport(const FieldMoveContext *fieldMoveContext);
static void FieldMoves_SetTeleportTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext);
@ -108,7 +112,7 @@ static BOOL FieldMoves_CutTask(FieldTask *taskMan);
static const FieldMoveTaskOrError fieldMoveTaskOrError[] = {
{ FieldMoves_SetCutTask, FieldMoves_CheckCut },
{ FieldMoves_SetFlyTask, FieldMoves_CheckFly },
{ FieldMoves_SetSelectFlyDestinationTask, FieldMoves_CheckFly },
{ FieldMoves_SetSurfTask, FieldMoves_CheckSurf },
{ FieldMoves_SetStrengthTask, FieldMoves_CheckStrength },
{ FieldMoves_SetDefogTask, FieldMoves_CheckDefog },
@ -169,6 +173,51 @@ static inline BOOL PlayerOutsideLinkRoom(const FieldMoveContext *fieldMoveContex
return TRUE;
}
FlyContext *FlyContext_New(enum HeapID heapID, FieldSystem *fieldSystem, Pokemon *mon, u16 mapID, s16 x, s16 z)
{
FlyContext *ctx = Heap_AllocAtEnd(heapID, sizeof(FlyContext));
memset(ctx, 0, sizeof(FlyContext));
ctx->fieldSystem = fieldSystem;
ctx->mon = mon;
ctx->mapID = mapID;
ctx->x = x;
ctx->z = z;
return ctx;
}
BOOL FieldMoves_FlyTask(FieldTask *task)
{
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task);
FlyContext *ctx = FieldTask_GetEnv(task);
switch (ctx->state) {
case FLY_STATE_START_CUT_IN:
ctx->cutInTask = HMCutIn_StartTask(ctx->fieldSystem, TRUE, ctx->mon, PlayerAvatar_Gender(ctx->fieldSystem->playerAvatar));
ctx->state++;
break;
case FLY_STATE_MAIN:
if (!HMCutIn_IsFinished(ctx->cutInTask)) {
break;
}
HMCutIn_EndTask(ctx->cutInTask);
u16 destination = GetSpawnIdByMapAndCoords(ctx->mapID, ctx->x, ctx->z);
GF_ASSERT(destination != MAP_HEADER_EVERYWHERE);
Location location;
Location_InitFly(destination, &location);
FieldTask_ChangeMapChangeFly(task, location.mapId, WARP_ID_NONE, location.x, location.z, DIR_SOUTH);
Heap_Free(ctx);
}
return FALSE;
}
void *FieldMove_GetTaskOrError(u16 taskOrError, u16 fieldMove)
{
if (taskOrError == FIELD_MOVE_TASK) {
@ -246,7 +295,7 @@ static void FieldMoves_CanUseSurfDistortionWorld(FieldSystem *fieldSystem, Field
u32 currTileBehavior, nextTileBehavior;
distortionDir = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
nextTileBehavior = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, distortionDir);
nextTileBehavior = PlayerAvatar_GetDistortionFacingTileBehaviour(fieldSystem->playerAvatar, distortionDir);
currTileBehavior = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
if (PlayerAvatar_CanUseSurf(fieldSystem->playerAvatar, currTileBehavior, nextTileBehavior) == TRUE) {
@ -297,7 +346,7 @@ static void FieldMoves_SetCutTask(FieldMovePokemon *fieldMoveMon, const FieldMov
menu->callback = FieldMoves_CutTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_CutTask(FieldTask *taskMan)
@ -337,20 +386,20 @@ static enum FieldMoveError FieldMoves_CheckFly(const FieldMoveContext *fieldMove
return FIELD_MOVE_ERROR_NONE;
}
static void FieldMoves_SetFlyTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
static void FieldMoves_SetSelectFlyDestinationTask(FieldMovePokemon *fieldMoveMon, const FieldMoveContext *fieldMoveContext)
{
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(fieldMoveMon->fieldTask);
StartMenu *menu = FieldTask_GetEnv(fieldMoveMon->fieldTask);
u32 *fieldMonID = Heap_Alloc(HEAP_ID_FIELD2, sizeof(u32));
*fieldMonID = fieldMoveMon->fieldMonId;
menu->unk_260 = fieldMonID;
menu->additionalTaskContext = fieldMonID;
menu->taskData = Heap_Alloc(HEAP_ID_FIELD2, sizeof(TownMapContext));
TownMapContext_Init(fieldSystem, menu->taskData, TOWN_MAP_MODE_FLY);
FieldSystem_OpenTownMap(fieldSystem, menu->taskData);
StartMenu_SetCallback(menu, sub_0203C434);
StartMenu_SetCallback(menu, StartMenu_FlyDestinationSelected);
}
static enum FieldMoveError FieldMoves_CheckSurf(const FieldMoveContext *fieldMoveContext)
@ -387,7 +436,7 @@ static void FieldMoves_SetSurfTask(FieldMovePokemon *fieldMoveMon, const FieldMo
menu->callback = FieldMoves_SurfTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_SurfTask(FieldTask *taskMan)
@ -428,7 +477,7 @@ static void FieldMoves_SetStrengthTask(FieldMovePokemon *fieldMoveMon, const Fie
menu->callback = FieldMoves_StrengthTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_StrengthTask(FieldTask *param0)
@ -469,7 +518,7 @@ static void FieldMoves_SetDefogTask(FieldMovePokemon *fieldMoveMon, const FieldM
menu->callback = FieldMoves_DefogTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_DefogTask(FieldTask *taskMan)
@ -514,7 +563,7 @@ static void FieldMoves_SetRockSmashTask(FieldMovePokemon *fieldMoveMon, const Fi
menu->callback = FieldMoves_RockSmashTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_RockSmashTask(FieldTask *taskMan)
@ -555,7 +604,7 @@ static void FieldMoves_SetWaterfallTask(FieldMovePokemon *fieldMoveMon, const Fi
menu->callback = FieldMoves_WaterfallTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_WaterfallTask(FieldTask *param0)
@ -600,7 +649,7 @@ static void FieldMoves_SetRockClimbTask(FieldMovePokemon *fieldMoveMon, const Fi
menu->callback = FieldMoves_RockClimbTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_RockClimbTask(FieldTask *taskMan)
@ -637,7 +686,7 @@ static void FieldMoves_SetFlashTask(FieldMovePokemon *fieldMoveMon, const FieldM
menu->callback = FieldMoves_FlashTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_FlashTask(FieldTask *taskMan)
@ -684,7 +733,7 @@ static void FieldMoves_SetTeleportTask(FieldMovePokemon *fieldMoveMon, const Fie
menu->callback = FieldMoves_TeleportTask;
menu->taskData = v2;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_TeleportTask(FieldTask *task)
@ -727,7 +776,7 @@ static void FieldMoves_SetDigTask(FieldMovePokemon *fieldMoveMon, const FieldMov
v1->callback = FieldMoves_DigTask;
v1->taskData = v2;
v1->state = START_MENU_STATE_10;
v1->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_DigTask(FieldTask *task)
@ -770,7 +819,7 @@ static void FieldMoves_SetSweetScentTask(FieldMovePokemon *fieldMoveMon, const F
startMenu->callback = ov5_021F101C;
startMenu->taskData = v2;
startMenu->state = START_MENU_STATE_10;
startMenu->state = START_MENU_STATE_NEW_TASK;
v4 = JournalEntry_CreateEventUsedMove(LOCATION_EVENT_LURED_POKEMON - LOCATION_EVENT_USED_CUT, fieldSystem->location->mapId, HEAP_ID_FIELD2);
JournalEntry_SaveData(fieldSystem->journalEntry, v4, JOURNAL_LOCATION);
@ -795,7 +844,7 @@ static void FieldMoves_SetChatterTask(FieldMovePokemon *fieldMoveMon, const Fiel
menu->callback = FieldMoves_ChatterTask;
menu->taskData = taskData;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL FieldMoves_ChatterTask(FieldTask *taskMan)

View File

@ -7,7 +7,6 @@
#include "constants/savedata/vars_flags.h"
#include "struct_decls/struct_02061AB4_decl.h"
#include "struct_defs/struct_020708E0.h"
#include "struct_defs/struct_02097728.h"
#include "applications/party_menu/defs.h"
@ -72,7 +71,7 @@ typedef struct ItemUseFuncDat {
} ItemUseFuncDat;
void *FieldSystem_OpenTownMapItem(FieldSystem *fieldSystem);
static void sub_020684D0(FieldSystem *fieldSystem, ItemUseContext *usageContext);
static void ItemUseContext_InitForDistortionWorld(FieldSystem *fieldSystem, ItemUseContext *usageContext);
static void UseHealingItemFromMenu(ItemMenuUseContext *usageContext, const ItemUseContext *additionalContext);
static void UseTownMapFromMenu(ItemMenuUseContext *usageContext, const ItemUseContext *additionalContext);
static void UseExplorerKitFromMenu(ItemMenuUseContext *usageContext, const ItemUseContext *additionalContext);
@ -166,76 +165,72 @@ static const ItemUseFuncDat sItemUseFuncs[] = {
};
// clang-format on
u32 GetItemUseFunction(u16 discriminator, u16 functionIdx)
u32 ItemUseFunction_Get(u16 funcType, u16 functionIdx)
{
if (discriminator == USE_ITEM_TASK_MENU) {
if (funcType == ITEM_FUNC_USE_FROM_MENU) {
return (u32)sItemUseFuncs[functionIdx].useItemFromMenuFunc;
} else if (discriminator == USE_ITEM_TASK_FIELD) {
} else if (funcType == ITEM_FUNC_USE_IN_FIELD) {
return (u32)sItemUseFuncs[functionIdx].useItemInFieldFunc;
}
return (u32)sItemUseFuncs[functionIdx].canUseItemFunc;
}
void sub_0206842C(FieldSystem *fieldSystem, ItemUseContext *usageContext)
void ItemUseContext_Init(FieldSystem *fieldSystem, ItemUseContext *ctxOut)
{
int playerXCoordinate, playerZCoordinate, playerDirection;
MapObject *v3;
if (PlayerAvatar_DistortionGravityChanged(fieldSystem->playerAvatar) == TRUE) {
sub_020684D0(fieldSystem, usageContext);
ItemUseContext_InitForDistortionWorld(fieldSystem, ctxOut);
return;
}
usageContext->fieldSystem = fieldSystem;
usageContext->mapHeaderID = fieldSystem->location->mapId;
usageContext->hasPartner = SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData));
usageContext->playerState = PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar);
ctxOut->fieldSystem = fieldSystem;
ctxOut->mapHeaderID = fieldSystem->location->mapId;
ctxOut->hasPartner = SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData));
ctxOut->playerState = PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar);
playerXCoordinate = Player_GetXPos(fieldSystem->playerAvatar);
playerZCoordinate = Player_GetZPos(fieldSystem->playerAvatar);
int x = Player_GetXPos(fieldSystem->playerAvatar);
int z = Player_GetZPos(fieldSystem->playerAvatar);
usageContext->currTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, playerXCoordinate, playerZCoordinate);
ctxOut->currTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, x, z);
playerDirection = PlayerAvatar_GetDir(fieldSystem->playerAvatar);
int playerDirection = PlayerAvatar_GetDir(fieldSystem->playerAvatar);
switch (playerDirection) {
case 0:
playerZCoordinate--;
case DIR_NORTH:
z--;
break;
case 1:
playerZCoordinate++;
case DIR_SOUTH:
z++;
break;
case 3:
playerXCoordinate++;
case DIR_EAST:
x++;
break;
case 2:
playerXCoordinate--;
case DIR_WEST:
x--;
break;
}
usageContext->facingTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, playerXCoordinate, playerZCoordinate);
sub_0203C9D4(fieldSystem, &v3);
ctxOut->facingTileBehavior = TerrainCollisionManager_GetTileBehavior(fieldSystem, x, z);
MapObject *mapObj;
sub_0203C9D4(fieldSystem, &mapObj);
usageContext->berryPatchFlags = BerryPatches_GetPatchFlags(fieldSystem, v3);
usageContext->playerAvatar = fieldSystem->playerAvatar;
ctxOut->berryPatchFlags = BerryPatches_GetPatchFlags(fieldSystem, mapObj);
ctxOut->playerAvatar = fieldSystem->playerAvatar;
}
static void sub_020684D0(FieldSystem *fieldSystem, ItemUseContext *usageContext)
static void ItemUseContext_InitForDistortionWorld(FieldSystem *fieldSystem, ItemUseContext *ctxOut)
{
usageContext->fieldSystem = fieldSystem;
usageContext->mapHeaderID = fieldSystem->location->mapId;
usageContext->hasPartner = SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData));
usageContext->playerState = PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar);
usageContext->currTileBehavior = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
ctxOut->fieldSystem = fieldSystem;
ctxOut->mapHeaderID = fieldSystem->location->mapId;
ctxOut->hasPartner = SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData));
ctxOut->playerState = PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar);
ctxOut->currTileBehavior = PlayerAvatar_GetDistortionCurrTileBehaviour(fieldSystem->playerAvatar);
{
int v0 = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
usageContext->facingTileBehavior = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, v0);
}
int distortionDir = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
ctxOut->facingTileBehavior = PlayerAvatar_GetDistortionFacingTileBehaviour(fieldSystem->playerAvatar, distortionDir);
usageContext->berryPatchFlags = BerryPatches_GetPatchFlags(fieldSystem, NULL);
usageContext->playerAvatar = fieldSystem->playerAvatar;
ctxOut->berryPatchFlags = BerryPatches_GetPatchFlags(fieldSystem, NULL);
ctxOut->playerAvatar = fieldSystem->playerAvatar;
}
static UnkStruct_0206851C *sub_0206851C(u32 param0, u16 param1, u16 param2, u16 param3, u16 param4)
@ -260,7 +255,7 @@ static void sub_02068540(ItemMenuUseContext *usageContext, const ItemUseContext
menu->callback = sub_020685AC;
menu->taskData = sub_0206851C(param2, usageContext->item, 0, 0, 0);
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static void sub_02068584(ItemFieldUseContext *usageContext, u32 param1)
@ -327,7 +322,7 @@ static void UseTownMapFromMenu(ItemMenuUseContext *usageContext, const ItemUseCo
StartMenu *menu = FieldTask_GetEnv(usageContext->fieldTask);
menu->taskData = FieldSystem_OpenTownMapItem(fieldSystem);
StartMenu_SetCallback(menu, sub_0203C3F4);
StartMenu_SetCallback(menu, StartMenu_ExitTownMap);
}
static BOOL UseTownMapInField(ItemFieldUseContext *usageContext)
@ -350,7 +345,7 @@ static void UseExplorerKitFromMenu(ItemMenuUseContext *usageContext, const ItemU
menu->callback = FieldTask_MapChangeToUnderground;
menu->taskData = sub_02053FAC(fieldSystem);
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
fieldSystem->menuCursorPos = 0;
}
@ -420,7 +415,7 @@ static void UseBicycleFromMenu(ItemMenuUseContext *usageContext, const ItemUseCo
menu->callback = MountOrUnmountBicycle;
menu->taskData = NULL;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL UseBicycleInField(ItemFieldUseContext *usageContext)
@ -515,7 +510,7 @@ static void UseJournalFromMenu(ItemMenuUseContext *usageContext, const ItemUseCo
StartMenu *v1 = FieldTask_GetEnv(usageContext->fieldTask);
sub_0203D30C(fieldSystem, NULL);
StartMenu_SetCallback(v1, sub_0203C50C);
StartMenu_SetCallback(v1, StartMenu_ExitJournal);
}
static BOOL UseJournalInField(ItemFieldUseContext *usageContext)
@ -561,7 +556,7 @@ static void UseMailFromMenu(ItemMenuUseContext *usageContext, const ItemUseConte
StartMenu *menu = FieldTask_GetEnv(usageContext->fieldTask);
UnkStruct_02097728 *v2 = sub_0203D94C(fieldSystem, 3, Item_MailNumber(usageContext->item), HEAP_ID_FIELD2);
menu->unk_260 = sub_0203C540(usageContext->item, 3, 0);
menu->additionalTaskContext = sub_0203C540(usageContext->item, 3, 0);
menu->taskData = v2;
StartMenu_SetCallback(menu, StartMenu_ExitMail);
@ -604,7 +599,7 @@ static void UsePoffinCaseFromMenu(ItemMenuUseContext *usageContext, const ItemUs
PoffinCaseAppData *poffinCase = FieldSystem_LaunchPoffinCaseApp(fieldSystem, HEAP_ID_FIELD2);
menu->taskData = poffinCase;
StartMenu_SetCallback(menu, sub_0203C710);
StartMenu_SetCallback(menu, StartMenu_ExitPoffinCase);
}
static BOOL UsePoffinCaseInField(ItemFieldUseContext *usageContext)
@ -625,7 +620,7 @@ static void UsePalPadFromMenu(ItemMenuUseContext *usageContext, const ItemUseCon
sub_0203DE78(fieldSystem, fieldSystem->saveData);
menu->taskData = NULL;
StartMenu_SetCallback(menu, sub_0203C750);
StartMenu_SetCallback(menu, StartMenu_ExitPalPad);
}
static BOOL UsePalPadInField(ItemFieldUseContext *usageContext)
@ -651,7 +646,7 @@ static void UsePokeRadarFromMenu(ItemMenuUseContext *usageContext, const ItemUse
menu->callback = RefreshRadarChain;
menu->taskData = v2;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL UsePokeRadarInField(ItemFieldUseContext *usageContext)
@ -738,7 +733,7 @@ static void UseHoneyFromMenu(ItemMenuUseContext *usageContext, const ItemUseCont
menu->callback = ov5_021F0488;
menu->taskData = v2;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
Bag_TryRemoveItem(SaveData_GetBag(fieldSystem->saveData), usageContext->item, 1, HEAP_ID_FIELD2);
}
@ -772,7 +767,7 @@ static void UseOldRodFromMenu(ItemMenuUseContext *usageContext, const ItemUseCon
menu->callback = FieldTask_Fishing;
menu->taskData = FishingContext_Init(fieldSystem, HEAP_ID_FIELD2, FISHING_TYPE_OLD_ROD);
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL UseOldRodInField(ItemFieldUseContext *usageContext)
@ -792,7 +787,7 @@ static void UseGoodRodFromMenu(ItemMenuUseContext *usageContext, const ItemUseCo
menu->callback = FieldTask_Fishing;
menu->taskData = FishingContext_Init(fieldSystem, HEAP_ID_FIELD2, FISHING_TYPE_GOOD_ROD);
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL UseGoodRodInField(ItemFieldUseContext *usageContext)
@ -812,7 +807,7 @@ static void UseSuperRodFromMenu(ItemMenuUseContext *usageContext, const ItemUseC
menu->callback = FieldTask_Fishing;
menu->taskData = FishingContext_Init(fieldSystem, HEAP_ID_FIELD2, FISHING_TYPE_SUPER_ROD);
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
}
static BOOL UseSuperRodInField(ItemFieldUseContext *usageContext)
@ -940,7 +935,7 @@ static void UseEscapeRopeFromMenu(ItemMenuUseContext *usageContext, const ItemUs
menu->callback = WarpWithEscapeRope;
menu->taskData = NULL;
menu->state = START_MENU_STATE_10;
menu->state = START_MENU_STATE_NEW_TASK;
Bag_TryRemoveItem(SaveData_GetBag(fieldSystem->saveData), usageContext->item, 1, HEAP_ID_FIELD2);
}
@ -1008,7 +1003,7 @@ static void UseVsRecorderFromMenu(ItemMenuUseContext *usageContext, const ItemUs
sub_0203DE88(fieldSystem, fieldSystem->saveData);
menu->taskData = NULL;
StartMenu_SetCallback(menu, sub_0203C784);
StartMenu_SetCallback(menu, StartMenu_ExitVsRecorder);
}
static BOOL UseVsRecorderInField(ItemFieldUseContext *usageContext)
@ -1064,8 +1059,8 @@ BOOL sub_02069238(FieldSystem *fieldSystem)
item = (u16)Bag_GetRegisteredItem(SaveData_GetBag(fieldSystem->saveData));
itemUseFuncIdx = (u16)Item_LoadParam(item, ITEM_PARAM_FIELD_USE_FUNC, HEAP_ID_FIELD2);
checkUse = (ItemCheckUseFunc)GetItemUseFunction(USE_ITEM_TASK_CHECK, itemUseFuncIdx);
useInField = (ItemFieldUseFunc)GetItemUseFunction(USE_ITEM_TASK_FIELD, itemUseFuncIdx);
checkUse = (ItemCheckUseFunc)ItemUseFunction_Get(ITEM_FUNC_CHECK_CAN_USE, itemUseFuncIdx);
useInField = (ItemFieldUseFunc)ItemUseFunction_Get(ITEM_FUNC_USE_IN_FIELD, itemUseFuncIdx);
if (useInField == NULL) {
return FALSE;
@ -1077,7 +1072,7 @@ BOOL sub_02069238(FieldSystem *fieldSystem)
usageContext->fieldSystem = fieldSystem;
usageContext->unk_28 = item;
sub_0206842C(fieldSystem, &usageContext->unk_04);
ItemUseContext_Init(fieldSystem, &usageContext->unk_04);
usageResult = 0;

View File

@ -261,7 +261,6 @@ pokeplatinum_c = files(
'tv_episode_segment.c',
'unk_0206F314.c',
'unk_02070428.c',
'unk_0207064C.c',
'field_move_tasks.c',
'unk_020711C8.c',
'overworld_anim_manager.c',

View File

@ -298,7 +298,7 @@ BOOL FieldInput_Process(const FieldInput *input, FieldSystem *fieldSystem)
}
int distortionDir = PlayerAvatar_GetDistortionDir(fieldSystem->playerAvatar);
u32 distortionBehavior = PlayerAvatar_GetDistortionTileBehaviour(fieldSystem->playerAvatar, distortionDir);
u32 distortionBehavior = PlayerAvatar_GetDistortionFacingTileBehaviour(fieldSystem->playerAvatar, distortionDir);
int distortionScript = Field_TileBehaviorToScript(fieldSystem, distortionBehavior);
if (distortionScript != 0xffff) {
@ -329,9 +329,9 @@ BOOL FieldInput_Process(const FieldInput *input, FieldSystem *fieldSystem)
return TRUE;
}
if (input->menu && sub_0203A9C8(fieldSystem) == TRUE) {
if (input->menu && FieldSystem_IsInValidLocation(fieldSystem) == TRUE) {
Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN);
StartMenu_Init(fieldSystem);
StartMenu_Open(fieldSystem);
return TRUE;
}
@ -420,7 +420,7 @@ BOOL FieldInput_Process_Colosseum(FieldInput *input, FieldSystem *fieldSystem)
if (input->menu) {
Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN);
sub_0203AABC(fieldSystem);
StartMenu_OpenColosseum(fieldSystem);
return TRUE;
}
@ -477,7 +477,7 @@ BOOL FieldInput_Process_UnionRoom(const FieldInput *input, FieldSystem *fieldSys
if (input->menu && CommSys_ConnectedCount() <= 1) {
Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN);
sub_0203AA78(fieldSystem);
StartMenu_OpenUnionRoom(fieldSystem);
sub_0205BEA8(4);
sub_02036BA0();
return TRUE;
@ -534,7 +534,7 @@ int FieldInput_Process_BattleTower(const FieldInput *input, FieldSystem *fieldSy
if (input->menu) {
Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN);
StartMenu_Init(fieldSystem);
StartMenu_Open(fieldSystem);
return TRUE;
}

View File

@ -1715,13 +1715,13 @@ static void MonRideTask_Init(FieldSystem *fieldSystem, Pokemon *partyMon, MonRid
static void NewMonRideCutIn(FieldSystem *fieldSystem, MonRideTask *monRideTask)
{
monRideTask->HMCutInTask = SysTask_HMCutIn_New(fieldSystem, 0, monRideTask->partyMon, monRideTask->playerGender);
monRideTask->HMCutInTask = HMCutIn_StartTask(fieldSystem, 0, monRideTask->partyMon, monRideTask->playerGender);
}
static BOOL CheckMonRideCutInFinished(MonRideTask *monRideTask)
{
if (CheckHMCutInFinished(monRideTask->HMCutInTask) == TRUE) {
SysTask_HMCutIn_SetTaskDone(monRideTask->HMCutInTask);
if (HMCutIn_IsFinished(monRideTask->HMCutInTask) == TRUE) {
HMCutIn_EndTask(monRideTask->HMCutInTask);
return TRUE;
}

View File

@ -42,13 +42,13 @@ BOOL ov5_021F101C(FieldTask *param0)
break;
case 2: {
int v5 = PlayerAvatar_Gender(fieldSystem->playerAvatar);
v3->unk_00 = SysTask_HMCutIn_New(fieldSystem, 0, v1->unk_00, v5);
v3->unk_00 = HMCutIn_StartTask(fieldSystem, 0, v1->unk_00, v5);
}
(*v2)++;
break;
case 3:
if (CheckHMCutInFinished(v3->unk_00)) {
SysTask_HMCutIn_SetTaskDone(v3->unk_00);
if (HMCutIn_IsFinished(v3->unk_00)) {
HMCutIn_EndTask(v3->unk_00);
(*v2)++;
}
break;

View File

@ -387,7 +387,7 @@ static enum FieldWarpStateResult StartFieldMoveCutIn(FieldTask *task, FieldSyste
{
int gender = PlayerAvatar_Gender(fieldSystem->playerAvatar);
fieldWarp->cutInTask = SysTask_HMCutIn_New(fieldSystem, 0, fieldWarp->mon, gender);
fieldWarp->cutInTask = HMCutIn_StartTask(fieldSystem, 0, fieldWarp->mon, gender);
fieldWarp->state++;
return STATE_RESULT_NEXT_STATE;
@ -395,11 +395,11 @@ static enum FieldWarpStateResult StartFieldMoveCutIn(FieldTask *task, FieldSyste
static enum FieldWarpStateResult FinishFieldMoveCutIn(FieldTask *task, FieldSystem *fieldSystem, FieldWarp *fieldWarp)
{
if (CheckHMCutInFinished(fieldWarp->cutInTask) == FALSE) {
if (HMCutIn_IsFinished(fieldWarp->cutInTask) == FALSE) {
return STATE_RESULT_NEXT_STATE;
}
SysTask_HMCutIn_SetTaskDone(fieldWarp->cutInTask);
HMCutIn_EndTask(fieldWarp->cutInTask);
fieldWarp->state++;
return STATE_RESULT_REPEAT_STATE;
}

View File

@ -1035,16 +1035,16 @@ static void HidePlayerMapObj(FieldSystem *fieldSystem, BOOL hidden)
MapObject_SetHidden(playerMapObject, hidden);
}
SysTask *SysTask_HMCutIn_New(FieldSystem *fieldSystem, BOOL isNotFly, Pokemon *shownPokemon, int playerGender)
SysTask *HMCutIn_StartTask(FieldSystem *fieldSystem, BOOL isFly, Pokemon *shownPokemon, int playerGender)
{
SysTask *task;
HMCutIn *cutIn = CreateHMCutIn(fieldSystem);
cutIn->mon = shownPokemon;
cutIn->playerGender = playerGender;
cutIn->_1 = isNotFly;
cutIn->_1 = isFly;
if (isNotFly == FALSE) {
if (isFly == FALSE) {
task = SysTask_Start(SysTask_CutIn, cutIn, 133);
} else {
task = SysTask_Start(SysTask_CutInFly, cutIn, 133);
@ -1053,13 +1053,13 @@ SysTask *SysTask_HMCutIn_New(FieldSystem *fieldSystem, BOOL isNotFly, Pokemon *s
return task;
}
int CheckHMCutInFinished(SysTask *cutInTask)
int HMCutIn_IsFinished(SysTask *cutInTask)
{
HMCutIn *cutIn = SysTask_GetParam(cutInTask);
return cutIn->isFinished;
}
void SysTask_HMCutIn_SetTaskDone(SysTask *cutInTask)
void HMCutIn_EndTask(SysTask *cutInTask)
{
HMCutIn *cutIn = SysTask_GetParam(cutInTask);

View File

@ -197,7 +197,7 @@ static const u8 sShop_BagPockets[] = {
POCKET_MAIL,
POCKET_BATTLE_ITEMS,
POCKET_KEY_ITEMS,
-1
POCKET_LIST_END,
};
static const WindowTemplate sShop_FrontierCurrMoneyWindowTemplate = {

View File

@ -4524,7 +4524,7 @@ static BOOL ScrCmd_0C5(ScriptContext *ctx)
u16 v2 = ScriptContext_GetVar(ctx);
Pokemon *v0 = Party_GetPokemonBySlotIndex(SaveData_GetParty(ctx->fieldSystem->saveData), v2);
*v1 = SysTask_HMCutIn_New(ctx->fieldSystem, 0, v0, PlayerAvatar_Gender(ctx->fieldSystem->playerAvatar));
*v1 = HMCutIn_StartTask(ctx->fieldSystem, 0, v0, PlayerAvatar_Gender(ctx->fieldSystem->playerAvatar));
ScriptContext_Pause(ctx, sub_02042C80);
return TRUE;
@ -4534,8 +4534,8 @@ static BOOL sub_02042C80(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
if (CheckHMCutInFinished(*v0) == TRUE) {
SysTask_HMCutIn_SetTaskDone(*v0);
if (HMCutIn_IsFinished(*v0) == TRUE) {
HMCutIn_EndTask(*v0);
return TRUE;
}

View File

@ -404,8 +404,8 @@ void FieldSystem_ShowStartMenu(FieldSystem *fieldSystem)
{
ScriptManager *scriptManager = FieldTask_GetEnv(fieldSystem->task);
if (sub_0203A9C8(fieldSystem) == TRUE) {
scriptManager->function = StartMenu_Open;
if (FieldSystem_IsInValidLocation(fieldSystem) == TRUE) {
scriptManager->function = StartMenu_OpenFromScript;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@
#include <string.h>
#include "constants/heap.h"
#include "constants/start_menu.h"
#include "generated/traps.h"
#include "field/field_system.h"
@ -91,31 +92,12 @@ enum UndergroundMenuState {
UNDERGROUND_MENU_STATE_GOOD_SELECTED,
};
enum MenuIconAnimState {
ICON_ANIM_NONE = 0,
ICON_ANIM_SWELL,
ICON_ANIM_WIGGLE,
ICON_ANIM_COUNT,
};
enum MenuIconPalette {
ICON_GRAYSCALE = 0,
ICON_COLORED,
};
enum UndergroundMenuSpriteTemplate {
UNDERGROUND_MENU_CURSOR_TEMPLATE = 0,
UNDERGROUND_MENU_ICON_TEMPLATE,
};
#define UNDERGROUND_MENU_MAX_DISPLAY 6
#define UNDERGROUND_TRAP_DESCRIPTIONS_START UndergroundTraps_Text_MoveTrapUpDescription
#define UNDERGROUND_ITEM_DESCRIPTIONS_START UndergroundItems_Text_PrismSphereDescription
#define UNDERGROUND_GOOD_DESCRIPTIONS_START UndergroundGoods_Text_CloseDescription
#define ICON_CURSOR_INDEX 0
typedef void (*SelectedOptionCallback)(UndergroundMenu *);
typedef void (*OpenMenuFn)(UndergroundMenu *);
@ -172,18 +154,20 @@ static const WindowTemplate sYesNoWindowTemplate = {
.baseTile = BASE_TILE_YES_NO_MENU
};
// clang-format off
static const struct {
u32 bankEntry;
u32 callback;
} sUndergroundMenuOptions[] = {
[UNDERGROUND_START_MENU_OPTION_TRAPS] = { .bankEntry = UndergroundCommon_Text_Traps, .callback = (u32)UndergroundMenu_OpenTrapsMenu },
[UNDERGROUND_START_MENU_OPTION_SPHERES] = { .bankEntry = UndergroundCommon_Text_Spheres, .callback = (u32)UndergroundMenu_OpenSpheresMenu },
[UNDERGROUND_START_MENU_OPTION_GOODS] = { .bankEntry = UndergroundCommon_Text_Goods, .callback = (u32)UndergroundMenu_OpenGoodsMenu },
[UNDERGROUND_START_MENU_OPTION_TREASURES] = { .bankEntry = UndergroundCommon_Text_Treasures, .callback = (u32)UndergroundMenu_OpenTreasuresMenu },
[UNDERGROUND_START_MENU_OPTION_TRAINER] = { .bankEntry = UndergroundCommon_Text_TrainerNameTemplate, .callback = (u32)UndergroundMenu_OpenTrainerRecords },
[UNDERGROUND_START_MENU_OPTION_GO_UP] = { .bankEntry = UndergroundCommon_Text_GoUp, .callback = (u32)UndergroundMenu_GoUpCallback },
[UNDERGROUND_START_MENU_OPTION_CLOSE] = { .bankEntry = UndergroundCommon_Text_Close, .callback = (u32)UndergroundMenu_CloseCallback }
[UNDERGROUND_START_MENU_OPTION_TRAPS] = { .bankEntry = UndergroundCommon_Text_Traps, .callback = (u32)UndergroundMenu_OpenTrapsMenu },
[UNDERGROUND_START_MENU_OPTION_SPHERES] = { .bankEntry = UndergroundCommon_Text_Spheres, .callback = (u32)UndergroundMenu_OpenSpheresMenu },
[UNDERGROUND_START_MENU_OPTION_GOODS] = { .bankEntry = UndergroundCommon_Text_Goods, .callback = (u32)UndergroundMenu_OpenGoodsMenu },
[UNDERGROUND_START_MENU_OPTION_TREASURES] = { .bankEntry = UndergroundCommon_Text_Treasures, .callback = (u32)UndergroundMenu_OpenTreasuresMenu },
[UNDERGROUND_START_MENU_OPTION_TRAINER] = { .bankEntry = UndergroundCommon_Text_PlayerTemplate, .callback = (u32)UndergroundMenu_OpenTrainerRecords },
[UNDERGROUND_START_MENU_OPTION_GO_UP] = { .bankEntry = UndergroundCommon_Text_GoUp, .callback = (u32)UndergroundMenu_GoUpCallback },
[UNDERGROUND_START_MENU_OPTION_CLOSE] = { .bankEntry = UndergroundCommon_Text_Close, .callback = (u32)UndergroundMenu_CloseCallback }
};
// clang-format on
static const ListMenuTemplate sListMenuTemplate = {
.choices = NULL,
@ -208,25 +192,25 @@ static const ListMenuTemplate sListMenuTemplate = {
};
static const SpriteTemplate sSpriteTemplates[] = {
[UNDERGROUND_MENU_CURSOR_TEMPLATE] = {
[CURSOR_TEMPLATE] = {
.x = 204,
.y = 20,
.z = 0,
.animIdx = 0,
.animIdx = ICON_ANIM_NONE,
.priority = 1,
.plttIdx = 1,
.plttIdx = PALETTE_COLORED,
.vramType = NNS_G2D_VRAM_TYPE_2DMAIN,
.resources = { 0x38C0, 0x38C0, 0x38C0, 0x38C0, 0x0, 0x0 },
.bgPriority = 0,
.vramTransfer = FALSE,
},
[UNDERGROUND_MENU_ICON_TEMPLATE] = {
[ICON_TEMPLATE] = {
.x = 174,
.y = 20,
.z = 0,
.animIdx = 0,
.animIdx = ICON_ANIM_NONE,
.priority = 0,
.plttIdx = 0,
.plttIdx = PALETTE_GRAYSCALE,
.vramType = NNS_G2D_VRAM_TYPE_2DMAIN,
.resources = { 0x38C1, 0x38C0, 0x38C1, 0x38C1, 0x0, 0x0 },
.bgPriority = 0,
@ -255,9 +239,9 @@ static void UndergroundMenu_InitStartMenuSprites(UndergroundMenu *menu, u8 *opti
SpriteResourceManager_LoadAnimation(&menu->spriteManager, narc, cursor_anim_NANR, FALSE, 14528);
SpriteResourceManager_LoadTiles(&menu->spriteManager, narc, cursor_NCGR, FALSE, NNS_G2D_VRAM_TYPE_2DMAIN, 14528);
menu->sprites[ICON_CURSOR_INDEX] = SpriteResourceManager_CreateManagedSprite(&menu->spriteManager, &sSpriteTemplates[UNDERGROUND_MENU_CURSOR_TEMPLATE]);
menu->sprites[CURSOR_SPRITE_INDEX] = SpriteResourceManager_CreateManagedSprite(&menu->spriteManager, &sSpriteTemplates[CURSOR_TEMPLATE]);
UndergroundMenu_SetStartMenuCursorPos(menu->sprites[ICON_CURSOR_INDEX]->sprite, menu->menuCursorPos);
UndergroundMenu_SetStartMenuCursorPos(menu->sprites[CURSOR_SPRITE_INDEX]->sprite, menu->menuCursorPos);
SpriteResourceManager_LoadCell(&menu->spriteManager, narc, underground_icons_cell_NCER, FALSE, 14529);
SpriteResourceManager_LoadAnimation(&menu->spriteManager, narc, underground_icons_anim_NANR, FALSE, 14529);
@ -266,7 +250,7 @@ static void UndergroundMenu_InitStartMenuSprites(UndergroundMenu *menu, u8 *opti
NARC_dtor(narc);
for (u32 i = 0; i < menuOptionCount; i++) {
SpriteTemplate template = sSpriteTemplates[UNDERGROUND_MENU_ICON_TEMPLATE];
SpriteTemplate template = sSpriteTemplates[ICON_TEMPLATE];
template.y += 24 * i;
template.animIdx = optionList[i] * ICON_ANIM_COUNT;
@ -276,7 +260,7 @@ static void UndergroundMenu_InitStartMenuSprites(UndergroundMenu *menu, u8 *opti
Sprite_SetAffineScaleEx(menu->sprites[i + 1]->sprite, &scale, AFFINE_OVERWRITE_MODE_NORMAL);
}
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[menu->menuCursorPos + 1]->sprite, ICON_ANIM_WIGGLE, ICON_COLORED);
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[menu->menuCursorPos + 1]->sprite, ICON_ANIM_WIGGLE, PALETTE_COLORED);
menu->spriteCount = menuOptionCount + 1;
GXLayers_EngineAToggleLayers(GX_PLANEMASK_OBJ, TRUE);
}
@ -315,8 +299,8 @@ static void UndergroundMenu_SetIconAnimationAndPalette(Sprite *sprite, u16 anim,
static void UndergroundMenu_ChangeActiveMenuIcon(UndergroundMenu *menu, u16 oldIndex, u16 index)
{
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[oldIndex + 1]->sprite, ICON_ANIM_NONE, ICON_GRAYSCALE);
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[index + 1]->sprite, ICON_ANIM_SWELL, ICON_COLORED);
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[oldIndex + 1]->sprite, ICON_ANIM_NONE, PALETTE_GRAYSCALE);
UndergroundMenu_SetIconAnimationAndPalette(menu->sprites[index + 1]->sprite, ICON_ANIM_SWELL, PALETTE_COLORED);
}
static void UndergroundMenu_TryTransitionIconAnimationToWiggle(Sprite *sprite)
@ -326,7 +310,7 @@ static void UndergroundMenu_TryTransitionIconAnimationToWiggle(Sprite *sprite)
}
if (!Sprite_IsAnimated(sprite)) {
UndergroundMenu_SetIconAnimationAndPalette(sprite, ICON_ANIM_WIGGLE, ICON_COLORED);
UndergroundMenu_SetIconAnimationAndPalette(sprite, ICON_ANIM_WIGGLE, PALETTE_COLORED);
}
}
@ -489,13 +473,13 @@ void UndergroundMenu_Start(ExitCallback exitCallback, FieldSystem *fieldSystem)
UndergroundMan_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
}
#define ADD_OPTION(__menuOption) \
do { \
list[optionCount] = __menuOption; \
optionCount++; \
#define ADD_OPTION(__menuOption) \
do { \
listOut[optionCount] = __menuOption; \
optionCount++; \
} while (0)
static u32 UndergroundMenu_MakeList(u8 *list)
static u32 UndergroundMenu_MakeStartMenuOptionList(u8 *listOut)
{
u32 optionCount = 0;
ADD_OPTION(UNDERGROUND_START_MENU_OPTION_TRAPS);
@ -513,7 +497,7 @@ static void UndergroundMenu_InitStartMenu(UndergroundMenu *menu)
MenuTemplate template;
const int trainerOptionIndex = UNDERGROUND_START_MENU_OPTION_TRAINER;
u8 optionList[UNDERGROUND_START_MENU_OPTION_COUNT];
UndergroundMenu_MakeList(optionList);
UndergroundMenu_MakeStartMenuOptionList(optionList);
menu->menuOptions = StringList_New(NELEMS(sUndergroundMenuOptions), HEAP_ID_FIELD1);
Window_Add(menu->fieldSystem->bgConfig, &menu->primaryWindow, BG_LAYER_MAIN_3, 20, 1, 11, NELEMS(sUndergroundMenuOptions) * 3, 13, BASE_TILE_STANDARD_WINDOW_FRAME - 11 * 22);
@ -646,7 +630,7 @@ static BOOL UndergroundMenu_HandleStartMenu(SysTask *sysTask, void *data)
menu->menuCursorPos = Menu_GetCursorPos(menu->menu);
if (prevPos != menu->menuCursorPos) {
UndergroundMenu_SetStartMenuCursorPos(menu->sprites[ICON_CURSOR_INDEX]->sprite, menu->menuCursorPos);
UndergroundMenu_SetStartMenuCursorPos(menu->sprites[CURSOR_SPRITE_INDEX]->sprite, menu->menuCursorPos);
UndergroundMenu_ChangeActiveMenuIcon(menu, prevPos, menu->menuCursorPos);
menu->fieldSystem->menuCursorPos = menu->menuCursorPos;
}

View File

@ -106,6 +106,7 @@
#include "save_player.h"
#include "savedata.h"
#include "savedata_misc.h"
#include "start_menu.h"
#include "string_gf.h"
#include "system_data.h"
#include "system_flags.h"
@ -129,7 +130,6 @@
#include "unk_02098218.h"
#include "vars_flags.h"
#include "constdata/const_020EA02C.h"
#include "constdata/const_020EA328.h"
#include "constdata/const_020EA358.h"
#include "constdata/const_020F2FCC.h"
@ -258,7 +258,7 @@ static const u8 Unk_020EA164[] = {
0xff
};
void sub_0203D1E4(FieldSystem *fieldSystem, void *param1)
void sub_0203D1E4(FieldSystem *fieldSystem, BagContext *param1)
{
FS_EXTERN_OVERLAY(bag);
@ -272,30 +272,30 @@ void sub_0203D1E4(FieldSystem *fieldSystem, void *param1)
FieldSystem_StartChildProcess(fieldSystem, &Unk_ov84_02241130, param1);
}
void *sub_0203D20C(FieldSystem *fieldSystem, ItemUseContext *param1)
BagContext *FieldSystem_OpenBag(FieldSystem *fieldSystem, ItemUseContext *itemUseCtx)
{
Bag *v0 = SaveData_GetBag(fieldSystem->saveData);
void *v1 = BagContext_CreateWithPockets(v0, Unk_020EA164, HEAP_ID_FIELD2);
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
BagContext *bagCtx = BagContext_CreateWithPockets(bag, Unk_020EA164, HEAP_ID_FIELD2);
BagContext_Init(v1, fieldSystem->saveData, 0, fieldSystem->bagCursor);
BagContext_SetMapLoadType(v1, fieldSystem->mapLoadType);
BagContext_Init(bagCtx, fieldSystem->saveData, 0, fieldSystem->bagCursor);
BagContext_SetMapLoadType(bagCtx, fieldSystem->mapLoadType);
if (PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar) == 0x1) {
BagContext_SetIsCycling(v1);
if (PlayerAvatar_GetPlayerState(fieldSystem->playerAvatar) == PLAYER_STATE_CYCLING) {
BagContext_SetIsCycling(bagCtx);
}
BagContext_SetItemUseContext(v1, param1);
sub_0203D1E4(fieldSystem, v1);
BagContext_SetItemUseContext(bagCtx, itemUseCtx);
sub_0203D1E4(fieldSystem, bagCtx);
return v1;
return bagCtx;
}
void *FieldSystem_CreateBagContext(FieldSystem *fieldSystem, int pocketType)
{
void *bagContext;
static const u8 *pocketList;
static const u8 berriesPockets[] = { POCKET_BERRIES, 255 };
static const u8 itemsPockets[] = { POCKET_ITEMS, 255 };
static const u8 berriesPockets[] = { POCKET_BERRIES, POCKET_LIST_END };
static const u8 itemsPockets[] = { POCKET_ITEMS, POCKET_LIST_END };
Bag *bag = SaveData_GetBag(fieldSystem->saveData);
switch (pocketType) {
@ -530,7 +530,7 @@ void *sub_0203D5C8(int param0, FieldSystem *fieldSystem, int param2)
v0->showContest = PokemonSummaryScreen_ShowContestData(fieldSystem->saveData);
v0->chatotCry = NULL;
PokemonSummaryScreen_FlagVisiblePages(v0, Unk_020EA02C);
PokemonSummaryScreen_FlagVisiblePages(v0, gAllSummaryScreenPages);
PokemonSummaryScreen_SetPlayerProfile(v0, SaveData_GetTrainerInfo(fieldSystem->saveData));
FieldSystem_StartChildProcess(fieldSystem, &gPokemonSummaryScreenApp, v0);
@ -1271,7 +1271,7 @@ void FieldSystem_OpenTrainerCardScreen(FieldSystem *fieldSystem, TrainerCard *tr
FieldSystem_StartChildProcess(fieldSystem, &template, trainerCard);
}
BOOL sub_0203E0AC(FieldSystem *fieldSystem, void *param1)
BOOL FieldSystem_OpenPokedex(FieldSystem *fieldSystem, PokedexOverlayArgs *args)
{
FS_EXTERN_OVERLAY(pokedex);
@ -1282,8 +1282,8 @@ BOOL sub_0203E0AC(FieldSystem *fieldSystem, void *param1)
FS_OVERLAY_ID(pokedex)
};
FieldSystem_StartChildProcess(fieldSystem, &template, param1);
return 1;
FieldSystem_StartChildProcess(fieldSystem, &template, args);
return TRUE;
}
void FieldSystem_LaunchChooseStarterApp(FieldSystem *fieldSystem, ChooseStarterData *chooseStarterData)

View File

@ -424,7 +424,7 @@ int sub_0205F588(PlayerAvatar *playerAvatar)
return 0;
}
void sub_0205F5E4(PlayerAvatar *playerAvatar, int param1)
void sub_0205F5E4(PlayerAvatar *playerAvatar, int dir)
{
MapObject *mapObj;
@ -433,11 +433,11 @@ void sub_0205F5E4(PlayerAvatar *playerAvatar, int param1)
mapObj = Player_MapObject(playerAvatar);
MapObject_TryFace(mapObj, param1);
MapObject_TryFace(mapObj, dir);
sub_02062A0C(mapObj, 0x0);
MapObject_UpdateCoords(mapObj);
sub_020656DC(mapObj);
LocalMapObj_SetAnimationCode(mapObj, MovementAction_TurnActionTowardsDir(param1, MOVEMENT_ACTION_FACE_NORTH));
LocalMapObj_SetAnimationCode(mapObj, MovementAction_TurnActionTowardsDir(dir, MOVEMENT_ACTION_FACE_NORTH));
}
static int sub_0205F62C(PlayerAvatar *playerAvatar, int param1)
@ -2426,12 +2426,12 @@ void sub_02061674(PlayerAvatar *playerAvatar, int param1, int *param2, int *para
(*param4) += v0->unk_04;
}
u32 PlayerAvatar_GetDistortionTileBehaviour(PlayerAvatar *playerAvatar, int param1)
u32 PlayerAvatar_GetDistortionFacingTileBehaviour(PlayerAvatar *playerAvatar, int distortionDir)
{
u32 v0;
if (PlayerAvatar_DistortionGravityChanged(playerAvatar) == FALSE) {
v0 = sub_0206156C(playerAvatar, param1);
v0 = sub_0206156C(playerAvatar, distortionDir);
} else {
MapObject *mapObj = Player_MapObject(playerAvatar);
FieldSystem *fieldSystem = MapObject_FieldSystem(mapObj);
@ -2439,7 +2439,7 @@ u32 PlayerAvatar_GetDistortionTileBehaviour(PlayerAvatar *playerAvatar, int para
int y = MapObject_GetY(mapObj) / 2;
int z = MapObject_GetZ(mapObj);
sub_02061674(playerAvatar, param1, &x, &y, &z);
sub_02061674(playerAvatar, distortionDir, &x, &y, &z);
DistWorld_GetTileBehaviorOnCurrentFloatingPlatform(fieldSystem, x, y, z, &v0);
}

View File

@ -1,73 +0,0 @@
#include "unk_0207064C.h"
#include <nitro.h>
#include <string.h>
#include "field/field_system.h"
#include "overlay006/hm_cut_in.h"
#include "field_map_change.h"
#include "field_task.h"
#include "heap.h"
#include "location.h"
#include "player_avatar.h"
#include "pokemon.h"
#include "spawn_locations.h"
#include "sys_task_manager.h"
typedef struct {
FieldSystem *fieldSystem;
int state;
u16 mapID;
s16 unk_0A;
s16 unk_0C;
Pokemon *partyPokemon;
SysTask *cutInTask;
} FlyTaskEnv;
void *sub_0207064C(enum HeapID heapID, FieldSystem *fieldSystem, Pokemon *mon, u16 mapID, s16 param4, s16 param5)
{
FlyTaskEnv *v0 = Heap_AllocAtEnd(heapID, sizeof(FlyTaskEnv));
memset(v0, 0, sizeof(FlyTaskEnv));
v0->fieldSystem = fieldSystem;
v0->partyPokemon = mon;
v0->mapID = mapID;
v0->unk_0A = param4;
v0->unk_0C = param5;
return v0;
}
BOOL sub_02070680(FieldTask *task)
{
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task);
FlyTaskEnv *taskEnv = FieldTask_GetEnv(task);
switch (taskEnv->state) {
case 0:
taskEnv->cutInTask = SysTask_HMCutIn_New(taskEnv->fieldSystem, 1, taskEnv->partyPokemon, PlayerAvatar_Gender(taskEnv->fieldSystem->playerAvatar));
taskEnv->state++;
break;
case 1:
if (CheckHMCutInFinished(taskEnv->cutInTask) == FALSE) {
break;
}
SysTask_HMCutIn_SetTaskDone(taskEnv->cutInTask);
u16 destination;
Location location;
destination = GetSpawnIdByMapAndCoords(taskEnv->mapID, taskEnv->unk_0A, taskEnv->unk_0C);
GF_ASSERT(destination != 0);
Location_InitFly(destination, &location);
FieldTask_ChangeMapChangeFly(task, location.mapId, -1, location.x, location.z, FACE_DOWN);
Heap_Free(taskEnv);
}
return 0;
}