mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-26 16:47:15 -05:00
420 lines
10 KiB
C
420 lines
10 KiB
C
#include <nitro.h>
|
|
#include <string.h>
|
|
|
|
#include "struct_decls/struct_0202440C_decl.h"
|
|
|
|
#include "overlay104/ov104_0222DCE0.h"
|
|
#include "overlay104/ov104_0222E930.h"
|
|
#include "overlay104/ov104_0222FBE4.h"
|
|
#include "overlay104/ov104_02231F74.h"
|
|
#include "overlay104/ov104_02234DB4.h"
|
|
#include "overlay104/ov104_0223AF58.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_02235208.h"
|
|
#include "overlay104/struct_ov104_0223B5C0.h"
|
|
#include "overlay106/ov106_02241AE0.h"
|
|
#include "savedata/save_table.h"
|
|
|
|
#include "field_battle_data_transfer.h"
|
|
#include "gx_layers.h"
|
|
#include "heap.h"
|
|
#include "party.h"
|
|
#include "pokemon.h"
|
|
#include "unk_020041CC.h"
|
|
#include "unk_02030108.h"
|
|
#include "unk_0206CCB0.h"
|
|
#include "unk_0209B6F8.h"
|
|
#include "unk_0209BA80.h"
|
|
|
|
#include "constdata/const_020EA358.h"
|
|
|
|
FS_EXTERN_OVERLAY(overlay106);
|
|
|
|
#include <nitro/code16.h>
|
|
|
|
BOOL ov104_02234838(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_0223488C(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_022348A8(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_022348BC(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234994(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_022349B8(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234A1C(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234C80(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234C9C(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234CCC(UnkStruct_ov104_0222E930 *param0);
|
|
static BOOL ov104_02234CEC(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234D18(UnkStruct_ov104_0222E930 *param0);
|
|
BOOL ov104_02234D50(UnkStruct_ov104_0222E930 *param0);
|
|
static void ov104_02234A08(void *param0);
|
|
BOOL ov104_02234D6C(UnkStruct_ov104_0222E930 *param0);
|
|
|
|
BOOL ov104_02234838(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
UnkStruct_ov104_02230BE4 *v1;
|
|
u16 v2 = ov104_0222FC00(param0);
|
|
u16 v3 = ov104_0222FC00(param0);
|
|
u16 v4 = ov104_0222FC00(param0);
|
|
u16 v5 = ov104_0222FC00(param0);
|
|
|
|
v1 = sub_0209B970(param0->unk_00->unk_00);
|
|
v0 = ov104_02234DB4(v1->saveData, v2, v3, v4, v5);
|
|
|
|
sub_0209B980(param0->unk_00->unk_00, v0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_0223488C(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
u16 v1 = ov104_0222FC00(param0);
|
|
|
|
v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
ov104_022350B0(v0, v1);
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_022348A8(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
ov104_02235190(v0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_022348BC(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
int v0;
|
|
Party *v1;
|
|
Pokemon *v2;
|
|
UnkStruct_ov104_0223B5C0 *v3;
|
|
UnkStruct_ov104_02235208 *v4;
|
|
UnkStruct_ov104_02230BE4 *v5 = sub_0209B970(param0->unk_00->unk_00);
|
|
|
|
FS_EXTERN_OVERLAY(overlay106);
|
|
|
|
static const OverlayManagerTemplate v6 = {
|
|
ov106_02241AE0,
|
|
ov106_02241B9C,
|
|
ov106_02241CF0,
|
|
FS_OVERLAY_ID(overlay106)
|
|
};
|
|
|
|
v3 = sub_0209B978(param0->unk_00->unk_00);
|
|
v4 = Heap_AllocFromHeap(HEAP_ID_FIELDMAP, sizeof(UnkStruct_ov104_02235208));
|
|
|
|
MI_CpuClear8(v4, sizeof(UnkStruct_ov104_02235208));
|
|
|
|
v4->unk_00 = v5->saveData;
|
|
v4->unk_04 = v3->unk_04;
|
|
v4->unk_10 = v3;
|
|
v4->unk_08 = &v3->unk_704[v3->unk_04][0];
|
|
v4->unk_0C = v3->unk_264;
|
|
v4->unk_18 = v3->unk_08;
|
|
v4->unk_05 = v3->unk_6F5;
|
|
v4->unk_14 = &v3->unk_D84[0];
|
|
|
|
Party_Init(v4->unk_0C);
|
|
|
|
v1 = Party_GetFromSavedata(v5->saveData);
|
|
v2 = Party_GetPokemonBySlotIndex(v1, v3->unk_260[0]);
|
|
|
|
Party_AddPokemon(v4->unk_0C, v2);
|
|
|
|
if (v4->unk_04 == 1) {
|
|
v2 = Party_GetPokemonBySlotIndex(v1, v3->unk_260[1]);
|
|
Party_AddPokemon(v4->unk_0C, v2);
|
|
} else if ((v4->unk_04 == 2) || (v4->unk_04 == 3)) {
|
|
Party_AddPokemon(v4->unk_0C, v3->unk_D8C);
|
|
}
|
|
|
|
sub_0209B988(param0->unk_00->unk_00, &v6, v4, 0, ov104_02234A08);
|
|
return 1;
|
|
}
|
|
|
|
BOOL ov104_02234994(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
FieldBattleDTO *v1;
|
|
|
|
v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
v1 = v0->unk_700;
|
|
|
|
v0->unk_14 = CheckPlayerWonBattle(v1->resultMask);
|
|
FieldBattleDTO_Free(v1);
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_022349B8(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
FieldBattleDTO *v0;
|
|
UnkStruct_ov104_0223B5C0 *v1;
|
|
UnkStruct_ov104_02230BE4 *v2 = sub_0209B970(param0->unk_00->unk_00);
|
|
|
|
v1 = sub_0209B978(param0->unk_00->unk_00);
|
|
v0 = ov104_0223B250(v1, v2);
|
|
|
|
v1->unk_700 = v0;
|
|
|
|
sub_02004550(5, 1119, 1);
|
|
sub_0209B988(param0->unk_00->unk_00, &gBattleOverlayTemplate, v0, 0, NULL);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static void ov104_02234A08(void *param0)
|
|
{
|
|
int v0;
|
|
Pokemon *v1;
|
|
UnkStruct_ov104_02235208 *v2 = param0;
|
|
|
|
ov104_022351CC(v2->unk_10, param0);
|
|
Heap_FreeToHeap(param0);
|
|
|
|
return;
|
|
}
|
|
|
|
BOOL ov104_02234A1C(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_02230BE4 *v0;
|
|
Pokemon *v1;
|
|
Party *v2;
|
|
UnkStruct_ov104_0223B5C0 *v3;
|
|
u8 v4, v5;
|
|
u32 v6;
|
|
int v7;
|
|
u8 v8 = (*((param0)->unk_1C++));
|
|
u8 v9 = (*((param0)->unk_1C++));
|
|
u8 v10 = (*((param0)->unk_1C++));
|
|
u16 *v11 = ov104_0222FBE4(param0);
|
|
|
|
v0 = sub_0209B970(param0->unk_00->unk_00);
|
|
v3 = sub_0209B978(param0->unk_00->unk_00);
|
|
|
|
switch (v8) {
|
|
case 2:
|
|
v3->unk_04 = v9;
|
|
break;
|
|
case 3:
|
|
*v11 = v3->unk_6F2;
|
|
break;
|
|
case 4:
|
|
*v11 = v3->unk_08;
|
|
break;
|
|
case 5:
|
|
if (v3->unk_08 < 9999) {
|
|
v3->unk_08++;
|
|
}
|
|
break;
|
|
case 7:
|
|
OS_ResetSystem(0);
|
|
break;
|
|
case 9:
|
|
*v11 = sub_02030124(v3->unk_6F8);
|
|
break;
|
|
case 10:
|
|
ov104_0223526C(v3, 2);
|
|
break;
|
|
case 14:
|
|
*v11 = ov104_022354B0(v3);
|
|
break;
|
|
case 19:
|
|
if (v3->unk_04 == 2) {
|
|
*v11 = 10;
|
|
} else {
|
|
*v11 = v3->unk_0A;
|
|
}
|
|
break;
|
|
case 20:
|
|
*v11 = ov104_022354C0(v3, v9);
|
|
break;
|
|
case 21:
|
|
ov104_022354F4(v3);
|
|
break;
|
|
case 22:
|
|
ov104_02235518(v3);
|
|
break;
|
|
case 23:
|
|
*v11 = ov104_022354BC(v3);
|
|
break;
|
|
case 24:
|
|
*v11 = v3->unk_D88;
|
|
break;
|
|
case 27:
|
|
v2 = Party_GetFromSavedata(v0->saveData);
|
|
v5 = ov104_0223B500(v3->unk_04);
|
|
|
|
for (v7 = 0; v7 < v5; v7++) {
|
|
v1 = Party_GetPokemonBySlotIndex(v2, v3->unk_260[v7]);
|
|
Pokemon_SetValue(v1, MON_DATA_HELD_ITEM, &v3->unk_728[v7]);
|
|
}
|
|
break;
|
|
case 28:
|
|
v4 = sub_020301E0(v3->unk_6F5, &v3->unk_704[v3->unk_04][0]);
|
|
|
|
if (v4 < 10) {
|
|
sub_02030204(v3->unk_6F5, &v3->unk_704[v3->unk_04][0], (v4 + 1));
|
|
}
|
|
break;
|
|
case 29:
|
|
sub_0209BA80(v3);
|
|
break;
|
|
case 30:
|
|
*v11 = ov104_0223B5B0(v3->unk_04);
|
|
break;
|
|
case 17:
|
|
*v11 = v3->unk_04;
|
|
break;
|
|
case 31:
|
|
if (v9 == 0) {
|
|
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, 1);
|
|
} else {
|
|
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, 0);
|
|
}
|
|
break;
|
|
case 32:
|
|
ov104_0222E278(&(v3->unk_40[0]), v3->unk_18[v3->unk_05 * 2], 11, 178);
|
|
ov104_0222E278(&(v3->unk_40[1]), v3->unk_18[v3->unk_05 * 2 + 1], 11, 178);
|
|
break;
|
|
case 33:
|
|
*v11 = sub_020301E0(v3->unk_6F5, &v3->unk_704[v3->unk_04][0]);
|
|
break;
|
|
case 34:
|
|
*v11 = ov104_02235578(v3);
|
|
break;
|
|
case 15:
|
|
v2 = Party_GetFromSavedata(v0->saveData);
|
|
v1 = Party_GetPokemonBySlotIndex(v2, v3->unk_260[0]);
|
|
*v11 = Pokemon_GetValue(v1, MON_DATA_SPECIES, NULL);
|
|
break;
|
|
case 35:
|
|
ov104_022356A0(v3);
|
|
break;
|
|
case 36:
|
|
ov104_022356F4(v3);
|
|
break;
|
|
case 37:
|
|
*v11 = 0;
|
|
|
|
if (v3->unk_04 == 0) {
|
|
if ((v3->unk_08 + 1) == 50) {
|
|
*v11 = 1;
|
|
} else if ((v3->unk_08 + 1) == 170) {
|
|
*v11 = 2;
|
|
}
|
|
}
|
|
break;
|
|
case 38:
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_02234C80(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
u16 *v1 = ov104_0222FBE4(param0);
|
|
|
|
v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
*v1 = v0->unk_14;
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_02234C9C(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *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_02235534(v0, v1, v2);
|
|
|
|
return 1;
|
|
}
|
|
|
|
BOOL ov104_02234CCC(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
u16 v0 = ov104_0222EA48(param0);
|
|
|
|
param0->unk_78[0] = v0;
|
|
ov104_0222E974(param0, ov104_02234CEC);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static BOOL ov104_02234CEC(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
u16 v1 = ov104_0222FC8C(param0, param0->unk_78[0]);
|
|
|
|
v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
|
|
if (v0->unk_D90 >= 2) {
|
|
v0->unk_D90 = 0;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL ov104_02234D18(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
u16 *v0;
|
|
UnkStruct_ov104_0223B5C0 *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_40[v3].unk_00.unk_18;
|
|
|
|
ov104_022330FC(param0, v0);
|
|
return 1;
|
|
}
|
|
|
|
BOOL ov104_02234D50(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
UnkStruct_ov104_0223B5C0 *v0;
|
|
u16 *v1 = ov104_0222FBE4(param0);
|
|
|
|
v0 = sub_0209B978(param0->unk_00->unk_00);
|
|
ov104_0223520C(v0, v1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
BOOL ov104_02234D6C(UnkStruct_ov104_0222E930 *param0)
|
|
{
|
|
TVBroadcast *v0;
|
|
u16 v1;
|
|
Party *v2;
|
|
Pokemon *v3;
|
|
UnkStruct_ov104_0223B5C0 *v4;
|
|
UnkStruct_ov104_02230BE4 *v5 = sub_0209B970(param0->unk_00->unk_00);
|
|
|
|
v4 = sub_0209B978(param0->unk_00->unk_00);
|
|
v2 = Party_GetFromSavedata(v5->saveData);
|
|
v3 = Party_GetPokemonBySlotIndex(v2, v4->unk_260[0]);
|
|
v1 = Pokemon_GetValue(v3, MON_DATA_SPECIES, NULL);
|
|
|
|
if (v4->unk_04 == 0) {
|
|
v0 = SaveData_TVBroadcast(v5->saveData);
|
|
sub_0206D048(v0, v3);
|
|
}
|
|
|
|
return 0;
|
|
}
|