mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-03-21 17:55:13 -05:00
1097 lines
29 KiB
C
1097 lines
29 KiB
C
#include "unk_0205A0D8.h"
|
|
|
|
#include <nitro.h>
|
|
#include <string.h>
|
|
|
|
#include "applications/party_menu/defs.h"
|
|
#include "applications/party_menu/main.h"
|
|
#include "applications/pokemon_summary_screen/main.h"
|
|
#include "field/field_system.h"
|
|
#include "functypes/funcptr_0205AB10.h"
|
|
#include "overlay005/fieldmap.h"
|
|
|
|
#include "bag.h"
|
|
#include "battle_regulation.h"
|
|
#include "bg_window.h"
|
|
#include "colored_arrow.h"
|
|
#include "comm_player_manager.h"
|
|
#include "communication_information.h"
|
|
#include "communication_system.h"
|
|
#include "dexmode_checker.h"
|
|
#include "field_comm_manager.h"
|
|
#include "field_message.h"
|
|
#include "field_system.h"
|
|
#include "field_task.h"
|
|
#include "heap.h"
|
|
#include "map_object.h"
|
|
#include "message.h"
|
|
#include "party.h"
|
|
#include "player_avatar.h"
|
|
#include "pokemon.h"
|
|
#include "render_window.h"
|
|
#include "save_player.h"
|
|
#include "savedata.h"
|
|
#include "screen_fade.h"
|
|
#include "sound_playback.h"
|
|
#include "string_gf.h"
|
|
#include "string_template.h"
|
|
#include "system.h"
|
|
#include "text.h"
|
|
#include "trainer_card.h"
|
|
#include "trainer_info.h"
|
|
#include "unk_0202D778.h"
|
|
#include "unk_020363E8.h"
|
|
#include "unk_020366A0.h"
|
|
#include "unk_0203D1B8.h"
|
|
#include "unk_020655F4.h"
|
|
|
|
#include "constdata/const_020F410C.h"
|
|
|
|
typedef struct {
|
|
PokemonSummary *unk_00;
|
|
PartyMenu *partyMenu;
|
|
UnkFuncPtr_0205AB10 *unk_08;
|
|
String *unk_0C;
|
|
String *unk_10;
|
|
Window unk_14;
|
|
FieldSystem *fieldSystem;
|
|
StringTemplate *unk_28;
|
|
MessageLoader *unk_2C;
|
|
int unk_30;
|
|
int unk_34;
|
|
int unk_38;
|
|
u8 unk_3C;
|
|
u8 unk_3D[6];
|
|
u8 unk_43;
|
|
u8 unk_44;
|
|
u8 *unk_48;
|
|
u8 *unk_4C;
|
|
Party *unk_50;
|
|
Window unk_54;
|
|
Window unk_64;
|
|
TrainerInfo *unk_74;
|
|
ColoredArrow *unk_78;
|
|
Window *unk_7C;
|
|
u8 unk_80;
|
|
s8 unk_81;
|
|
u8 unk_82;
|
|
u8 unk_83;
|
|
u8 unk_84;
|
|
u8 unk_85;
|
|
u16 unk_86;
|
|
u8 unk_88;
|
|
u8 unk_89;
|
|
} UnkStruct_0205A0D8;
|
|
|
|
typedef struct {
|
|
u32 unk_00;
|
|
} UnkStruct_0205AD20;
|
|
|
|
typedef struct {
|
|
String *unk_00;
|
|
String *unk_04;
|
|
Window unk_08;
|
|
StringTemplate *unk_18;
|
|
MessageLoader *unk_1C;
|
|
int unk_20;
|
|
int unk_24;
|
|
int unk_28;
|
|
} UnkStruct_0205B2D4;
|
|
|
|
static void sub_0205AC28(UnkStruct_0205A0D8 *param0);
|
|
static void sub_0205AC80(UnkStruct_0205A0D8 *param0, BOOL param1);
|
|
static BOOL sub_0205ACC8(UnkStruct_0205A0D8 *param0);
|
|
static BOOL sub_0205AD10(UnkStruct_0205A0D8 *param0);
|
|
static void sub_0205ADF8(UnkStruct_0205A0D8 *param0, int param1);
|
|
static int sub_0205AFE4(UnkStruct_0205A0D8 *param0);
|
|
static void sub_0205B0B4(UnkStruct_0205A0D8 *param0);
|
|
static BOOL sub_0205AD34(UnkStruct_0205A0D8 *param0);
|
|
static BOOL sub_0205AD70(UnkStruct_0205A0D8 *param0);
|
|
static void sub_0205ADAC(UnkStruct_0205A0D8 *param0);
|
|
static void sub_0205AD80(UnkStruct_0205A0D8 *param0);
|
|
static int sub_0205AA50(UnkStruct_0205A0D8 *param0, const String *param1);
|
|
static void sub_0205AAA0(UnkStruct_0205A0D8 *param0, BOOL param1);
|
|
static void sub_0205AF18(UnkStruct_0205A0D8 *param0, int param1);
|
|
static BOOL sub_0205AD20(UnkStruct_0205A0D8 *param0);
|
|
|
|
static void sub_0205A0D8(UnkStruct_0205A0D8 *param0, FieldSystem *fieldSystem, Party *param2, int param3, int param4, enum HeapID heapID)
|
|
{
|
|
PokemonSummary *v0;
|
|
SaveData *saveData;
|
|
static const u8 v2[] = {
|
|
0, 1, 2, 4, 3, 5, 6, 7, 8
|
|
};
|
|
|
|
saveData = fieldSystem->saveData;
|
|
v0 = Heap_AllocAtEnd(heapID, sizeof(PokemonSummary));
|
|
|
|
MI_CpuClear8(v0, sizeof(PokemonSummary));
|
|
PokemonSummaryScreen_SetPlayerProfile(v0, SaveData_GetTrainerInfo(fieldSystem->saveData));
|
|
|
|
v0->dexMode = SaveData_GetDexMode(saveData);
|
|
v0->showContest = PokemonSummaryScreen_ShowContestData(saveData);
|
|
v0->options = SaveData_GetOptions(saveData);
|
|
v0->monData = param2;
|
|
v0->dataType = SUMMARY_DATA_PARTY_MON;
|
|
v0->monIndex = param3;
|
|
v0->monMax = Party_GetCurrentCount(v0->monData);
|
|
v0->move = 0;
|
|
v0->mode = param4;
|
|
v0->specialRibbons = SaveData_GetRibbons(saveData);
|
|
|
|
PokemonSummaryScreen_FlagVisiblePages(v0, v2);
|
|
FieldSystem_StartChildProcess(fieldSystem, &gPokemonSummaryScreenApp, v0);
|
|
|
|
param0->unk_00 = v0;
|
|
}
|
|
|
|
static void sub_0205A164(UnkStruct_0205A0D8 *param0, enum HeapID heapID)
|
|
{
|
|
int v0;
|
|
PartyMenu *partyMenu = Heap_Alloc(heapID, sizeof(PartyMenu));
|
|
|
|
MI_CpuClear8(partyMenu, sizeof(PartyMenu));
|
|
|
|
partyMenu->options = SaveData_GetOptions(param0->fieldSystem->saveData);
|
|
partyMenu->battleRegulation = (void *)param0->fieldSystem->unk_B0;
|
|
partyMenu->party = SaveData_GetParty(param0->fieldSystem->saveData);
|
|
partyMenu->bag = SaveData_GetBag(param0->fieldSystem->saveData);
|
|
partyMenu->type = PARTY_MENU_TYPE_BASIC;
|
|
partyMenu->mode = PARTY_MENU_MODE_SELECT_CONFIRM;
|
|
|
|
if (param0->fieldSystem->unk_B0) {
|
|
partyMenu->minSelectionSlots = BattleRegulation_GetRuleValue(param0->fieldSystem->unk_B0, BATTLE_REGULATION_RULE_TEAM_SIZE);
|
|
partyMenu->maxSelectionSlots = partyMenu->minSelectionSlots;
|
|
} else {
|
|
partyMenu->minSelectionSlots = 3;
|
|
partyMenu->maxSelectionSlots = 3;
|
|
}
|
|
|
|
partyMenu->reqLevel = 100;
|
|
partyMenu->selectedMonSlot = param0->unk_3C;
|
|
|
|
for (v0 = 0; v0 < 6; v0++) {
|
|
partyMenu->selectionOrder[v0] = param0->unk_3D[v0];
|
|
}
|
|
|
|
FieldSystem_StartChildProcess(param0->fieldSystem, &gPokemonPartyAppTemplate, partyMenu);
|
|
param0->partyMenu = partyMenu;
|
|
}
|
|
|
|
static BOOL sub_0205A258(UnkStruct_0205A0D8 *param0, FieldSystem *fieldSystem)
|
|
{
|
|
int v0;
|
|
|
|
if (FieldSystem_IsRunningApplication(fieldSystem)) {
|
|
return 0;
|
|
}
|
|
|
|
MI_CpuCopy8(param0->partyMenu->selectionOrder, param0->unk_3D, 6);
|
|
|
|
switch (param0->partyMenu->selectedMonSlot) {
|
|
case 7:
|
|
param0->unk_38 = 0;
|
|
break;
|
|
case 6:
|
|
param0->unk_38 = 1;
|
|
break;
|
|
default:
|
|
param0->unk_38 = 2;
|
|
break;
|
|
}
|
|
|
|
param0->unk_3C = param0->partyMenu->selectedMonSlot;
|
|
Heap_Free(param0->partyMenu);
|
|
param0->partyMenu = NULL;
|
|
|
|
return 1;
|
|
}
|
|
|
|
static BOOL sub_0205A2B0(UnkStruct_0205A0D8 *param0, FieldSystem *fieldSystem)
|
|
{
|
|
PokemonSummary *v0;
|
|
|
|
if (FieldSystem_IsRunningApplication(fieldSystem)) {
|
|
return 0;
|
|
}
|
|
|
|
param0->unk_3C = param0->unk_00->monIndex;
|
|
Heap_Free(param0->unk_00);
|
|
param0->unk_00 = NULL;
|
|
|
|
return 1;
|
|
}
|
|
|
|
static BOOL sub_0205A2DC(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
if (FieldSystem_IsRunningFieldMap(param0->fieldSystem)) {
|
|
FieldMap_FadeScreen(FADE_TYPE_BRIGHTNESS_IN);
|
|
CommPlayerMan_Restart();
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static BOOL sub_0205A2FC(void)
|
|
{
|
|
int v0, v1;
|
|
|
|
v1 = CommSys_ConnectedCount();
|
|
|
|
for (v0 = 0; v0 < v1; v0++) {
|
|
if (CommTool_GetSyncNo(v0) == 94) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static BOOL sub_0205A324(FieldTask *param0)
|
|
{
|
|
UnkStruct_0205A0D8 *v0 = FieldTask_GetEnv(param0);
|
|
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
|
|
|
switch (v0->unk_34) {
|
|
case 0:
|
|
v0->unk_43--;
|
|
|
|
if (v0->unk_43 == 0) {
|
|
v0->unk_34 = 1;
|
|
CommPlayer_SetBattleDir();
|
|
}
|
|
break;
|
|
case 1:
|
|
MessageLoader_GetString(v0->unk_2C, 1, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_34 = 2;
|
|
break;
|
|
case 2:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
CommTiming_StartSync(93);
|
|
v0->unk_34 = 3;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (CommTiming_IsSyncState(93)) {
|
|
v0->unk_34 = 7;
|
|
MapObjectMan_StopAllMovement(v0->fieldSystem->mapObjMan);
|
|
v0->unk_08(1, v0->unk_50);
|
|
} else if (gSystem.pressedKeys & PAD_BUTTON_B) {
|
|
v0->unk_34 = 4;
|
|
CommTiming_StartSync(92);
|
|
v0->unk_43 = 5;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (CommTiming_IsSyncState(93)) {
|
|
v0->unk_34 = 7;
|
|
MapObjectMan_StopAllMovement(v0->fieldSystem->mapObjMan);
|
|
v0->unk_08(1, v0->unk_50);
|
|
}
|
|
|
|
v0->unk_43--;
|
|
|
|
if (v0->unk_43 == 0) {
|
|
v0->unk_34 = 8;
|
|
}
|
|
break;
|
|
case 7:
|
|
sub_0205AC28(v0);
|
|
Heap_Free(v0);
|
|
return 1;
|
|
case 5:
|
|
sub_0205AC28(v0);
|
|
Heap_Free(v0);
|
|
CommPlayerMan_ResumeFieldSystem();
|
|
return 1;
|
|
case 8:
|
|
if (CommTiming_IsSyncState(93)) {
|
|
v0->unk_34 = 5;
|
|
v0->unk_08(1, v0->unk_50);
|
|
} else {
|
|
v0->unk_08(0, v0->unk_50);
|
|
v0->unk_34 = 5;
|
|
}
|
|
break;
|
|
case 9:
|
|
v0->unk_34 = 10;
|
|
v0->unk_44 = 5;
|
|
break;
|
|
case 10:
|
|
if (v0->unk_44 != 0) {
|
|
v0->unk_44--;
|
|
} else {
|
|
if (LocalMapObj_CheckAnimationFinished(Player_MapObject(fieldSystem->playerAvatar))) {
|
|
v0->unk_34 = 11;
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
CommPlayer_SetBattleDir();
|
|
MessageLoader_GetString(v0->unk_2C, 13, v0->unk_0C);
|
|
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_34 = 12;
|
|
break;
|
|
case 12:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
v0->unk_34 = 13;
|
|
}
|
|
break;
|
|
case 13:
|
|
FieldMap_FadeScreen(FADE_TYPE_BRIGHTNESS_OUT);
|
|
v0->unk_34 = 14;
|
|
break;
|
|
case 14:
|
|
v0->unk_43--;
|
|
|
|
if (v0->unk_43 == 0) {
|
|
CommPlayer_SetBattleDir();
|
|
v0->unk_34 = 15;
|
|
}
|
|
break;
|
|
case 15:
|
|
sub_0205AAA0(v0, 0);
|
|
sub_0205A164(v0, HEAP_ID_FIELD2);
|
|
v0->unk_34 = 16;
|
|
break;
|
|
case 16:
|
|
if (sub_0205A258(v0, v0->fieldSystem)) {
|
|
switch (v0->unk_38) {
|
|
case 0:
|
|
v0->unk_34 = 20;
|
|
break;
|
|
case 1:
|
|
v0->unk_34 = 19;
|
|
break;
|
|
case 2:
|
|
v0->unk_34 = 17;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case 17:
|
|
sub_0205A0D8(v0, v0->fieldSystem, SaveData_GetParty(v0->fieldSystem->saveData), v0->unk_3C, 0, HEAP_ID_FIELD2);
|
|
v0->unk_34 = 18;
|
|
break;
|
|
case 18:
|
|
if (sub_0205A2B0(v0, v0->fieldSystem)) {
|
|
v0->unk_34 = 15;
|
|
}
|
|
break;
|
|
case 19:
|
|
FieldSystem_StartFieldMap(v0->fieldSystem);
|
|
|
|
if (v0->unk_88 != 3) {
|
|
v0->unk_43 = 5;
|
|
v0->unk_34 = 21;
|
|
} else {
|
|
v0->unk_34 = 26;
|
|
}
|
|
break;
|
|
case 21:
|
|
sub_0203898C(v0->unk_3D);
|
|
|
|
if (sub_0205A2DC(v0)) {
|
|
v0->unk_43 = 5;
|
|
v0->unk_34 = 0;
|
|
}
|
|
break;
|
|
case 20:
|
|
FieldSystem_StartFieldMap(v0->fieldSystem);
|
|
|
|
if (v0->unk_88 != 3) {
|
|
v0->unk_34 = 22;
|
|
} else {
|
|
v0->unk_34 = 26;
|
|
}
|
|
break;
|
|
case 22:
|
|
if (sub_0205A2DC(v0)) {
|
|
v0->unk_34 = 8;
|
|
}
|
|
break;
|
|
case 23:
|
|
v0->unk_44--;
|
|
|
|
if (v0->unk_44 == 0) {
|
|
v0->unk_34 = 24;
|
|
}
|
|
break;
|
|
case 24:
|
|
CommPlayer_SetBattleDir();
|
|
MessageLoader_GetString(v0->unk_2C, 19, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_34 = 25;
|
|
break;
|
|
case 25:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
v0->unk_34 = 13;
|
|
}
|
|
break;
|
|
case 26:
|
|
if (sub_0205A2DC(v0)) {
|
|
if (sub_0205A2FC()) {
|
|
v0->unk_34 = 5;
|
|
} else {
|
|
v0->unk_82 = (v0->unk_38 != 0);
|
|
sub_0205AC80(v0, v0->unk_82);
|
|
CommTiming_StartSync(0);
|
|
StringTemplate_SetPlayerName(v0->unk_28, 0, v0->unk_74);
|
|
MessageLoader_GetString(v0->unk_2C, 14, v0->unk_0C);
|
|
StringTemplate_Format(v0->unk_28, v0->unk_10, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_10);
|
|
v0->unk_34 = 27;
|
|
}
|
|
}
|
|
break;
|
|
case 27:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
if (sub_0205A2FC()) {
|
|
v0->unk_34 = 5;
|
|
} else if (CommTiming_IsSyncState(0)) {
|
|
sub_0205ACC8(v0);
|
|
v0->unk_34 = 28;
|
|
}
|
|
}
|
|
break;
|
|
case 28:
|
|
if (sub_0205AD10(v0)) {
|
|
CommTiming_StartSync(1);
|
|
v0->unk_34 = 29;
|
|
}
|
|
break;
|
|
case 29:
|
|
if (CommTiming_IsSyncState(1)) {
|
|
v0->unk_83 = sub_0205AD20(v0);
|
|
|
|
if (v0->unk_82 && v0->unk_83) {
|
|
MessageLoader_GetString(v0->unk_2C, 20, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_34 = 30;
|
|
} else {
|
|
v0->unk_34 = 42;
|
|
}
|
|
}
|
|
break;
|
|
case 30:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
v0->unk_89 = 0;
|
|
MessageLoader_GetString(v0->unk_2C, 17, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_84 = 0;
|
|
v0->unk_34 = 31;
|
|
}
|
|
break;
|
|
case 31:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
sub_0205AD80(v0);
|
|
sub_0205ADF8(v0, v0->unk_84);
|
|
v0->unk_34 = 32;
|
|
}
|
|
break;
|
|
case 32:
|
|
switch (sub_0205AFE4(v0)) {
|
|
case 1:
|
|
sub_0205B0B4(v0);
|
|
v0->unk_84 = v0->unk_81;
|
|
v0->unk_34 = 36;
|
|
break;
|
|
case 2:
|
|
sub_0205B0B4(v0);
|
|
v0->unk_84 = 255;
|
|
MessageLoader_GetString(v0->unk_2C, 15, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
CommTiming_StartSync(2);
|
|
v0->unk_34 = 39;
|
|
break;
|
|
}
|
|
break;
|
|
case 36:
|
|
StringTemplate_SetSpeciesName(v0->unk_28, 1, Pokemon_GetBoxPokemon(Party_GetPokemonBySlotIndex(v0->unk_50, v0->unk_84)));
|
|
MessageLoader_GetString(v0->unk_2C, 18, v0->unk_0C);
|
|
StringTemplate_Format(v0->unk_28, v0->unk_10, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_10);
|
|
v0->unk_34 = 37;
|
|
break;
|
|
case 37:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
sub_0205AF18(v0, 0);
|
|
v0->unk_34 = 38;
|
|
}
|
|
break;
|
|
case 38:
|
|
switch (sub_0205AFE4(v0)) {
|
|
case 2:
|
|
sub_0205B0B4(v0);
|
|
MessageLoader_GetString(v0->unk_2C, 17, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_34 = 31;
|
|
break;
|
|
case 1:
|
|
if (v0->unk_81 == 1) {
|
|
sub_0205B0B4(v0);
|
|
MessageLoader_GetString(v0->unk_2C, 14, v0->unk_0C);
|
|
StringTemplate_Format(v0->unk_28, v0->unk_10, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_10);
|
|
CommTiming_StartSync(2);
|
|
v0->unk_34 = 39;
|
|
} else {
|
|
FieldMap_FadeScreen(FADE_TYPE_BRIGHTNESS_OUT);
|
|
v0->unk_34 = 33;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 33:
|
|
if (IsScreenFadeDone()) {
|
|
sub_0205AAA0(v0, 0);
|
|
sub_0205A0D8(v0, v0->fieldSystem, v0->unk_50, v0->unk_84, 1, HEAP_ID_FIELD2);
|
|
v0->unk_34 = 34;
|
|
}
|
|
break;
|
|
case 34:
|
|
if (sub_0205A2B0(v0, v0->fieldSystem)) {
|
|
FieldSystem_StartFieldMap(v0->fieldSystem);
|
|
v0->unk_34 = 35;
|
|
}
|
|
break;
|
|
case 35:
|
|
if (sub_0205A2DC(v0)) {
|
|
v0->unk_34 = 36;
|
|
}
|
|
break;
|
|
case 39:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
if (CommTiming_IsSyncState(2)) {
|
|
sub_0205AD34(v0);
|
|
v0->unk_34 = 41;
|
|
}
|
|
}
|
|
break;
|
|
case 41:
|
|
if (sub_0205AD70(v0)) {
|
|
if (v0->unk_84 == 255) {
|
|
CommTiming_StartSync(4);
|
|
v0->unk_34 = 44;
|
|
} else if (v0->unk_85 == 255) {
|
|
v0->unk_34 = 42;
|
|
} else {
|
|
sub_0205ADAC(v0);
|
|
CommTiming_StartSync(93);
|
|
v0->unk_34 = 2;
|
|
}
|
|
}
|
|
break;
|
|
case 42:
|
|
MessageLoader_GetString(v0->unk_2C, 15, v0->unk_0C);
|
|
v0->unk_30 = sub_0205AA50(v0, v0->unk_0C);
|
|
v0->unk_43 = 0;
|
|
v0->unk_34 = 43;
|
|
break;
|
|
case 43:
|
|
if (FieldMessage_FinishedPrinting(v0->unk_30)) {
|
|
if (++(v0->unk_43) > 60) {
|
|
CommTiming_StartSync(4);
|
|
v0->unk_34 = 44;
|
|
}
|
|
}
|
|
break;
|
|
case 44:
|
|
if (CommTiming_IsSyncState(4)) {
|
|
Window_EraseMessageBox(&(v0->unk_14), 0);
|
|
v0->unk_08(0, NULL);
|
|
v0->unk_34 = 5;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int sub_0205AA50(UnkStruct_0205A0D8 *param0, const String *param1)
|
|
{
|
|
Window *v0 = &(param0->unk_14);
|
|
|
|
if (Window_IsInUse(v0) == 0) {
|
|
FieldMessage_AddWindow(param0->fieldSystem->bgConfig, v0, 3);
|
|
FieldMessage_DrawWindow(v0, SaveData_GetOptions(param0->fieldSystem->saveData));
|
|
} else {
|
|
FieldMessage_ClearWindow(v0);
|
|
}
|
|
|
|
return FieldMessage_Print(v0, (String *)param1, SaveData_GetOptions(param0->fieldSystem->saveData), 1);
|
|
}
|
|
|
|
static void sub_0205AAA0(UnkStruct_0205A0D8 *param0, BOOL param1)
|
|
{
|
|
if (Window_IsInUse(&(param0->unk_14))) {
|
|
if (param1) {
|
|
Window_EraseMessageBox(¶m0->unk_14, 0);
|
|
Window_ClearAndCopyToVRAM(¶m0->unk_14);
|
|
}
|
|
|
|
Window_Remove(¶m0->unk_14);
|
|
Window_Init(¶m0->unk_14);
|
|
}
|
|
|
|
if (Window_IsInUse(&(param0->unk_54))) {
|
|
Window_Remove(¶m0->unk_54);
|
|
Window_Init(¶m0->unk_54);
|
|
}
|
|
|
|
if (Window_IsInUse(&(param0->unk_64))) {
|
|
Window_Remove(¶m0->unk_64);
|
|
Window_Init(¶m0->unk_64);
|
|
}
|
|
}
|
|
|
|
void sub_0205AB10(FieldSystem *fieldSystem, UnkFuncPtr_0205AB10 *param1)
|
|
{
|
|
UnkStruct_0205A0D8 *v0;
|
|
FieldTask *v1 = fieldSystem->task;
|
|
|
|
if (v1) {
|
|
return;
|
|
}
|
|
|
|
v0 = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(UnkStruct_0205A0D8));
|
|
MI_CpuClear8(v0, sizeof(UnkStruct_0205A0D8));
|
|
|
|
v0->unk_43 = 5;
|
|
v0->fieldSystem = fieldSystem;
|
|
v0->unk_08 = param1;
|
|
v0->unk_28 = StringTemplate_Default(HEAP_ID_FIELD2);
|
|
v0->unk_2C = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_COMMUNICATION_CLUB, HEAP_ID_FIELD2);
|
|
v0->unk_0C = String_Init(100 * 2, HEAP_ID_FIELD2);
|
|
v0->unk_10 = String_Init(100 * 2, HEAP_ID_FIELD2);
|
|
|
|
Window_Init(&v0->unk_14);
|
|
Window_Init(&v0->unk_54);
|
|
Window_Init(&v0->unk_64);
|
|
|
|
v0->unk_78 = ColoredArrow_New(HEAP_ID_FIELD2);
|
|
v0->unk_88 = sub_0203895C();
|
|
v0->unk_4C = NULL;
|
|
v0->unk_48 = NULL;
|
|
v0->unk_50 = NULL;
|
|
v0->unk_89 = 0;
|
|
v0->unk_86 = CommSys_CurNetId();
|
|
v0->unk_74 = CommInfo_TrainerInfo(v0->unk_86 ^ 1);
|
|
|
|
switch (v0->unk_88) {
|
|
case 3: {
|
|
u32 v2 = sub_0205B0E4();
|
|
|
|
v0->unk_4C = Heap_AllocAtEnd(HEAP_ID_FIELD2, v2);
|
|
v0->unk_48 = Heap_AllocAtEnd(HEAP_ID_FIELD2, v2);
|
|
v0->unk_50 = Party_New(HEAP_ID_FIELD2);
|
|
|
|
Party_InitWithCapacity(v0->unk_50, 3);
|
|
|
|
v0->unk_44 = 5;
|
|
v0->unk_34 = 23;
|
|
} break;
|
|
case 4:
|
|
v0->unk_34 = 9;
|
|
break;
|
|
default:
|
|
if (v0->fieldSystem->unk_B0) {
|
|
v0->unk_34 = 9;
|
|
} else {
|
|
v0->unk_34 = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
FieldSystem_CreateTask(fieldSystem, sub_0205A324, v0);
|
|
}
|
|
|
|
static void sub_0205AC28(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
if (param0->unk_50) {
|
|
Heap_Free(param0->unk_50);
|
|
}
|
|
|
|
if (param0->unk_4C) {
|
|
Heap_Free(param0->unk_4C);
|
|
}
|
|
|
|
if (param0->unk_48) {
|
|
Heap_Free(param0->unk_48);
|
|
}
|
|
|
|
MessageLoader_Free(param0->unk_2C);
|
|
StringTemplate_Free(param0->unk_28);
|
|
String_Free(param0->unk_0C);
|
|
String_Free(param0->unk_10);
|
|
ColoredArrow_Free(param0->unk_78);
|
|
|
|
sub_0205AAA0(param0, 1);
|
|
}
|
|
|
|
static UnkStruct_0205A0D8 *sub_0205AC74(FieldSystem *fieldSystem)
|
|
{
|
|
return FieldTask_GetEnv(fieldSystem->task);
|
|
}
|
|
|
|
static void sub_0205AC80(UnkStruct_0205A0D8 *param0, BOOL param1)
|
|
{
|
|
Party *v0;
|
|
UnkStruct_0205AD20 *v1;
|
|
u8 *v2;
|
|
int v3, v4;
|
|
|
|
v0 = SaveData_GetParty(param0->fieldSystem->saveData);
|
|
v2 = param0->unk_4C;
|
|
v4 = Pokemon_GetStructSize();
|
|
v1 = (UnkStruct_0205AD20 *)(v2 + v4 * 3);
|
|
v1->unk_00 = param1;
|
|
|
|
if (v1->unk_00) {
|
|
for (v3 = 0; v3 < 3; v3++) {
|
|
MI_CpuCopy8(Party_GetPokemonBySlotIndex(v0, param0->unk_3D[v3] - 1), v2, v4);
|
|
v2 += v4;
|
|
}
|
|
}
|
|
}
|
|
|
|
static BOOL sub_0205ACC8(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
if (param0->unk_89 & 1) {
|
|
return 1;
|
|
} else {
|
|
BOOL v0;
|
|
u8 *v1;
|
|
u32 v2;
|
|
|
|
v1 = param0->unk_4C;
|
|
v2 = sub_0205B0E4();
|
|
|
|
if (param0->unk_86 == 0) {
|
|
v0 = CommSys_SendDataHugeServer(106, v1, v2);
|
|
} else {
|
|
v0 = CommSys_SendDataHuge(106, v1, v2);
|
|
}
|
|
|
|
if (v0) {
|
|
param0->unk_89 |= 1;
|
|
}
|
|
|
|
return v0;
|
|
}
|
|
}
|
|
|
|
static BOOL sub_0205AD10(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
if (param0->unk_89 == 3) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static BOOL sub_0205AD20(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
UnkStruct_0205AD20 *v0 = (UnkStruct_0205AD20 *)((u8 *)(param0->unk_48) + (Pokemon_GetStructSize() * 3));
|
|
return v0->unk_00;
|
|
}
|
|
|
|
static BOOL sub_0205AD34(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
BOOL v0;
|
|
|
|
if (param0->unk_86 == 0) {
|
|
v0 = CommSys_SendDataServer(107, &(param0->unk_84), 1);
|
|
} else {
|
|
v0 = CommSys_SendData(107, &(param0->unk_84), 1);
|
|
}
|
|
|
|
if (v0) {
|
|
param0->unk_89 |= 1;
|
|
}
|
|
|
|
return v0;
|
|
}
|
|
|
|
static BOOL sub_0205AD70(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
if (param0->unk_89 == 3) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void sub_0205AD80(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
u32 v0;
|
|
int v1;
|
|
|
|
v0 = Pokemon_GetStructSize();
|
|
Party_InitWithCapacity(param0->unk_50, 3);
|
|
|
|
for (v1 = 0; v1 < 3; v1++) {
|
|
Party_AddPokemon(param0->unk_50, (Pokemon *)(¶m0->unk_48[v1 * v0]));
|
|
}
|
|
}
|
|
|
|
static void sub_0205ADAC(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
u32 v0;
|
|
u8 *v1, *v2;
|
|
int v3;
|
|
|
|
v0 = Pokemon_GetStructSize();
|
|
v1 = ¶m0->unk_4C[param0->unk_85 * v0];
|
|
v2 = ¶m0->unk_48[param0->unk_84 * v0];
|
|
|
|
MI_CpuCopy8(v2, v1, v0);
|
|
|
|
Party_InitWithCapacity(param0->unk_50, 3);
|
|
|
|
for (v3 = 0; v3 < 3; v3++) {
|
|
Party_AddPokemon(param0->unk_50, (Pokemon *)(¶m0->unk_4C[v3 * v0]));
|
|
}
|
|
}
|
|
|
|
static void sub_0205ADF8(UnkStruct_0205A0D8 *param0, int param1)
|
|
{
|
|
Window *v0 = &(param0->unk_54);
|
|
|
|
if (Window_IsInUse(v0) == 0) {
|
|
int v1, v2, v3;
|
|
MessageLoader *v4;
|
|
|
|
v4 = MessageLoader_Init(MSG_LOADER_LOAD_ON_DEMAND, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_SPECIES_NAME, HEAP_ID_FIELD1);
|
|
v3 = Pokemon_GetStructSize();
|
|
|
|
Window_Add(param0->fieldSystem->bgConfig, v0, 3, 21, 9, 10, 8, 13, 10);
|
|
LoadStandardWindowGraphics(param0->fieldSystem->bgConfig, 3, 1, 11, 0, HEAP_ID_FIELD1);
|
|
Window_FillTilemap(v0, 15);
|
|
|
|
for (v1 = 0; v1 < 3; v1++) {
|
|
v2 = Pokemon_GetValue((Pokemon *)(¶m0->unk_48[v1 * v3]), MON_DATA_SPECIES, NULL);
|
|
|
|
MessageLoader_GetString(v4, v2, param0->unk_0C);
|
|
Text_AddPrinterWithParams(v0, FONT_SYSTEM, param0->unk_0C, 16, v1 * 16, TEXT_SPEED_NO_TRANSFER, NULL);
|
|
}
|
|
|
|
MessageLoader_GetString(param0->unk_2C, 21, param0->unk_0C);
|
|
Text_AddPrinterWithParams(v0, FONT_SYSTEM, param0->unk_0C, 16, v1 * 16, TEXT_SPEED_NO_TRANSFER, NULL);
|
|
MessageLoader_Free(v4);
|
|
}
|
|
|
|
Window_FillRectWithColor(v0, 15, 0, 0, 16, v0->height * 8);
|
|
ColoredArrow_Print(param0->unk_78, ¶m0->unk_54, 0, param1 * 16);
|
|
Window_DrawStandardFrame(¶m0->unk_54, 0, 1, 11);
|
|
|
|
param0->unk_81 = param1;
|
|
param0->unk_80 = 3 + 1;
|
|
param0->unk_7C = v0;
|
|
}
|
|
|
|
static void sub_0205AF18(UnkStruct_0205A0D8 *param0, int param1)
|
|
{
|
|
Window *v0 = &(param0->unk_64);
|
|
|
|
if (Window_IsInUse(v0) == 0) {
|
|
int v1;
|
|
|
|
Window_Add(param0->fieldSystem->bgConfig, v0, 3, 20, 11, 11, 6, 13, 90);
|
|
LoadStandardWindowGraphics(param0->fieldSystem->bgConfig, 3, 1, 11, 0, HEAP_ID_FIELD1);
|
|
Window_FillTilemap(v0, 15);
|
|
|
|
for (v1 = 0; v1 < 3; v1++) {
|
|
MessageLoader_GetString(param0->unk_2C, 22 + v1, param0->unk_0C);
|
|
Text_AddPrinterWithParams(v0, FONT_SYSTEM, param0->unk_0C, 16, v1 * 16, TEXT_SPEED_NO_TRANSFER, NULL);
|
|
}
|
|
}
|
|
|
|
param0->unk_80 = 3;
|
|
param0->unk_7C = v0;
|
|
param0->unk_81 = param1;
|
|
|
|
Window_FillRectWithColor(v0, 15, 0, 0, 16, v0->height * 8);
|
|
ColoredArrow_Print(param0->unk_78, param0->unk_7C, 0, param1 * 16);
|
|
Window_DrawStandardFrame(param0->unk_7C, 0, 1, 11);
|
|
}
|
|
|
|
static int sub_0205AFE4(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
do {
|
|
if (gSystem.pressedKeys & PAD_KEY_UP) {
|
|
param0->unk_81 = ((param0->unk_81 == 0) ? (param0->unk_80 - 1) : (param0->unk_81 - 1));
|
|
break;
|
|
}
|
|
|
|
if (gSystem.pressedKeys & PAD_KEY_DOWN) {
|
|
param0->unk_81 = (param0->unk_81 == (param0->unk_80 - 1)) ? 0 : (param0->unk_81 + 1);
|
|
break;
|
|
}
|
|
|
|
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
|
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
|
|
|
if (param0->unk_81 < (param0->unk_80 - 1)) {
|
|
return 1;
|
|
} else {
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
if (gSystem.pressedKeys & PAD_BUTTON_B) {
|
|
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
|
return 2;
|
|
}
|
|
|
|
return 0;
|
|
} while (0);
|
|
|
|
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
|
Window_FillRectWithColor(param0->unk_7C, 15, 0, 0, 16, param0->unk_7C->height * 8);
|
|
ColoredArrow_Print(param0->unk_78, param0->unk_7C, 0, param0->unk_81 * 16);
|
|
Window_LoadTiles(param0->unk_7C);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void sub_0205B0B4(UnkStruct_0205A0D8 *param0)
|
|
{
|
|
Window_EraseStandardFrame(param0->unk_7C, 1);
|
|
}
|
|
|
|
void sub_0205B0C0(int param0, int param1, void *param2, void *param3)
|
|
{
|
|
UnkStruct_0205A0D8 *v0 = sub_0205AC74(param3);
|
|
|
|
if (v0->unk_86 != param0) {
|
|
v0->unk_89 |= 2;
|
|
}
|
|
}
|
|
|
|
int sub_0205B0E4(void)
|
|
{
|
|
return Pokemon_GetStructSize() * 3 + sizeof(UnkStruct_0205AD20);
|
|
}
|
|
|
|
u8 *sub_0205B0F4(int param0, void *param1, int param2)
|
|
{
|
|
UnkStruct_0205A0D8 *v0 = sub_0205AC74(param1);
|
|
|
|
if (v0->unk_86 != param0) {
|
|
return v0->unk_48;
|
|
} else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
void sub_0205B110(int param0, int param1, void *param2, void *param3)
|
|
{
|
|
UnkStruct_0205A0D8 *v0 = sub_0205AC74(param3);
|
|
|
|
if (v0->unk_86 != param0) {
|
|
v0->unk_85 = *((u8 *)param2);
|
|
v0->unk_89 |= 2;
|
|
}
|
|
}
|
|
|
|
static BOOL sub_0205B140(FieldTask *param0)
|
|
{
|
|
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
|
|
UnkStruct_0205B2D4 *v1 = FieldTask_GetEnv(param0);
|
|
TrainerCard *v2 = (TrainerCard *)sub_02059EBC(v1->unk_24, NULL, 0);
|
|
|
|
switch (v1->unk_28) {
|
|
case 0:
|
|
v1->unk_18 = StringTemplate_Default(HEAP_ID_FIELD1);
|
|
v1->unk_1C = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_COMMUNICATION_CLUB, HEAP_ID_FIELD1);
|
|
v1->unk_00 = String_Init(100 * 2, HEAP_ID_FIELD1);
|
|
v1->unk_04 = String_Init(100 * 2, HEAP_ID_FIELD1);
|
|
|
|
MessageLoader_GetString(v1->unk_1C, 2 + v2->level, v1->unk_00);
|
|
StringTemplate_SetPlayerName(v1->unk_18, 0, CommInfo_TrainerInfo(v1->unk_24));
|
|
StringTemplate_Format(v1->unk_18, v1->unk_04, v1->unk_00);
|
|
FieldMessage_AddWindow(fieldSystem->bgConfig, &v1->unk_08, 3);
|
|
FieldMessage_DrawWindow(&v1->unk_08, SaveData_GetOptions(fieldSystem->saveData));
|
|
|
|
v1->unk_20 = FieldMessage_Print(&v1->unk_08, v1->unk_04, SaveData_GetOptions(fieldSystem->saveData), 1);
|
|
v1->unk_28++;
|
|
break;
|
|
case 1:
|
|
if (FieldMessage_FinishedPrinting(v1->unk_20)) {
|
|
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
|
MessageLoader_Free(v1->unk_1C);
|
|
StringTemplate_Free(v1->unk_18);
|
|
String_Free(v1->unk_00);
|
|
String_Free(v1->unk_04);
|
|
Window_EraseMessageBox(&v1->unk_08, 0);
|
|
Window_Remove(&v1->unk_08);
|
|
FieldMap_FadeScreen(FADE_TYPE_BRIGHTNESS_OUT);
|
|
v1->unk_28++;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (IsScreenFadeDone()) {
|
|
v1->unk_28++;
|
|
}
|
|
break;
|
|
case 3:
|
|
FieldSystem_OpenTrainerCardScreen(fieldSystem, v2);
|
|
v1->unk_28++;
|
|
break;
|
|
case 4:
|
|
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
|
|
v1->unk_28++;
|
|
}
|
|
break;
|
|
case 5:
|
|
FieldSystem_StartFieldMap(fieldSystem);
|
|
v1->unk_28++;
|
|
break;
|
|
case 6:
|
|
if (!FieldSystem_IsRunningFieldMap(fieldSystem)) {
|
|
FieldMap_FadeScreen(FADE_TYPE_BRIGHTNESS_IN);
|
|
CommPlayerMan_Restart();
|
|
v1->unk_28++;
|
|
}
|
|
break;
|
|
case 7:
|
|
CommPlayerMan_ResumeFieldSystem();
|
|
Heap_Free(v1);
|
|
return 1;
|
|
default:
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void sub_0205B2D4(FieldSystem *fieldSystem)
|
|
{
|
|
int v0;
|
|
int v1 = CommSys_CurNetId();
|
|
int v2 = CommPlayer_GetXInFrontOfPlayer(v1);
|
|
int v3 = CommPlayer_GetZInFrontOfPlayer(v1);
|
|
|
|
for (v0 = 0; v0 < CommSys_ConnectedCount(); v0++) {
|
|
if (v0 == v1) {
|
|
continue;
|
|
}
|
|
|
|
if ((v2 == CommPlayer_GetXIfActive(v0)) && (v3 == CommPlayer_GetZIfActive(v0))) {
|
|
UnkStruct_0205B2D4 *v4 = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(UnkStruct_0205B2D4));
|
|
|
|
v4->unk_24 = v0;
|
|
v4->unk_28 = 0;
|
|
|
|
FieldSystem_CreateTask(fieldSystem, sub_0205B140, v4);
|
|
FieldSystem_PauseProcessing();
|
|
break;
|
|
}
|
|
}
|
|
}
|