pokeheartgold/src/launch_application.c

1280 lines
50 KiB
C

#include "global.h"
#include "alph_puzzle.h"
#include "bag_view.h"
#include "certificates_app.h"
#include "choose_starter_app.h"
#include "fashion_case.h"
#include "field_system.h"
#include "launch_application.h"
#include "launch_application_data.h"
#include "launch_application_internal.h"
#include "friend_group.h"
#include "frontier_data.h"
#include "game_stats.h"
#include "get_egg.h"
#include "mail_misc.h"
#include "overlay_02.h"
#include "overlay_14.h"
#include "overlay_16.h"
#include "overlay_18.h"
#include "overlay_41.h"
#include "overlay_43.h"
#include "overlay_54.h"
#include "overlay_58.h"
#include "overlay_67.h"
#include "overlay_72.h"
#include "overlay_73.h"
#include "overlay_86.h"
#include "overlay_87.h"
#include "overlay_96.h"
#include "overlay_99.h"
#include "overlay_103.h"
#include "overlay_108.h"
#include "overlay_109.h"
#include "overlay_111.h"
#include "overlay_113.h"
#include "overlay_manager.h"
#include "overlay_trainer_card.h"
#include "pokedex_util.h"
#include "sys_flags.h"
#include "trainer_data.h"
#include "unk_020192D0.h"
#include "unk_0202C034.h"
#include "unk_0202C730.h"
#include "unk_0202CA24.h"
#include "unk_0202D230.h"
#include "unk_0202DB34.h"
#include "unk_02031904.h"
#include "unk_02037C94.h"
#include "unk_0203DFA4.h"
#include "unk_02054E00.h"
#include "unk_02055244.h"
#include "unk_020552A4.h"
#include "unk_02055418.h"
#include "unk_0206D494.h"
#include "unk_020755E8.h"
#include "unk_02078E30.h"
#include "unk_02082908.h"
#include "unk_02087A78.h"
#include "unk_02088288.h"
#include "unk_0205A44C.h"
#include "unk_020910D8.h"
#include "unk_02092BE8.h"
#include "unk_02097B78.h"
#include "save_local_field_data.h"
#include "save_pokeathlon.h"
#include "save_special_ribbons.h"
#include "save_trainer_card.h"
#include "battle/battle_022378C0.h"
#include "constants/flags.h"
extern u8 _020FA0B0[];
static PartyMenuArgs *PartyMenu_CreateArgs(HeapID heapId, FieldSystem *fieldSystem, int a2, int a3);
static BOOL Task_OpenPartyMenuThenMoveSelect(TaskManager *taskman);
static BOOL sub_0203E878(TaskManager *taskman);
static void PokegearPhone_LaunchApp_Impl(FieldSystem *fieldSystem, PokegearArgs *args);
static void PokegearTownMap_LaunchApp_Impl(FieldSystem *fieldSystem, PokegearArgs *args);
static void SafariAreaCustomizer_LaunchApp_Impl(FieldSystem *fieldSystem, SafariAreaCustomizerArgs *args);
static void SafariDecoration_LaunchApp_Impl(FieldSystem *fieldSystem, SafariDecorationArgs *args);
static void PhotoAlbum_LaunchApp_Impl(FieldSystem *fieldSystem, PhotoAlbumArgs *args);
static void AlphPuzzle_LaunchApp_Impl(FieldSystem *fieldSystem, AlphPuzzleArgs *args);
static void UnownReport_LaunchApp_Impl(FieldSystem *fieldSystem, UnownReportArgs *args);
static void BerryPots_LaunchApp_Impl(FieldSystem *fieldSystem, BerryPotsArgs *args);
static void ApricornBox_LaunchApp_Impl(FieldSystem *fieldSystem, ApricornBoxArgs *args);
static void BugContestSwapMon_LaunchApp_Impl(FieldSystem *fieldSystem, BugContestSwapMonArgs *args);
static void OptionsMenu_LaunchApp_Impl(FieldSystem *fieldSystem, OptionsMenuArgs *args);
static BOOL sub_0203EE54(SaveData *saveData);
static void PokeathlonCourseRecord_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonCourseRecordArgs *args);
static void PokeathlonMedals_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonMedalsArgs *args);
static void PokeathlonEventRecord_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonEventRecordArgs *args);
static void PokeathlonUnk_LaunchApp_Impl(FieldSystem *fieldSystem, UnkStruct_0203EFA0 *args);
static void sub_0203EFD4(FieldSystem *fieldSystem, UseMailArgs *args);
static UnkStruct_0203F0D0 *sub_0203F0D0(HeapID heapId, SaveData *saveData, int slot, int *a3, int a4);
static BOOL sub_0203F134(TaskManager *taskman);
static BOOL sub_0203F1E8(FieldSystem *fieldSystem, UnkStruct_0203F0D0 *args);
static void InitWirelessTradeSelectMonArgs(WirelessTradeSelectMonArgs *a0, FieldSystem *fieldSystem);
static void WirelessTradeSelectMon_FreeArgs(WirelessTradeSelectMonArgs *a0);
static BOOL Task_WirelessTrade(TaskManager *taskman);
static BOOL Task_NamingScreen(TaskManager *taskman);
static void SetName(TaskManager *taskman);
BOOL Battle_Init(OVY_MANAGER *man, int *state) {
return TRUE;
}
BOOL Battle_Main(OVY_MANAGER *man, int *state) {
if (Battle_Run(man, state) != 0) {
return TRUE;
}
return FALSE;
}
BOOL Battle_Exit(OVY_MANAGER *man, int *state) {
return TRUE;
}
void Battle_LaunchApp(FieldSystem *fieldSystem, BattleSetup *args) {
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_Battle, args);
}
void Bag_LaunchApp(FieldSystem *fieldSystem, BagView *args) {
const OVY_MGR_TEMPLATE *ptr = &sOverlayTemplate_Bag;
OVY_MGR_TEMPLATE template = *ptr;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
BagView *sub_0203E3FC(FieldSystem *fieldSystem, TaskManager *taskman) {
BagView *bagView = Bag_CreateView(Save_Bag_Get(fieldSystem->saveData), sAllPockets, HEAP_ID_FIELD);
sub_0207789C(bagView, fieldSystem->saveData, 0, fieldSystem->bagCursor, &fieldSystem->unk_10C);
sub_020778E8(bagView, fieldSystem->unk70);
if (PlayerAvatar_GetState(fieldSystem->playerAvatar) == PLAYER_STATE_CYCLING) {
sub_020778C8(bagView);
}
sub_020778DC(bagView, taskman);
Bag_LaunchApp(fieldSystem, bagView);
return bagView;
}
BagView *Bag_LaunchApp_WithPocket(FieldSystem *fieldSystem, u8 pocketType) {
Bag *bag = Save_Bag_Get(fieldSystem->saveData);
switch (pocketType) {
case POCKET_TYPE_ITEMS:
sPockets = sItemPocket;
break;
case POCKET_TYPE_BERRIES:
sPockets = sBerryPocket;
break;
default:
GF_ASSERT(FALSE);
}
BagView *bagView = Bag_CreateView(bag, sPockets, HEAP_ID_32);
sub_0207789C(bagView, fieldSystem->saveData, 3, fieldSystem->bagCursor, &fieldSystem->unk_10C);
Bag_LaunchApp(fieldSystem, bagView);
return bagView;
}
int BagView_SelectResult(BagView *bagView) {
int result = sub_02077904(bagView);
GF_ASSERT(result == 0 || sub_0207790C(bagView) != 5);
return result;
}
void PokemonSummary_LearnForget_LaunchApp(FieldSystem *fieldSystem, PokemonSummaryArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PokemonSummary, args);
}
static PartyMenuArgs *PartyMenu_CreateArgs(HeapID heapId, FieldSystem *fieldSystem, int a2, int a3) {
PartyMenuArgs *partyMenu = AllocFromHeap(heapId, sizeof(PartyMenuArgs));
MI_CpuClearFast(partyMenu, sizeof(PartyMenuArgs));
partyMenu->party = SaveArray_Party_Get(fieldSystem->saveData);
partyMenu->bag = Save_Bag_Get(fieldSystem->saveData);
partyMenu->mailbox = Save_Mailbox_Get(fieldSystem->saveData);
partyMenu->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
partyMenu->unk_25 = a2;
partyMenu->unk_24 = a3;
partyMenu->fieldSystem = fieldSystem;
partyMenu->unk20 = &fieldSystem->unk_10C;
return partyMenu;
}
PartyMenuArgs *PartyMenu_LaunchApp_Unk1(FieldSystem *fieldSystem, int a1, u8 a2) {
PartyMenuArgs *args = PartyMenu_CreateArgs(HEAP_ID_FIELD, fieldSystem, 0, 0);
args->unk_18 = a1;
args->unk_26 = a2;
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
PartyMenuArgs *PartyMenu_LaunchApp_Unk2(HeapID heapId, FieldSystem *fieldSystem) {
PartyMenuArgs *args = PartyMenu_CreateArgs(HEAP_ID_FIELD, fieldSystem, 0, 3);
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
PartyMenuArgs *PartyMenu_LaunchApp_Unk3(HeapID heapId, FieldSystem *fieldSystem) {
PartyMenuArgs *args = PartyMenu_CreateArgs(HEAP_ID_FIELD, fieldSystem, 0, 19);
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
int sub_0203E5C8(PartyMenuArgs *partyWork) {
return partyWork->unk_26;
}
PartyMenuArgs *PartyMenu_LaunchApp_Unk4(HeapID heapId, FieldSystem *fieldSystem, u16 a2) {
PartyMenuArgs *args = PartyMenu_CreateArgs(HEAP_ID_FIELD, fieldSystem, 0, 18);
args->unk_26 = a2;
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
int sub_0203E5F8(PartyMenuArgs *partyWork) {
return partyWork->unk_27;
}
u16 sub_0203E600(UnkStruct_0203E600 *a0) {
return a0->unk14;
}
static BOOL Task_OpenPartyMenuThenMoveSelect(TaskManager *taskman) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
PartyMenuMoveSelectData *data = TaskManager_GetEnvironment(taskman);
int *state = TaskManager_GetStatePtr(taskman);
switch (*state) {
case PMMS_OPEN_PARTY_MENU:
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, data->unk4);
*state = PMMS_WAIT_PARTY_MENU;
break;
case PMMS_WAIT_PARTY_MENU:
if (!FieldSystem_ApplicationIsRunning(fieldSystem)) {
switch (data->unk4->unk26) {
case 7:
sub_0205A508(2);
*state = PMMS_FREE;
break;
case 6:
sub_0205A508(1);
*state = PMMS_FREE;
break;
default:
*state = PMMS_OPEN_FORGET_MOVE;
}
}
break;
case PMMS_OPEN_FORGET_MOVE:
data->pokemonSummary = PokemonSummary_CreateArgs(fieldSystem, data->unk0, 0);
data->pokemonSummary->unk14 = data->unk4->unk26;
PokemonSummary_LearnForget_LaunchApp(fieldSystem, data->pokemonSummary);
*state = PMMS_WAIT_FORGET_MOVE;
break;
case PMMS_WAIT_FORGET_MOVE:
if (!FieldSystem_ApplicationIsRunning(fieldSystem)) {
data->unk4->unk26 = data->pokemonSummary->unk14;
FreeToHeap(data->pokemonSummary);
*state = PMMS_OPEN_PARTY_MENU;
}
break;
case PMMS_FREE:
FreeToHeap(data);
return TRUE;
}
return FALSE;
}
PartyMenuArgs *SelectPartyMonAndLearnMove(TaskManager *taskman, HeapID heapId) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
UnkStruct_0203E6D4 *data = AllocFromHeap(heapId, sizeof(UnkStruct_0203E6D4));
data->heapId = heapId;
PartyMenuArgs *partyMenu = PartyMenu_CreateArgs(heapId, fieldSystem, 0, 2);
partyMenu->unk_36_0 = 2;
partyMenu->unk_36_4 = 2;
partyMenu->unk_37 = 0x1e;
partyMenu->unk_14 = 0;
data->partyMenu = partyMenu;
TaskManager_Call(taskman, Task_OpenPartyMenuThenMoveSelect, data);
return partyMenu;
}
PartyMenuArgs *PartyMenu_LaunchApp_Unk5(FieldSystem *fieldSystem, int a1) {
PartyMenuArgs *args = PartyMenu_CreateArgs(HEAP_ID_FIELD, fieldSystem, 0, 0x15);
args->unk_26 = a1;
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
PokemonSummaryArgs *PokemonSummary_CreateArgs(FieldSystem *fieldSystem, HeapID heapId, int a2) {
SaveData *saveData = fieldSystem->saveData;
PokemonSummaryArgs *args = AllocFromHeapAtEnd(heapId, sizeof(PokemonSummaryArgs));
MI_CpuFill8(args, 0, sizeof(PokemonSummaryArgs));
args->options = Save_PlayerData_GetOptionsAddr(saveData);
args->party = SaveArray_Party_Get(saveData);
args->unk11 = 1;
args->unk14 = 0;
args->partyCount = Party_GetCount(args->party);
args->unk18 = 0;
args->unk12 = a2;
args->natDexEnabled = SaveArray_IsNatDexEnabled(saveData);
args->unk2C = sub_02088288(saveData);
args->ribbons = Save_SpecialRibbons_Get(saveData);
args->unk30 = &fieldSystem->unk_10C;
args->isFlag982Set = sub_0208828C(fieldSystem->saveData);
sub_02089D40(args, _020FA1B0);
PlayerProfile *profile = Save_PlayerData_GetProfileAddr(saveData);
sub_0208AD34(args, profile);
return args;
}
PokemonSummaryArgs *LearnForgetMove_LaunchApp(HeapID heapId, FieldSystem *fieldSystem, u8 a2, u16 a3) {
PokemonSummaryArgs *args = AllocFromHeap(heapId, sizeof(PokemonSummaryArgs));
MI_CpuFill8(args, 0, sizeof(PokemonSummaryArgs));
args->party = SaveArray_Party_Get(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->unk11 = 1;
args->unk14 = a2;
args->partyCount = 1;
args->unk18 = a3;
args->unk12 = 2;
args->natDexEnabled = SaveArray_IsNatDexEnabled(fieldSystem->saveData);
args->unk2C = 0;
args->unk30 = &fieldSystem->unk_10C;
sub_02089D40(args, _020FA1A8);
sub_0208AD34(args, Save_PlayerData_GetProfileAddr(fieldSystem->saveData));
PokemonSummary_LearnForget_LaunchApp(fieldSystem, args);
return args;
}
u16 sub_0203E864(UnkStruct_0203E600 *a0) {
return a0->unk16;
}
void PCBox_LaunchApp(FieldSystem *fieldSystem, PCBoxArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PCBox, args);
}
static BOOL sub_0203E878(TaskManager *taskman) {
MsgBankMsgNo msgBankMsgNo;
MAIL_MESSAGE mailMessage;
int *state = TaskManager_GetStatePtr(taskman);
UnkStruct_0203E878 *data = TaskManager_GetEnvironment(taskman);
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
switch (*state) {
case UNK_0203E878_STATE_0:
EasyChat_LaunchApp(fieldSystem, data->easyChat);
(*state)++;
break;
case UNK_0203E878_STATE_1:
if (!FieldSystem_ApplicationIsRunning(fieldSystem)) {
(*state)++;
}
break;
case UNK_0203E878_STATE_2:
if (sub_02090D48(data->easyChat) || !sub_02090D4C(data->easyChat)) {
data->unk0->unk0 = 0;
} else {
data->unk0->unk0 = 1;
switch (data->unk10) {
default:
*data->unk4 = sub_02090D50(data->easyChat);
break;
case 1:
sub_02090D54(data->easyChat, &msgBankMsgNo);
*data->unk4 = msgBankMsgNo.msgBank;
*data->unk8 = msgBankMsgNo.msgNo;
break;
case 2:
case 3:
case 4:
case 5:
sub_02090D60(data->easyChat, &mailMessage);
sub_0202D640(fieldSystem->saveData, data->unk10 - 2, &mailMessage);
*data->unk4 = MailMsg_GetFieldI(&mailMessage, 0);
break;
}
}
EasyChat_FreeArgs(data->easyChat);
FreeToHeap(data);
return TRUE;
}
return FALSE;
}
void sub_0203E960(TaskManager *taskman, int a1, UnkStruct_0203E8C8 *a2, u16 *a3, u16 *a4) {
EasyChatArgs *args;
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
UnkStruct_0203E878 *data = AllocFromHeap(HEAP_ID_32, sizeof(UnkStruct_0203E878));
data->unk0 = a2;
data->unk4 = a3;
data->unk8 = a4;
data->unk10 = a1;
switch (a1) {
default:
args = EasyChat_CreateArgs(0, 0, fieldSystem->saveData, &fieldSystem->unk_10C, HEAP_ID_32);
data->easyChat = args;
sub_02090D14(args, *a3);
break;
case 1:
args = EasyChat_CreateArgs(1, 0, fieldSystem->saveData, &fieldSystem->unk_10C, HEAP_ID_32);
data->easyChat = args;
sub_02090D18(args, *a3, *a4);
break;
case 2:
case 3:
case 4:
case 5:
args = EasyChat_CreateArgs(2, 0, fieldSystem->saveData, &fieldSystem->unk_10C, HEAP_ID_32);
data->easyChat = args;
sub_02090D40(args);
MAIL_MESSAGE *mailMessage = sub_0202D660(fieldSystem->saveData, a1 - 2);
sub_02090D20(data->easyChat, mailMessage);
sub_02090D34(data->easyChat);
}
TaskManager_Call(taskman, sub_0203E878, data);
}
void EasyChat_LaunchApp(FieldSystem *fieldSystem, EasyChatArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_EasyChat, args);
}
static void PokegearPhone_LaunchApp_Impl(FieldSystem *fieldSystem, PokegearArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_Phone;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
static void PokegearTownMap_LaunchApp_Impl(FieldSystem *fieldSystem, PokegearArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_TownMap;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
PokegearArgs *PokegearPhone_LaunchApp(FieldSystem *fieldSystem) {
PokegearArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PokegearArgs));
MI_CpuFill8(args, 0, sizeof(PokegearArgs));
sub_02092D80(fieldSystem, args);
PokegearPhone_LaunchApp_Impl(fieldSystem, args);
return args;
}
PokegearArgs *PokegearTownMap_LaunchApp(FieldSystem *fieldSystem, int kind) {
PokegearArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PokegearArgs));
MI_CpuFill8(args, 0, sizeof(PokegearArgs));
sub_02092D8C(fieldSystem, args);
args->kind = kind;
PokegearTownMap_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void SafariAreaCustomizer_LaunchApp_Impl(FieldSystem *fieldSystem, SafariAreaCustomizerArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_SafariAreaCustomizer;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
SafariAreaCustomizerArgs *SafariAreaCustomizer_LaunchApp(FieldSystem *fieldSystem) {
SafariAreaCustomizerArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(SafariAreaCustomizerArgs));
MI_CpuFill8(args, 0, sizeof(SafariAreaCustomizerArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk4 = &fieldSystem->unk_10C;
SafariAreaCustomizer_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void SafariDecoration_LaunchApp_Impl(FieldSystem *fieldSystem, SafariDecorationArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_SafariDecoration;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
SafariDecorationArgs *SafariDecoration_LaunchApp(FieldSystem *fieldSystem) {
SafariDecorationArgs *args = SafariDecoration_CreateArgs(fieldSystem, HEAP_ID_FIELD);
SafariDecoration_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void PhotoAlbum_LaunchApp_Impl(FieldSystem *fieldSystem, PhotoAlbumArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_PhotoAlbum;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
PhotoAlbumArgs *PhotoAlbum_LaunchApp(FieldSystem *fieldSystem, int a1, int a2) {
PhotoAlbumArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PhotoAlbumArgs));
MI_CpuFill8(args, 0, sizeof(PhotoAlbumArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk8 = &fieldSystem->unk_10C;
args->unk2 = a2;
PhotoAlbum_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void AlphPuzzle_LaunchApp_Impl(FieldSystem *fieldSystem, AlphPuzzleArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_AlphPuzzle;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
AlphPuzzleArgs *AlphPuzzle_LaunchApp(FieldSystem *fieldSystem, u8 puzzle) {
AlphPuzzleArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(AlphPuzzleArgs));
MI_CpuFill8(args, 0, sizeof(AlphPuzzleArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->fieldSystemUnk10Cpointer = &fieldSystem->unk_10C;
args->puzzle = puzzle;
AlphPuzzle_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void UnownReport_LaunchApp_Impl(FieldSystem *fieldSystem, UnownReportArgs *args) {
OVY_MGR_TEMPLATE template = gOverlayTemplate_UnownReport;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
UnownReportArgs *UnownReport_LaunchApp(FieldSystem *fieldSystem) {
UnownReportArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnownReportArgs));
MI_CpuFill8(args, 0, sizeof(UnownReportArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk0 = &fieldSystem->unk_10C;
UnownReport_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void BerryPots_LaunchApp_Impl(FieldSystem *fieldSystem, BerryPotsArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_BerryPots;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
BerryPotsArgs *BerryPots_LaunchApp(FieldSystem *fieldSystem) {
BerryPotsArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(BerryPotsArgs));
MI_CpuFill8(args, 0, sizeof(BerryPotsArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk4 = &fieldSystem->unk_10C;
args->cursor = fieldSystem->bagCursor;
BerryPots_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void ApricornBox_LaunchApp_Impl(FieldSystem *fieldSystem, ApricornBoxArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_ApricornBox;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
ApricornBoxArgs *ApricornBox_LaunchApp(FieldSystem *fieldSystem, int a1) {
ApricornBoxArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(ApricornBoxArgs));
MI_CpuFill8(args, 0, sizeof(ApricornBoxArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk14 = &fieldSystem->unk_10C;
args->unk10 = GameStats_GetCapped(Save_GameStats_Get(args->saveData), GAME_STAT_UNK0);
if (a1 == 1 && !CheckFlag997(Save_VarsFlags_Get(fieldSystem->saveData))) {
args->unk0 = 0;
} else {
args->unk0 = a1;
}
ApricornBox_LaunchApp_Impl(fieldSystem, args);
return args;
}
ApricornBoxArgs *sub_0203ED80(FieldSystem *fieldSystem, u32 a1, u16 *a2) {
ApricornBoxArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(ApricornBoxArgs));
MI_CpuFill8(args, 0, sizeof(ApricornBoxArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk14 = &fieldSystem->unk_10C;
args->unk10 = GameStats_GetCapped(Save_GameStats_Get(args->saveData), GAME_STAT_UNK0);
args->unk0 = 3;
args->unkC = a1;
args->unk8 = a2;
ApricornBox_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void BugContestSwapMon_LaunchApp_Impl(FieldSystem *fieldSystem, BugContestSwapMonArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_BugContestSwapMon, args);
}
BugContestSwapMonArgs *BugContestSwapMon_LaunchApp(FieldSystem *fieldSystem, Pokemon *newlyCaughtMon, Pokemon *currentMon, BOOL noPokemonCaught) {
BugContestSwapMonArgs *args = AllocFromHeap(HEAP_ID_FIELD, sizeof(BugContestSwapMonArgs));
MI_CpuFill8(args, 0, sizeof(BugContestSwapMonArgs));
args->newlyCaughtMon = newlyCaughtMon;
args->currentMon = currentMon;
args->noPokemonCaught = noPokemonCaught;
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
BugContestSwapMon_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void OptionsMenu_LaunchApp_Impl(FieldSystem *fieldSystem, OptionsMenuArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_OptionsMenu, args);
}
OptionsMenuArgs *OptionsMenu_LaunchApp(FieldSystem *fieldSystem) {
OptionsMenuArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(OptionsMenuArgs));
args->options = Save_PlayerData_GetOptionsAddr(FieldSystem_GetSaveData(fieldSystem));
args->unk8 = &fieldSystem->unk_10C;
OptionsMenu_LaunchApp_Impl(fieldSystem, args);
return args;
}
static BOOL sub_0203EE54(SaveData *saveData) {
return Save_VarsFlags_CheckFlagInArray(Save_VarsFlags_Get(saveData), FLAG_UNK_0EF) &&
Save_VarsFlags_CheckFlagInArray(Save_VarsFlags_Get(saveData), FLAG_UNK_0F0) &&
Save_VarsFlags_CheckFlagInArray(Save_VarsFlags_Get(saveData), FLAG_UNK_0F1);
}
static void PokeathlonCourseRecord_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonCourseRecordArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PokeathlonCourseRecord, args);
}
PokeathlonCourseRecordArgs *PokeathlonCourseRecord_LaunchApp(FieldSystem *fieldSystem) {
PokeathlonCourseRecordArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PokeathlonCourseRecordArgs));
SaveData *saveData = FieldSystem_GetSaveData(fieldSystem);
POKEATHLON_SAV *pokeathlon = Save_Pokeathlon_Get(saveData);
args->pokeathlon = sub_02031974(pokeathlon);
args->unk4 = sub_0203EE54(saveData);
PokeathlonCourseRecord_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void PokeathlonMedals_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonMedalsArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PokeathlonMedals, args);
}
PokeathlonMedalsArgs *PokeathlonMedals_LaunchApp(FieldSystem *fieldSystem) {
PokeathlonMedalsArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PokeathlonMedalsArgs));
SaveData *saveData = FieldSystem_GetSaveData(fieldSystem);
POKEATHLON_SAV *pokeathlonSave = Save_Pokeathlon_Get(saveData);
Pokedex *pokedex = Save_Pokedex_Get(saveData);
args->pokedex = pokedex;
args->unk4 = sub_02031978(pokeathlonSave);
args->natDexEnabled = Pokedex_GetNatDexFlag(pokedex);
args->unkC = sub_0203EE54(saveData);
PokeathlonMedals_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void PokeathlonEventRecord_LaunchApp_Impl(FieldSystem *fieldSystem, PokeathlonEventRecordArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PokeathlonEventRecord, args);
}
PokeathlonEventRecordArgs *PokeathlonEventRecord_LaunchApp(FieldSystem *fieldSystem) {
PokeathlonEventRecordArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(PokeathlonEventRecordArgs));
SaveData *saveData = FieldSystem_GetSaveData(fieldSystem);
POKEATHLON_SAV *pokeathlonSave = Save_Pokeathlon_Get(saveData);
args->unk0 = sub_0203197C(pokeathlonSave);
args->unk4 = sub_02031984(pokeathlonSave);
args->profile = Save_PlayerData_GetProfileAddr(saveData);
args->unk10 = sub_0203EE54(saveData);
args->unk8 = sub_02031990(pokeathlonSave);
PokeathlonEventRecord_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void PokeathlonUnk_LaunchApp_Impl(FieldSystem *fieldSystem, UnkStruct_0203EFA0 *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PokeathlonUnkApp, args);
}
UnkStruct_0203EFA0 *PokeathlonUnk_LaunchApp(FieldSystem *fieldSystem) {
UnkStruct_0203EFA0 *args = AllocFromHeapAtEnd(HEAP_ID_3, sizeof(UnkStruct_0203EFA0));
SaveData *saveData = FieldSystem_GetSaveData(fieldSystem);
PlayerProfile *profile = Save_PlayerData_GetProfileAddr(saveData);
args->pokeathlon = Save_Pokeathlon_Get(saveData);
args->profile = profile;
PokeathlonUnk_LaunchApp_Impl(fieldSystem, args);
return args;
}
static void sub_0203EFD4(FieldSystem *fieldSystem, UseMailArgs *args) {
args->unk1C = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &_020FA434, args);
}
UseMailArgs *sub_0203EFEC(FieldSystem *fieldSystem, u16 a1, u8 partyIdx, u8 a3) {
UseMailArgs *args = sub_02090E68(FieldSystem_GetSaveData(fieldSystem), a1, partyIdx, a3, HEAP_ID_FIELD);
sub_0203EFD4(fieldSystem, args);
return args;
}
UseMailArgs *UseMail_CreateArgs(FieldSystem *fieldSystem, int n, u8 mailId, HeapID heapId) {
UseMailArgs *args;
if (n == 3) {
args = sub_02090F38(FieldSystem_GetSaveData(fieldSystem), mailId, heapId);
} else {
args = sub_02090EC0(FieldSystem_GetSaveData(fieldSystem), n, mailId, heapId);
}
sub_0203EFD4(fieldSystem, args);
return args;
}
UseMailArgs *sub_0203F050(FieldSystem *fieldSystem, Pokemon *mon, HeapID heapId) {
UseMailArgs *args = sub_02090F00(FieldSystem_GetSaveData(fieldSystem), mon, heapId);
sub_0203EFD4(fieldSystem, args);
return args;
}
UnkStruct_0203F074 *sub_0203F074(FieldSystem *fieldSystem, HeapID heapId) {
UnkStruct_0203F074 *args = AllocFromHeap(heapId, sizeof(UnkStruct_0203F074));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->fieldSystem = fieldSystem;
args->unk8 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &_020FA2F4, args);
return args;
}
void sub_0203F0A8(FieldSystem *fieldSystem, UnkOv67Args *args) {
OVY_MGR_TEMPLATE template = _020FA2E4;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
static UnkStruct_0203F0D0 *sub_0203F0D0(HeapID heapId, SaveData *saveData, int partyIdx, int *a3, int a4) {
UnkStruct_0203F0D0 *ptr = AllocFromHeap(heapId, sizeof(UnkStruct_0203F0D0));
memset(ptr, 0, sizeof(UnkStruct_0203F0D0));
ptr->mon = Party_GetMonByIndex(SaveArray_Party_Get(saveData), partyIdx);
SaveFashionData *fashionSave = Save_FashionData_Get(saveData);
SaveFashionDataSub *var1 = sub_0202B9B8(fashionSave, 0);
FashionCase *fashionCase = Save_FashionData_GetFashionCase(fashionSave);
ptr->unk4 = var1;
ptr->fashionCase = fashionCase;
ptr->options = Save_PlayerData_GetOptionsAddr(saveData);
ptr->gameStats = Save_GameStats_Get(saveData);
ptr->profile = Save_PlayerData_GetProfileAddr(saveData);
ptr->unk18 = a3;
ptr->unk1C = a4;
return ptr;
}
static BOOL sub_0203F134(TaskManager *taskman) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
UnkStruct_0203F134 *data = TaskManager_GetEnvironment(taskman);
switch (data->state) {
case UNK_0203F134_STATE_0:
sub_0203F1E8(fieldSystem, data->unkC);
data->state++;
break;
case UNK_0203F134_STATE_1:
if (!FieldSystem_ApplicationIsRunning(fieldSystem)) {
u16 *ptr = data->unk4;
if (ptr != NULL) {
if (data->unk8 == 1) {
*ptr = 1;
} else {
*ptr = 0;
}
}
FreeToHeap(data->unkC);
FreeToHeap(data);
return TRUE;
}
break;
}
return FALSE;
}
void sub_0203F198(TaskManager *taskman, u16 *ret, SaveData *saveData, u16 a3, u16 a4) {
UnkStruct_0203F134 *data = AllocFromHeap(HEAP_ID_32, sizeof(UnkStruct_0203F134));
memset(data, 0, sizeof(UnkStruct_0203F134));
data->unkC = sub_0203F0D0(HEAP_ID_32, saveData, a3, &data->unk8, a4);
data->unk4 = ret;
TaskManager_Call(taskman, sub_0203F134, data);
}
static BOOL sub_0203F1E8(FieldSystem *fieldSystem, UnkStruct_0203F0D0 *args) {
args->unk20 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &_0210F9AC, args);
return TRUE;
}
BOOL AccessoryPortrait_LaunchApp(FieldSystem *fieldSystem, FashionAppData *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_AccessoryPortrait, args);
return TRUE;
}
static void InitWirelessTradeSelectMonArgs(WirelessTradeSelectMonArgs *args, FieldSystem *fieldSystem) {
args->profile = Save_PlayerData_GetProfileAddr(fieldSystem->saveData);
args->party = SaveArray_Party_Get(fieldSystem->saveData);
args->palPad = SaveArray_Get(fieldSystem->saveData, SAVE_PALPAD);
args->unk14 = sub_0202CA44(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->pokedex = Save_Pokedex_Get(fieldSystem->saveData);
args->natDexEnabled = SaveArray_IsNatDexEnabled(fieldSystem->saveData);
args->saveData = fieldSystem->saveData;
args->gameStats = Save_GameStats_Get(fieldSystem->saveData);
args->partnerProfile = AllocFromHeap(HEAP_ID_32, PlayerProfile_sizeof());
args->unk38 = AllocFromHeap(HEAP_ID_32, sub_02070D90());
args->unk3C = AllocFromHeap(HEAP_ID_32, sub_02070D90());
args->fieldSystem = fieldSystem;
args->unk30 = 0;
}
static void WirelessTradeSelectMon_FreeArgs(WirelessTradeSelectMonArgs *args) {
if (args->partnerProfile != NULL) {
FreeToHeap(args->partnerProfile);
args->partnerProfile = NULL;
}
if (args->unk38 != NULL) {
FreeToHeap(args->unk38);
args->unk38 = NULL;
}
if (args->unk3C != NULL) {
FreeToHeap(args->unk3C);
args->unk3C = NULL;
}
}
static BOOL Task_WirelessTrade(TaskManager *taskman) {
u32 evolutionCondition;
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
WirelessTradeData *data = TaskManager_GetEnvironment(taskman);
switch (data->state) {
case WIRELESS_TRADE_STATE_0:
if (!sub_02039998()) {
sub_0205525C(taskman);
}
data->state++;
break;
case WIRELESS_TRADE_STATE_1:
InitWirelessTradeSelectMonArgs(&data->wirelessTradeSelectMon, fieldSystem);
data->state++;
case WIRELESS_TRADE_STATE_2:
CallApplicationAsTask(taskman, &sOverlayTemplate_WirelessTradeSelectMon, &data->wirelessTradeSelectMon);
data->state++;
break;
case WIRELESS_TRADE_STATE_3:
if (data->wirelessTradeSelectMon.unk24 == 0) {
WirelessTradeSelectMon_FreeArgs(&data->wirelessTradeSelectMon);
FreeToHeap(data);
return TRUE;
}
data->state++;
break;
case WIRELESS_TRADE_STATE_4:
data->tradeSequence.partnerProfile = data->wirelessTradeSelectMon.partnerProfile;
data->tradeSequence.unk0 = Mon_GetBoxMon(data->wirelessTradeSelectMon.unk38);
data->tradeSequence.unk4 = Mon_GetBoxMon(data->wirelessTradeSelectMon.unk3C);
data->tradeSequence.options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
data->tradeSequence.unk10 = 1;
TIMEOFDAY timeOfDay = Field_GetTimeOfDay(fieldSystem);
switch (timeOfDay) {
case RTC_TIMEOFDAY_MORN:
default:
data->tradeSequence.bgType = TS_BG_DAY;
break;
case RTC_TIMEOFDAY_EVE:
data->tradeSequence.bgType = TS_BG_EVENING;
break;
case RTC_TIMEOFDAY_NITE:
case RTC_TIMEOFDAY_LATE:
data->tradeSequence.bgType = TS_BG_NIGHT;
break;
}
if (sub_02039998()) {
data->tradeSequence.bgType = TS_BG_UNK_3;
}
CallApplicationAsTask(taskman, &sOverlayTemplate_TradeSequence, &data->tradeSequence);
data->state = WIRELESS_TRADE_STATE_5;
break;
case WIRELESS_TRADE_STATE_5:
int heldItem = GetMonData(data->wirelessTradeSelectMon.unk3C, MON_DATA_HELD_ITEM, NULL);
int species = GetMonEvolution(NULL, data->wirelessTradeSelectMon.unk3C, EVOCTX_TRADE, heldItem, &evolutionCondition);
if (species != SPECIES_NONE) {
CreateHeap(HEAP_ID_3, HEAP_ID_26, 0x30000);
data->tradeSequence.unk18 = sub_02075A7C(NULL, data->wirelessTradeSelectMon.unk3C, species,
Save_PlayerData_GetOptionsAddr(fieldSystem->saveData),
sub_02088288(fieldSystem->saveData),
Save_Pokedex_Get(fieldSystem->saveData),
Save_Bag_Get(fieldSystem->saveData),
Save_GameStats_Get(fieldSystem->saveData),
evolutionCondition, 4, HEAP_ID_26);
data->state = WIRELESS_TRADE_STATE_6;
} else {
data->state = WIRELESS_TRADE_STATE_7;
}
break;
case WIRELESS_TRADE_STATE_6:
if (sub_02075D3C(data->tradeSequence.unk18)) {
CopyPokemonToPokemon(
data->wirelessTradeSelectMon.unk3C,
Party_GetMonByIndex(data->wirelessTradeSelectMon.party, data->wirelessTradeSelectMon.unk28));
sub_02075D4C(data->tradeSequence.unk18);
DestroyHeap(HEAP_ID_26);
data->state = WIRELESS_TRADE_STATE_7;
}
break;
case WIRELESS_TRADE_STATE_7:
data->wirelessTradeSelectMon.unk30++;
data->state = 2;
GAME_STATS *gameStats = Save_GameStats_Get(fieldSystem->saveData);
GameStats_AddSpecial(gameStats, GAME_STAT_UNK16);
if (sub_02039998()) {
GameStats_Inc(gameStats, GAME_STAT_UNK114);
}
break;
}
return FALSE;
}
void CallTask_WirelessTrade(TaskManager *taskman) {
WirelessTradeData *data = AllocFromHeap(HEAP_ID_32, sizeof(WirelessTradeData));
data->state = 0;
TaskManager_Call(taskman, Task_WirelessTrade, data);
}
void sub_0203F4C8(FieldSystem *fieldSystem) {
UnkStruct_0203F4C8 *args = AllocFromHeap(HEAP_ID_32, sizeof(UnkStruct_0203F4C8));
args->unk0 = fieldSystem->unk84;
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
FieldSystem_LaunchApplication(fieldSystem, &_020FA2C4, args);
}
UnkStruct_0203F4F8 *sub_0203F4F8(FieldSystem *fieldSystem) {
UnkStruct_0203F4F8 *args = AllocFromHeap(HEAP_ID_FIELD, sizeof(UnkStruct_0203F4F8));
args->saveData = fieldSystem->saveData;
args->unk4 = fieldSystem->unk84;
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->gameStats = Save_GameStats_Get(fieldSystem->saveData);
args->unk10 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &_020FA2B4, args);
return args;
}
PalPadArgs *PalPad_LaunchApp(FieldSystem *fieldSystem, SaveData *saveData, HeapID heapId) {
PalPadArgs *args = AllocFromHeap(heapId, sizeof(PalPadArgs));
MI_CpuFill8(args, 0, sizeof(PalPadArgs));
args->saveData = saveData;
args->unk4 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PalPad, args);
return args;
}
void sub_0203F570(FieldSystem *fieldSystem, SaveData *args) {
FieldSystem_LaunchApplication(fieldSystem, &_02102830, fieldSystem);
}
static BOOL Task_NamingScreen(TaskManager *taskman) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
NamingScreenData *data = TaskManager_GetEnvironment(taskman);
switch (data->state) {
case 0:
sub_0205525C(taskman);
data->state++;
break;
case 1:
CallApplicationAsTask(taskman, &_02102610, data->args);
data->state++;
break;
case 2:
CallTask_RestoreOverworld(taskman);
data->state++;
break;
case 3:
NamingScreenArgs *args = data->args;
if (args->unk0 == 1) {
if (String_Compare(args->unk18, data->unk10) == 0) {
data->args->unk14 = 1;
}
} else if (args->unk0 == 5) {
u16 *var2 = String_cstr(args->unk18);
SAV_FRIEND_GRP *friendGroup = Save_FriendGroup_Get(fieldSystem->saveData);
if (sub_0202C88C(friendGroup, var2)) {
data->args->unk14 = 2;
}
}
if (data->args->unk14 == 0) {
SetName(taskman);
}
u16 *retVar = data->retVar;
if (data->retVar != NULL) {
*retVar = data->args->unk14;
}
sub_0208311C(data->args);
String_Delete(data->unk10);
FreeToHeap(data);
return TRUE;
}
return FALSE;
}
static void SetName(TaskManager *taskman) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
NamingScreenData *data = TaskManager_GetEnvironment(taskman);
switch (data->args->unk0) {
case 0:
PlayerProfile *profile = Save_PlayerData_GetProfileAddr(fieldSystem->saveData);
Save_Profile_PlayerName_Set(profile, data->args->unk1C);
break;
case 3:
SAVE_MISC_DATA *miscData = Save_Misc_Get(fieldSystem->saveData);
Save_Misc_RivalName_Set(miscData, data->args->unk18);
break;
case 1:
Pokemon *mon;
if (data->partyIdx == 0xff) {
BugContest *contest = FieldSystem_BugContest_Get(fieldSystem);
mon = contest->mon;
} else {
mon = Party_GetMonByIndex(SaveArray_Party_Get(fieldSystem->saveData), data->partyIdx);
}
SetMonData(mon, MON_DATA_NICKNAME_2, data->args->unk1C);
break;
case 5:
SAV_FRIEND_GRP *friendGroup = Save_FriendGroup_Get(fieldSystem->saveData);
sub_0202C7F8(friendGroup, 0, 0, data->args->unk18);
break;
case 2:
case 4:
default:
break;
}
}
void CallTask_NamingScreen(TaskManager *taskman, NameScreenType type, int species, int maxLen, int partyIdx, const u16 *defaultStr, u16 *retVar) {
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
NamingScreenData *data = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(NamingScreenData));
data->state = 0;
data->partyIdx = partyIdx;
data->retVar = retVar;
data->args = NamingScreen_CreateArgs(HEAP_ID_FIELD, type, species, maxLen, Save_PlayerData_GetOptionsAddr(fieldSystem->saveData), &fieldSystem->unk_10C);
data->unk10 = String_New(12, HEAP_ID_FIELD);
switch (type) {
case NAME_SCREEN_POKEMON:
Pokemon *mon;
if (partyIdx == 0xff) {
BugContest *contest = FieldSystem_BugContest_Get(fieldSystem);
mon = contest->mon;
} else {
mon = Party_GetMonByIndex(SaveArray_Party_Get(fieldSystem->saveData), data->partyIdx);
}
data->args->gender = GetMonData(mon, MON_DATA_GENDER, NULL);
data->args->form = GetMonData(mon, MON_DATA_FORM, NULL);
if (defaultStr != NULL) {
CopyU16ArrayToString(data->unk10, defaultStr);
}
break;
case NAME_SCREEN_GROUP:
CopyU16ArrayToString(data->unk10, defaultStr);
break;
default:
if (defaultStr != NULL) {
CopyU16ArrayToString(data->args->unk18, defaultStr);
}
break;
}
TaskManager_Call(taskman, Task_NamingScreen, data);
}
void TrainerCard_LaunchApp(FieldSystem *fieldSystem, TrainerCardAppArgs *args) {
args->unk66C.unk0 = &fieldSystem->unk_10C;
args->unk66C.saveData = fieldSystem->saveData;
args->unk66C.gameCleared = CheckGameClearFlag(Save_VarsFlags_Get(fieldSystem->saveData));
args->unk66C.unk8 = 0;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_TrainerCard, args);
}
int Pokedex_LaunchApp(FieldSystem *fieldSystem, PokedexArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_Pokedex, args);
return 1;
}
void ChooseStarter_LaunchApp(FieldSystem *fieldSystem, ChooseStarterArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_ChooseStarter, args);
}
void TrainerCardSignature_LaunchApp(FieldSystem *fieldSystem) {
Save_TrainerCard_Get(fieldSystem->saveData); // unused
OVY_MGR_TEMPLATE template = sOverlayTemplate_TrainerCardSignature;
FieldSystem_LaunchApplication(fieldSystem, &template, fieldSystem->saveData);
}
void sub_0203F844(FieldSystem *fieldSystem, u16 a1) {
OVY_MGR_TEMPLATE template = _020FA264;
UnkStruct_0203F844 *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_0203F844));
args->unk0 = sub_0202DB34(fieldSystem->saveData);
args->sysInfo = Save_SysInfo_Get(fieldSystem->saveData);
args->party = (Party *)SaveArray_Get(fieldSystem->saveData, SAVE_PARTY);
args->pcStorage = SaveArray_PCStorage_Get(fieldSystem->saveData);
args->pokedex = Save_Pokedex_Get(fieldSystem->saveData);
args->unk14 = sub_0202C6F4(fieldSystem->saveData);
args->unk18 = sub_0202CA44(fieldSystem->saveData);
args->profile = Save_PlayerData_GetProfileAddr(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->gameStats = Save_GameStats_Get(fieldSystem->saveData);
args->unk38 = sub_02088288(fieldSystem->saveData);
args->saveData = fieldSystem->saveData;
args->natDexEnabled = SaveArray_IsNatDexEnabled(fieldSystem->saveData);
args->unk34 = sub_0203A040(args->unk14);
args->bag = Save_Bag_Get(fieldSystem->saveData);
args->unk3C = a1;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
NintendoWifiConnectArgs *NintendoWifiConnection_LaunchApp(FieldSystem *fieldSystem, u16 a1, u16 a2) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_NintendoWifiConnect;
NintendoWifiConnectArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(NintendoWifiConnectArgs));
args->frontierData = Save_FrontierData_Get(fieldSystem->saveData);
args->unk4 = sub_0202D928(fieldSystem->saveData);
args->sysInfo = Save_SysInfo_Get(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->unk14 = sub_0202C08C(sub_0202C6F4(fieldSystem->saveData));
args->saveData = fieldSystem->saveData;
args->unk1C = sub_0203A040(sub_0202C6F4(fieldSystem->saveData));
args->unk18 = a1;
args->unk24 = a2;
args->unk20 = 1;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
return args;
}
void GeonetGlobe_LaunchApp(FieldSystem *fieldSystem) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_GeonetGlobe, fieldSystem->saveData);
}
void RegisterHallOfFame_LaunchApp(FieldSystem *fieldSystem, RegisterHallOfFameArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_RegisterHallOfFame, args);
}
HallOfFame *HallOfFameShowcase_LaunchApp(FieldSystem *fieldSystem) {
int loadResult;
HallOfFame *hallOfFame = LoadHallOfFame(fieldSystem->saveData, HEAP_ID_FIELD, &loadResult);
if (loadResult == 2) {
FreeToHeap(hallOfFame);
return NULL;
}
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_HallOfFameShowcase, hallOfFame);
return hallOfFame;
}
void Credits_LaunchApp(FieldSystem *fieldSystem, CreditsArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_Credits, args);
}
void MoveRelearner_LaunchApp(FieldSystem *fieldSystem, MoveRelearnerArgs *args) {
OVY_MGR_TEMPLATE template = sOverlayTemplate_MoveRelearner;
args->unkC = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
void HatchEggInParty(FieldSystem *fieldSystem) {
UnkStruct_02091240 data;
Pokemon *mon = sub_0206CE44(SaveArray_Party_Get(fieldSystem->saveData));
GF_ASSERT(mon != NULL);
data.mon = mon;
data.options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
data.profile = Save_PlayerData_GetProfileAddr(fieldSystem->saveData);
data.unkC = FieldSystem_GetOverriddenMusicId(fieldSystem, fieldSystem->location->mapId);
CallTask_HatchEggInParty(fieldSystem->taskman, &data);
}
VoltorbFlipArgs *VoltorbFlip_LaunchApp(FieldSystem *fieldSystem, u32 luck) {
VoltorbFlipArgs *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(VoltorbFlipArgs));
MI_CpuFill8(args, 0, sizeof(VoltorbFlipArgs));
SaveData *saveData = FieldSystem_GetSaveData(fieldSystem);
args->coins = Save_PlayerData_GetCoinsAddr(saveData);
args->options = Save_PlayerData_GetOptionsAddr(saveData);
args->unk8 = &fieldSystem->unk_10C;
args->profile = Save_PlayerData_GetProfileAddr(saveData);
args->saveData = fieldSystem->saveData;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_VoltorbFlip, args);
return args;
}
CertificatesArgs *Certificates_LaunchApp(FieldSystem *fieldSystem, HeapID heapId, u16 certificateId) {
CertificatesArgs *args = AllocFromHeap(heapId, sizeof(CertificatesArgs));
args->certificateId = certificateId;
args->saveData = fieldSystem->saveData;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_Certificates, args);
return args;
}
UnkStruct_0203FAB4 *sub_0203FAB4(FieldSystem *fieldSystem, u8 a1, u8 a2, u16 a3, HeapID heapId) {
UnkStruct_0203FAB4 *args = AllocFromHeap(heapId, sizeof(UnkStruct_0203FAB4));
args->unk4 = a1;
args->unk5 = a2;
args->unk6 = a3;
args->unk0 = fieldSystem->saveData;
FieldSystem_LaunchApplication(fieldSystem, &_0210F9BC, args);
return args;
}
PartyMenuArgs *PartyMenu_LaunchApp_Gracidea(FieldSystem *fieldSystem, HeapID heapId, u16 itemId) {
PartyMenuArgs *args = AllocFromHeap(heapId, sizeof(PartyMenuArgs));
memset(args, 0, sizeof(PartyMenuArgs));
args->party = SaveArray_Party_Get(fieldSystem->saveData);
args->bag = Save_Bag_Get(fieldSystem->saveData);
args->mailbox = Save_Mailbox_Get(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->unk10 = sub_020270C4(fieldSystem->saveData);
args->unk_18 = 0;
args->unk_25 = 0;
args->unk_24 = 5;
args->unk28 = itemId;
args->unk_26 = 0;
args->fieldSystem = fieldSystem;
args->unk20 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, args);
return args;
}
ScratchOffCardsArgs *ScratchOffCards_LaunchApp(FieldSystem *fieldSystem, HeapID heapId) {
u32 size;
u8 *ptr;
ScratchOffCardsArgs *args = AllocFromHeap(heapId, sizeof(ScratchOffCardsArgs));
ptr = (u8 *)args;
for (size = sizeof(ScratchOffCardsArgs); size != 0; size--) {
*ptr++ = 0;
}
args->saveData = fieldSystem->saveData;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_ScratchOffCards, args);
return args;
}
PokemonSummaryArgs *PokemonSummary_LaunchApp(HeapID heapId, FieldSystem *fieldSystem, u16 a2, u16 a3) {
PokemonSummaryArgs *args = AllocFromHeap(HEAP_ID_FIELD, sizeof(PokemonSummaryArgs));
args->party = SaveArray_Party_Get(fieldSystem->saveData);
args->options = Save_PlayerData_GetOptionsAddr(fieldSystem->saveData);
args->unk11 = 1;
args->unk14 = a2;
args->partyCount = Party_GetCount(args->party);
args->unk18 = 0;
args->unk12 = 0;
args->ribbons = Save_SpecialRibbons_Get(fieldSystem->saveData);
args->natDexEnabled = SaveArray_IsNatDexEnabled(fieldSystem->saveData);
args->unk2C = 0;
args->unk28 = 0;
args->isFlag982Set = sub_0208828C(fieldSystem->saveData);
sub_02089D40(args, _020FA0B0);
sub_0208AD34(args, Save_PlayerData_GetProfileAddr(fieldSystem->saveData));
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PokemonSummary, args);
return args;
}
void sub_0203FC14(FieldSystem *fieldSystem, u16 a1, u16 a2) {
OVY_MGR_TEMPLATE template = _020FA1C4;
UnkStruct_0203FC14 *args = AllocFromHeapAtEnd(HEAP_ID_FIELD, sizeof(UnkStruct_0203FC14));
MI_CpuFill8(args, 0, sizeof(UnkStruct_0203FC14));
args->fieldSystem = fieldSystem;
args->saveData = fieldSystem->saveData;
args->unk8 = a1;
args->unkC = a2;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
void PokeathlonCourse_LaunchApp(FieldSystem *fieldSystem, PokeathlonCourseArgs *args) {
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_PokeathlonCourse, args);
}
void sub_0203FC68(FieldSystem *fieldSystem, void *args) {
OVY_MGR_TEMPLATE template = _020FA454;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
void sub_0203FC90(FieldSystem *fieldSystem, void *args) {
OVY_MGR_TEMPLATE template = _020FA1D4;
FieldSystem_LaunchApplication(fieldSystem, &template, args);
}
LegendaryCinematicArgs *LegendaryCinematic_LaunchApp(FieldSystem *fieldSystem, UnkStruct_0203FCC4 *a1, u16 a2, u16 a3, HeapID heapId) {
LegendaryCinematicArgs *args = AllocFromHeap(heapId, sizeof(LegendaryCinematicArgs));
memset(args, 0, sizeof(LegendaryCinematicArgs));
args->saveData = FieldSystem_GetSaveData(fieldSystem);
args->unk4 = *a1;
args->unk4C = a2;
args->unk4E = a3;
FieldSystem_LaunchApplication(fieldSystem, &sOverlayTemplate_LegendaryCinematic, args);
return args;
}
void sub_0203FD08(FieldSystem *fieldSystem, void *args) {
FieldSystem_LaunchApplication(fieldSystem, &_020FA494, args);
}