pokeplatinum/src/unk_0207DA28.c
Gudf cf878689e2 Rename WiFi overlays
Move overlay 4 to `nintendo_wfc`
Move overlay 18 to `wfc_settings`
Move overlay 60 to `http`
`unk_02099550` to `wifi_overlays`
2026-02-03 21:20:22 +01:00

484 lines
12 KiB
C

#include "unk_0207DA28.h"
#include <dwc.h>
#include <nitro.h>
#include <string.h>
#include "generated/trainer_score_events.h"
#include "struct_defs/struct_0207DE04.h"
#include "field/field_system.h"
#include "overlay065/ov65_0222DCE0.h"
#include "overlay065/ov65_0223648C.h"
#include "overlay066/struct_ov66_02231134.h"
#include "overlay098/struct_ov98_02247168.h"
#include "overlay115/ov115_02260440.h"
#include "overlay115/struct_ov115_02260440.h"
#include "overlay116/ov116_022604C4.h"
#include "overlay117/ov117_02260440.h"
#include "overlay117/struct_ov117_02260440.h"
#include "wfc_settings/wfc_settings.h"
#include "communication_system.h"
#include "encounter.h"
#include "field_system.h"
#include "field_task.h"
#include "game_overlay.h"
#include "game_records.h"
#include "heap.h"
#include "system_flags.h"
#include "unk_02038FFC.h"
#include "unk_0203D1B8.h"
#include "unk_02099604.h"
#include "unk_0209BA18.h"
#include "vars_flags.h"
#include "wifi_overlays.h"
FS_EXTERN_OVERLAY(overlay65);
FS_EXTERN_OVERLAY(overlay114);
FS_EXTERN_OVERLAY(overlay115);
FS_EXTERN_OVERLAY(overlay116);
FS_EXTERN_OVERLAY(overlay117);
typedef struct {
UnkStruct_ov98_02247168 *unk_00;
int unk_04;
u16 *unk_08;
u8 unk_0C;
u8 unk_0D;
void *unk_10;
u32 unk_14;
} UnkStruct_0207DE40;
static BOOL sub_0207DA28(FieldTask *param0);
static void sub_0207DE04(UnkStruct_0207DE40 *param0, FieldSystem *fieldSystem, enum HeapID heapID, u32 param3);
static u32 sub_0207DE40(UnkStruct_0207DE40 *param0);
static UnkStruct_ov115_02260440 *sub_0207DE90(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2);
static void sub_0207DED8(UnkStruct_ov115_02260440 *param0);
static UnkStruct_ov66_02231134 *sub_0207DEEC(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2);
static void sub_0207DF2C(UnkStruct_ov66_02231134 *param0);
static UnkStruct_ov117_02260440 *sub_0207DF40(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2);
static void sub_0207DF88(UnkStruct_ov115_02260440 *param0);
static void sub_0207DF9C(FieldSystem *fieldSystem);
static const ApplicationManagerTemplate Unk_020F1B98 = {
ov65_0222E2A8,
ov65_0222E3FC,
ov65_0222E548,
FS_OVERLAY_ID(overlay65)
};
static const ApplicationManagerTemplate Unk_020F1B88 = {
ov65_0223648C,
ov65_02236548,
ov65_0223668C,
FS_OVERLAY_ID(overlay65)
};
static const u8 Unk_020F1B64[4] = {
0x3,
0x4,
0x4,
0x4
};
static BOOL sub_0207DA28(FieldTask *task)
{
int v0;
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task);
UnkStruct_0207DE40 *v2 = FieldTask_GetEnv(task);
switch (v2->unk_04) {
case 0:
v2->unk_00->saveData = fieldSystem->saveData;
case 1:
v2->unk_04++;
if (v2->unk_00->unk_04 == 1) {
if (WiFiList_HasValidLogin(fieldSystem->saveData)) {
v2->unk_04 = 10;
*(v2->unk_08) = 0;
}
}
break;
case 2:
FieldTask_RunApplication(task, &Unk_020F1B98, v2->unk_00);
v2->unk_04++;
break;
case 3:
if (WiFiList_HasValidLogin(fieldSystem->saveData)) {
SystemFlag_SetConnectedToWiFi(SaveData_GetVarsFlags(fieldSystem->saveData));
}
switch (v2->unk_00->unk_04) {
case 3:
v2->unk_0C = 0;
v2->unk_0D = 0;
v2->unk_04 = 4;
break;
case 1:
v2->unk_0C = 50;
v2->unk_0D = 0;
v2->unk_04 = 4;
break;
case 2:
v2->unk_0C = 100;
v2->unk_0D = 0;
v2->unk_04 = 4;
break;
case 6:
v2->unk_0C = 0;
v2->unk_0D = 1;
v2->unk_04 = 4;
break;
case 4:
v2->unk_0C = 50;
v2->unk_0D = 1;
v2->unk_04 = 4;
break;
case 5:
v2->unk_0C = 100;
v2->unk_0D = 1;
v2->unk_04 = 4;
break;
case 7:
v2->unk_04 = 6;
break;
case 10:
*(v2->unk_08) = 1;
v2->unk_04 = 11;
break;
case 8:
v2->unk_04 = 9;
break;
case 11:
v2->unk_04 = 12;
break;
case 12:
v2->unk_04 = 16;
break;
case 13:
v2->unk_04 = 18;
break;
case 14:
v2->unk_04 = 22;
break;
case 15:
v2->unk_04 = 26;
break;
case 9:
v2->unk_04 = 8;
break;
}
break;
case 4:
Encounter_NewVsWiFi(task, v2->unk_00->unk_08, v2->unk_0C, v2->unk_0D);
v2->unk_04++;
break;
case 5:
v2->unk_04 = 2;
break;
case 6:
sub_0203DDDC(task);
v2->unk_04++;
break;
case 7:
v2->unk_04 = 2;
break;
case 8:
Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_54, DWC_UTILITY_WORK_SIZE + 0x100);
Overlay_LoadWFCSettingsOverlay();
WFCSettings_StartApplication(HEAP_ID_54);
OS_ResetSystem(0);
break;
case 9:
case 11:
case 10:
Heap_Free(v2->unk_00);
Heap_Free(v2);
v2->unk_04++;
return 1;
case 12:
sub_0207DE04(v2, fieldSystem, HEAP_ID_FIELD2, 0);
v2->unk_04++;
break;
case 13:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = sub_0207DE40(v2);
}
break;
case 14:
v2->unk_10 = (void *)sub_020996A0(fieldSystem, HEAP_ID_FIELD2, v2->unk_14);
v2->unk_04++;
break;
case 15:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
Heap_Free(v2->unk_10);
v2->unk_04 = 2;
}
break;
case 16:
sub_0203632C(0);
v2->unk_10 = sub_0209BA18(fieldSystem, NULL);
v2->unk_04++;
break;
case 17:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
Heap_Free(v2->unk_10);
v2->unk_04 = 2;
}
break;
case 18:
sub_0207DE04(v2, fieldSystem, HEAP_ID_FIELD2, 1);
v2->unk_04++;
break;
case 19:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = sub_0207DE40(v2);
}
break;
case 20:
sub_0207DF9C(fieldSystem);
v2->unk_10 = sub_0207DE90(fieldSystem, HEAP_ID_FIELD2, v2->unk_14);
v2->unk_04++;
break;
case 21:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = 2;
sub_0207DED8(v2->unk_10);
}
break;
case 22:
sub_0207DE04(v2, fieldSystem, HEAP_ID_FIELD2, 2);
v2->unk_04++;
break;
case 23:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = sub_0207DE40(v2);
}
break;
case 24:
sub_0207DF9C(fieldSystem);
v2->unk_10 = sub_0207DEEC(fieldSystem, HEAP_ID_FIELD2, v2->unk_14);
v2->unk_04++;
break;
case 25:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = 2;
sub_0207DF2C(v2->unk_10);
}
break;
case 26:
sub_0207DE04(v2, fieldSystem, HEAP_ID_FIELD2, 3);
v2->unk_04++;
break;
case 27:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = sub_0207DE40(v2);
}
break;
case 28:
sub_0207DF9C(fieldSystem);
v2->unk_10 = sub_0207DF40(fieldSystem, HEAP_ID_FIELD2, v2->unk_14);
v2->unk_04++;
break;
case 29:
if (!FieldSystem_IsRunningApplication(fieldSystem)) {
v2->unk_04 = 2;
sub_0207DF88(v2->unk_10);
}
break;
default:
return 1;
}
return 0;
}
static UnkStruct_0207DE40 *sub_0207DD94(void)
{
UnkStruct_0207DE40 *v0 = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(UnkStruct_0207DE40));
MI_CpuClear8(v0, sizeof(UnkStruct_0207DE40));
v0->unk_00 = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(UnkStruct_ov98_02247168));
MI_CpuClear8(v0->unk_00, sizeof(UnkStruct_ov98_02247168));
return v0;
}
void sub_0207DDC0(FieldTask *param0)
{
UnkStruct_0207DE40 *v0 = sub_0207DD94();
v0->unk_00->unk_04 = 2;
FieldTask_InitCall(param0, sub_0207DA28, v0);
}
void sub_0207DDE0(FieldTask *param0, u16 *param1)
{
UnkStruct_0207DE40 *v0 = sub_0207DD94();
v0->unk_00->unk_04 = 1;
v0->unk_08 = param1;
FieldTask_InitCall(param0, sub_0207DA28, v0);
}
static void sub_0207DE04(UnkStruct_0207DE40 *param0, FieldSystem *fieldSystem, enum HeapID heapID, u32 param3)
{
UnkStruct_0207DE04 *v0 = Heap_Alloc(heapID, sizeof(UnkStruct_0207DE04));
v0->unk_00 = param3;
v0->unk_01 = 2;
v0->unk_02 = Unk_020F1B64[param3];
v0->unk_03 = 0;
v0->unk_04 = 0;
v0->saveData = fieldSystem->saveData;
param0->unk_10 = v0;
FieldSystem_StartChildProcess(fieldSystem, &Unk_020F1B88, v0);
}
static u32 sub_0207DE40(UnkStruct_0207DE40 *param0)
{
UnkStruct_0207DE04 *v0 = param0->unk_10;
if (v0->unk_03 == 1) {
switch (v0->unk_00) {
case 0:
param0->unk_04 = 14;
break;
case 1:
param0->unk_04 = 20;
break;
case 2:
param0->unk_04 = 24;
break;
case 3:
param0->unk_04 = 28;
break;
}
} else {
param0->unk_04 = 1;
}
param0->unk_14 = v0->unk_04;
Heap_Free(param0->unk_10);
return param0->unk_04;
}
static UnkStruct_ov115_02260440 *sub_0207DE90(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2)
{
UnkStruct_ov115_02260440 *v0;
FS_EXTERN_OVERLAY(overlay115);
FS_EXTERN_OVERLAY(overlay114);
{
static const ApplicationManagerTemplate v1 = {
ov115_02260440,
ov115_0226048C,
ov115_022608E4,
FS_OVERLAY_ID(overlay115),
};
v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov115_02260440));
memset(v0, 0, sizeof(UnkStruct_ov115_02260440));
v0->unk_38 = param2;
v0->unk_39 = 0;
v0->saveData = fieldSystem->saveData;
Overlay_LoadByID(FS_OVERLAY_ID(overlay114), 2);
FieldSystem_StartChildProcess(fieldSystem, &v1, v0);
}
return v0;
}
static void sub_0207DED8(UnkStruct_ov115_02260440 *param0)
{
FS_EXTERN_OVERLAY(overlay114);
Heap_Free(param0);
Overlay_UnloadByID(FS_OVERLAY_ID(overlay114));
}
static UnkStruct_ov66_02231134 *sub_0207DEEC(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2)
{
UnkStruct_ov66_02231134 *v0;
FS_EXTERN_OVERLAY(overlay116);
FS_EXTERN_OVERLAY(overlay114);
{
static const ApplicationManagerTemplate v1 = {
ov116_022609B4,
ov116_02260CF4,
ov116_0226126C,
FS_OVERLAY_ID(overlay116),
};
v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov66_02231134));
memset(v0, 0, sizeof(UnkStruct_ov66_02231134));
v0->unk_3C = param2;
v0->unk_38 = 0;
v0->saveData = fieldSystem->saveData;
Overlay_LoadByID(FS_OVERLAY_ID(overlay114), 2);
FieldSystem_StartChildProcess(fieldSystem, &v1, v0);
}
return v0;
}
static void sub_0207DF2C(UnkStruct_ov66_02231134 *param0)
{
FS_EXTERN_OVERLAY(overlay114);
Heap_Free(param0);
Overlay_UnloadByID(FS_OVERLAY_ID(overlay114));
}
static UnkStruct_ov117_02260440 *sub_0207DF40(FieldSystem *fieldSystem, enum HeapID heapID, u32 param2)
{
UnkStruct_ov117_02260440 *v0;
FS_EXTERN_OVERLAY(overlay117);
FS_EXTERN_OVERLAY(overlay114);
{
static const ApplicationManagerTemplate v1 = {
ov117_02260440,
ov117_02260474,
ov117_022605C0,
FS_OVERLAY_ID(overlay117),
};
v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov117_02260440));
MI_CpuClear8(v0, sizeof(UnkStruct_ov117_02260440));
v0->unk_38 = param2;
v0->unk_39 = 0;
v0->saveData = fieldSystem->saveData;
Overlay_LoadByID(FS_OVERLAY_ID(overlay114), 2);
FieldSystem_StartChildProcess(fieldSystem, &v1, v0);
}
return v0;
}
static void sub_0207DF88(UnkStruct_ov115_02260440 *param0)
{
FS_EXTERN_OVERLAY(overlay114);
Heap_Free(param0);
Overlay_UnloadByID(FS_OVERLAY_ID(overlay114));
}
static void sub_0207DF9C(FieldSystem *fieldSystem)
{
GameRecords *v0 = SaveData_GetGameRecords(fieldSystem->saveData);
GameRecords_IncrementTrainerScore(v0, TRAINER_SCORE_EVENT_UNK_50);
}