pokeplatinum/src/overlay104/ov104_022332B4.c
2025-04-03 12:16:53 -03:00

514 lines
12 KiB
C

#include <nitro.h>
#include <string.h>
#include "overlay104/ov104_0222DCE0.h"
#include "overlay104/ov104_0222E63C.h"
#include "overlay104/ov104_0222E930.h"
#include "overlay104/ov104_0222FBE4.h"
#include "overlay104/ov104_02231F74.h"
#include "overlay104/ov104_022339B4.h"
#include "overlay104/ov104_0223A7F4.h"
#include "overlay104/struct_ov104_0222E930_decl.h"
#include "overlay104/struct_ov104_0222E930_t.h"
#include "overlay104/struct_ov104_02230BE4.h"
#include "overlay104/struct_ov104_022320B4_t.h"
#include "overlay104/struct_ov104_02234130.h"
#include "overlay104/struct_ov104_0223ADA0.h"
#include "overlay104/struct_ov104_0223C4CC.h"
#include "overlay105/ov105_02241AE0.h"
#include "bg_window.h"
#include "field_battle_data_transfer.h"
#include "heap.h"
#include "party.h"
#include "pokemon.h"
#include "strbuf.h"
#include "string_template.h"
#include "sys_task.h"
#include "sys_task_manager.h"
#include "unk_0202FF4C.h"
#include "unk_0209B6F8.h"
#include "unk_0209BA80.h"
#include "constdata/const_020EA358.h"
FS_EXTERN_OVERLAY(overlay105);
#include <nitro/code16.h>
BOOL ov104_022332B4(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022332F4(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_02233310(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_02233324(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_0223338C(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022333B4(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022333F8(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_0223348C(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022334A0(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022334B4(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022334C8(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022334DC(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022338E0(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_022338FC(UnkStruct_ov104_0222E930 *param0);
BOOL ov104_0223392C(UnkStruct_ov104_0222E930 *param0);
static BOOL ov104_0223394C(UnkStruct_ov104_0222E930 *param0);
void ov104_022338B4(SysTask *param0, void *param1);
BOOL ov104_0223397C(UnkStruct_ov104_0222E930 *param0);
static void ov104_02233478(void *param0);
BOOL ov104_022332B4(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
UnkStruct_ov104_02230BE4 *v1;
u16 v2 = ov104_0222FC00(param0);
u16 v3 = ov104_0222FC00(param0);
u16 v4 = ov104_0222FC00(param0);
v1 = sub_0209B970(param0->unk_00->unk_00);
v0 = ov104_022339B4(v1->saveData, v2, v3, v4);
sub_0209B980(param0->unk_00->unk_00, v0);
return 0;
}
BOOL ov104_022332F4(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
u16 v1 = ov104_0222FC00(param0);
v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_02233B98(v0, v1);
return 0;
}
BOOL ov104_02233310(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_022340D0(v0);
return 0;
}
BOOL ov104_02233324(UnkStruct_ov104_0222E930 *param0)
{
int v0;
UnkStruct_ov104_0223ADA0 *v1;
UnkStruct_ov104_02234130 *v2;
UnkStruct_ov104_02230BE4 *v3 = sub_0209B970(param0->unk_00->unk_00);
FS_EXTERN_OVERLAY(overlay105);
static const OverlayManagerTemplate v4 = {
ov105_02241AE0,
ov105_02241BD8,
ov105_02241F54,
FS_OVERLAY_ID(overlay105)
};
v1 = sub_0209B978(param0->unk_00->unk_00);
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(UnkStruct_ov104_02234130));
MI_CpuClear8(v2, sizeof(UnkStruct_ov104_02234130));
v2->unk_00 = v3->saveData;
v2->unk_04 = v1->unk_04;
v2->unk_05 = v1->unk_05;
v2->unk_06 = 0;
v2->unk_08 = v1->unk_4D4;
v2->unk_0C = v1->unk_4D8;
v2->unk_1C = v1;
sub_0209B988(param0->unk_00->unk_00, &v4, v2, 0, ov104_02233478);
return 1;
}
BOOL ov104_0223338C(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
FieldBattleDTO *v1;
v0 = sub_0209B978(param0->unk_00->unk_00);
v1 = v0->unk_4FC;
v0->unk_14 = CheckPlayerWonBattle(v1->resultMask);
FieldBattleDTO_Free(v1);
return 0;
}
BOOL ov104_022333B4(UnkStruct_ov104_0222E930 *param0)
{
FieldBattleDTO *v0;
UnkStruct_ov104_0223ADA0 *v1;
UnkStruct_ov104_02230BE4 *v2 = sub_0209B970(param0->unk_00->unk_00);
v1 = sub_0209B978(param0->unk_00->unk_00);
v0 = ov104_0223ABA0(v1, v2);
v1->unk_4FC = v0;
sub_0209B988(param0->unk_00->unk_00, &gBattleOverlayTemplate, v0, 0, NULL);
return 1;
}
BOOL ov104_022333F8(UnkStruct_ov104_0222E930 *param0)
{
int v0;
UnkStruct_ov104_0223ADA0 *v1;
UnkStruct_ov104_02234130 *v2;
UnkStruct_ov104_02230BE4 *v3 = sub_0209B970(param0->unk_00->unk_00);
FS_EXTERN_OVERLAY(overlay105);
static const OverlayManagerTemplate v4 = {
ov105_02241AE0,
ov105_02241BD8,
ov105_02241F54,
FS_OVERLAY_ID(overlay105)
};
v1 = sub_0209B978(param0->unk_00->unk_00);
for (v0 = 0; v0 < 6; v0++) {
v1->unk_4DC[v0] = 0;
}
v2 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(UnkStruct_ov104_02234130));
MI_CpuClear8(v2, sizeof(UnkStruct_ov104_02234130));
v2->unk_00 = v3->saveData;
v2->unk_04 = v1->unk_04;
v2->unk_05 = v1->unk_05;
v2->unk_06 = 1;
v2->unk_08 = v1->unk_4D4;
v2->unk_0C = v1->unk_4D8;
v2->unk_1C = v1;
sub_0209B988(param0->unk_00->unk_00, &v4, v2, 0, ov104_02233478);
return 1;
}
static void ov104_02233478(void *param0)
{
int v0;
UnkStruct_ov104_02234130 *v1 = param0;
ov104_0223410C(v1->unk_1C, param0);
Heap_FreeToHeap(param0);
return;
}
BOOL ov104_0223348C(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_0223449C(v0);
return 0;
}
BOOL ov104_022334A0(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_02234570(v0);
return 0;
}
BOOL ov104_022334B4(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_022346A4(v0);
return 0;
}
BOOL ov104_022334C8(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0 = sub_0209B978(param0->unk_00->unk_00);
ov104_0223470C(v0);
return 0;
}
BOOL ov104_022334DC(UnkStruct_ov104_0222E930 *param0)
{
int v0[18];
UnkStruct_ov104_0223C4CC *v1;
Strbuf *v2;
Pokemon *v3;
UnkStruct_ov104_0223ADA0 *v4;
u8 v5, v6;
u32 v7, v8, v9;
int v10, v11;
u8 v12 = (*((param0)->unk_1C++));
u8 v13 = (*((param0)->unk_1C++));
u8 v14 = (*((param0)->unk_1C++));
u16 *v15 = ov104_0222FBE4(param0);
v4 = sub_0209B978(param0->unk_00->unk_00);
v1 = ov104_0222E924(param0->unk_00);
switch (v12) {
case 0:
v4->unk_07 = v13;
break;
case 1:
v4->unk_05 = v13;
break;
case 2:
v4->unk_04 = v13;
break;
case 3:
*v15 = v4->unk_4DC[v13];
break;
case 4:
*v15 = v4->unk_0C;
break;
case 5:
if (v4->unk_0C < 9999) {
v4->unk_0C++;
}
break;
case 7:
OS_ResetSystem(0);
break;
case 9:
*v15 = sub_0202FF68(v4->unk_4F4);
break;
case 10:
ov104_02234148(v4, 2);
break;
case 14:
*v15 = ov104_02234430(v4);
break;
case 15:
*v15 = v4->unk_3F0[v13].unk_00_val1_0;
break;
case 16:
*v15 = v4->unk_3F0[v13].unk_04[v14];
break;
case 17:
v3 = Pokemon_New(HEAP_ID_FIELDMAP);
ov104_0222DF40(&v4->unk_3F0[v13], v3, ov104_0223ADA0(v4));
*v15 = Pokemon_GetValue(v3, MON_DATA_TYPE_1, NULL);
Heap_FreeToHeap(v3);
break;
case 18:
v5 = ov104_0223AA74(v4->unk_04, 1);
for (v10 = 0; v10 < (17 + 1); v10++) {
v0[v10] = 0;
}
v3 = Pokemon_New(HEAP_ID_FIELDMAP);
for (v10 = 0; v10 < v5; v10++) {
ov104_0222DF40(&v4->unk_3F0[v10], v3, ov104_0223ADA0(v4));
v7 = Pokemon_GetValue(v3, MON_DATA_TYPE_1, NULL);
v8 = Pokemon_GetValue(v3, MON_DATA_TYPE_2, NULL);
if (v7 == v8) {
v8 = 0xff;
}
v0[v7]++;
if (v8 != 0xff) {
v0[v8]++;
}
}
Heap_FreeToHeap(v3);
v9 = 0;
for (v10 = 0; v10 < (17 + 1); v10++) {
if (v0[v9] < v0[v10]) {
v9 = v10;
}
}
if (v0[v9] <= 1) {
*v15 = 0xff;
} else {
*v15 = v9;
}
break;
case 19:
*v15 = ov104_0223AF34(v4);
break;
case 20:
*v15 = ov104_02234440(v4, v13);
break;
case 21:
ov104_02234474(v4);
break;
case 22:
ov104_02234480(v4);
break;
case 23:
*v15 = ov104_0223443C(v4);
break;
case 24:
*v15 = v4->unk_57C;
break;
case 26:
*v15 = v4->unk_57D;
break;
case 27:
sub_0209BA80(v4);
break;
case 28:
*v15 = ov104_0223AED4(v4->unk_04);
break;
case 29:
*v15 = v4->unk_04;
break;
case 30:
Bg_ChangeTilemapRectPalette(v1->unk_00, 3, 3, 10, 26, 11, v13);
Bg_ScheduleTilemapTransfer(v1->unk_00, 3);
break;
case 31:
v4->unk_500 = SysTask_Start(ov104_022338B4, ov104_0222E924(param0->unk_00), 5);
break;
case 32:
if (v4->unk_500 != NULL) {
SysTask_Done(v4->unk_500);
v4->unk_500 = NULL;
}
break;
case 33:
ov104_0222E278(&(v4->unk_34[0]), v4->unk_18[v4->unk_06], 11, 178);
ov104_0222E278(&(v4->unk_34[1]), v4->unk_18[v4->unk_06 + 7], 11, 178);
break;
case 34:
v6 = ov104_0223AA50(v4->unk_04);
for (v10 = 0; v10 < v6; v10++) {
v3 = Party_GetPokemonBySlotIndex(v4->unk_4D4, v10);
StringTemplate_SetSpeciesName(param0->unk_00->unk_44, v10, Pokemon_GetBoxPokemon(v3));
}
break;
case 35:
*v15 = ov104_022347F8(v4);
break;
case 36:
ov104_02234790(v4);
break;
case 37:
*v15 = 0;
if (v4->unk_04 == 0) {
if ((v4->unk_0C + 1) == 21) {
*v15 = 1;
} else if ((v4->unk_0C + 1) == 49) {
*v15 = 2;
}
}
break;
case 38:
ov104_0223AE30(v4);
break;
case 39:
ov104_0222E330(v4->unk_3F0, v4->unk_3D2, v4->unk_3DA, v4->unk_3E0, NULL, 4, 11, 179);
break;
case 40:
ov104_0223ADB0(v4);
break;
case 41:
*v15 = v4->unk_0B;
v4->unk_0B = 1;
break;
}
return 0;
}
void ov104_022338B4(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov104_0223C4CC *v1 = param1;
v0 = Bg_GetYOffset(v1->unk_00, 2);
if (v0 >= 255) {
Bg_ScheduleScroll(v1->unk_00, 2, 3, 0);
} else {
Bg_ScheduleScroll(v1->unk_00, 2, 4, 1);
}
return;
}
BOOL ov104_022338E0(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
u16 *v1 = ov104_0222FBE4(param0);
v0 = sub_0209B978(param0->unk_00->unk_00);
*v1 = v0->unk_14;
return 0;
}
BOOL ov104_022338FC(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
u16 v1 = ov104_0222FC00(param0);
u16 v2 = ov104_0222FC00(param0);
u16 *v3 = ov104_0222FBE4(param0);
v0 = sub_0209B978(param0->unk_00->unk_00);
*v3 = ov104_022347A4(v0, v1, v2);
return 1;
}
BOOL ov104_0223392C(UnkStruct_ov104_0222E930 *param0)
{
u16 v0 = ov104_0222EA48(param0);
param0->unk_78[0] = v0;
ov104_0222E974(param0, ov104_0223394C);
return 1;
}
static BOOL ov104_0223394C(UnkStruct_ov104_0222E930 *param0)
{
UnkStruct_ov104_0223ADA0 *v0;
u16 v1 = ov104_0222FC8C(param0, param0->unk_78[0]);
v0 = sub_0209B978(param0->unk_00->unk_00);
if (v0->unk_702 >= 2) {
v0->unk_702 = 0;
return 1;
}
return 0;
}
BOOL ov104_0223397C(UnkStruct_ov104_0222E930 *param0)
{
u16 *v0;
UnkStruct_ov104_0223ADA0 *v1;
UnkStruct_ov104_02230BE4 *v2 = sub_0209B970(param0->unk_00->unk_00);
u16 v3 = (*((param0)->unk_1C++));
v1 = sub_0209B978(param0->unk_00->unk_00);
if (v1 == NULL) {
return 0;
}
v0 = v1->unk_34[v3].unk_00.unk_18;
ov104_022330FC(param0, v0);
return 1;
}