mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-25 07:29:01 -05:00
211 lines
4.8 KiB
C
211 lines
4.8 KiB
C
#include <nitro.h>
|
|
#include <string.h>
|
|
|
|
#include "inlines.h"
|
|
|
|
#include "trainer_info.h"
|
|
#include "struct_decls/struct_0203A790_decl.h"
|
|
#include "struct_decls/struct_020507E4_decl.h"
|
|
|
|
#include "field/field_system.h"
|
|
#include "struct_defs/struct_0203D8AC.h"
|
|
#include "struct_defs/struct_02049FA8.h"
|
|
#include "struct_defs/struct_020556C4.h"
|
|
#include "struct_defs/union_0206B878.h"
|
|
|
|
#include "heap.h"
|
|
#include "unk_02025E08.h"
|
|
#include "trainer_info.h"
|
|
#include "unk_02039C80.h"
|
|
#include "map_header.h"
|
|
#include "unk_0203A6DC.h"
|
|
#include "field_system.h"
|
|
#include "unk_0203E880.h"
|
|
#include "unk_020507CC.h"
|
|
#include "player_avatar.h"
|
|
#include "unk_0206AFE0.h"
|
|
#include "unk_0206B70C.h"
|
|
|
|
|
|
typedef struct {
|
|
u8 unk_00;
|
|
u8 unk_01;
|
|
u8 unk_02;
|
|
u8 unk_03;
|
|
} UnkStruct_0206B878;
|
|
|
|
static void sub_0206B878(FieldSystem * param0, UnkStruct_0203D8AC * param1, const char * param2);
|
|
|
|
static const int Unk_020EFA98[10][4] = {
|
|
{ 0x23D, 0x15, 0x120, 0xA },
|
|
{ 0x23E, 0x0, 0x100, 0x23 },
|
|
{ 0x23F, 0xF, 0xE0, 0x0 },
|
|
{ 0x240, 0x2F, 0xC0, 0x15 },
|
|
{ 0x241, 0x39, 0xA0, 0x22 },
|
|
{ 0x243, 0x39, 0x80, 0x22 },
|
|
{ 0x244, 0x38, 0x72, 0x26 },
|
|
{ 0x245, 0x4A, 0x40, 0x20 },
|
|
{ 0x246, 0x0, 0x0, 0x0 },
|
|
{ 0x247, 0x46, 0x40, 0x1E }
|
|
};
|
|
|
|
static const u8 Unk_020EFA84[20] = {
|
|
0x0,
|
|
0x1,
|
|
0x2,
|
|
0x3,
|
|
0x4,
|
|
0x5,
|
|
0x6,
|
|
0x7,
|
|
0x8,
|
|
0x9,
|
|
0xA,
|
|
0xB,
|
|
0xC,
|
|
0xD,
|
|
0xE,
|
|
0xF,
|
|
0x11,
|
|
0x43,
|
|
0x10,
|
|
0x44
|
|
};
|
|
|
|
void sub_0206B70C (FieldSystem * param0, UnkStruct_0203D8AC * param1, int param2)
|
|
{
|
|
TrainerInfo * v0;
|
|
int v1 = 0, v2 = 0, v3 = 0;
|
|
int v4, v5, v6;
|
|
UnkStruct_020556C4 * v7;
|
|
UnkStruct_020507E4 * v8 = SaveData_Events(param0->saveData);
|
|
UnkStruct_0203A790 * v9 = sub_0203A790(param0->saveData);
|
|
UnkStruct_02049FA8 * v10 = sub_0203A72C(v9);
|
|
|
|
memset(param1, 0, sizeof(UnkStruct_0203D8AC));
|
|
|
|
v4 = Player_XPos(param0->playerAvatar);
|
|
v5 = Player_ZPos(param0->playerAvatar);
|
|
|
|
{
|
|
int v11 = 10 - 1;
|
|
UnkStruct_02049FA8 * v12 = sub_0203A720(v9);
|
|
|
|
v6 = v12->unk_00;
|
|
|
|
while (v11 >= 0) {
|
|
if (v6 == Unk_020EFA98[v11][0]) {
|
|
v4 -= Unk_020EFA98[v11][1];
|
|
v5 -= Unk_020EFA98[v11][3];
|
|
break;
|
|
}
|
|
|
|
v11--;
|
|
}
|
|
}
|
|
|
|
v6 = sub_02039E30(param0->unk_2C, v4 / 32, v5 / 32);
|
|
|
|
if (MapHeader_IsOnMainMatrix(v6)) {
|
|
param1->unk_00 = v4;
|
|
param1->unk_04 = v5;
|
|
} else {
|
|
param1->unk_00 = v10->unk_08;
|
|
param1->unk_04 = v10->unk_0C;
|
|
}
|
|
|
|
v0 = SaveData_GetTrainerInfo(FieldSystem_SaveData(param0));
|
|
param1->unk_0C = TrainerInfo_Gender(v0);
|
|
v7 = sub_0203A76C(sub_0203A790(param0->saveData));
|
|
v2 = (v7->unk_00 - 2 + 6) % 6;
|
|
|
|
for (v1 = 0; v1 < 5; v1++) {
|
|
param1->unk_20[v1].unk_00 = v7->unk_06[v2].unk_00;
|
|
param1->unk_20[v1].unk_04 = v7->unk_06[v2].unk_01;
|
|
param1->unk_20[v1].unk_0A = v7->unk_06[v2].unk_03;
|
|
|
|
if (v7->unk_06[v2].unk_02 > 3) {
|
|
param1->unk_20[v1].unk_08 = 3 + 1;
|
|
} else {
|
|
param1->unk_20[v1].unk_08 = v7->unk_06[v2].unk_02;
|
|
}
|
|
|
|
v2 = (v2 - 1 + 6) % 6;
|
|
|
|
if (param1->unk_20[v1].unk_0A) {
|
|
v3++;
|
|
}
|
|
}
|
|
|
|
for (v1 = 0; v1 < 4; v1++) {
|
|
if (sub_0206B1F0(v8, v1)) {
|
|
param1->unk_13C |= (0x1 << v1);
|
|
}
|
|
}
|
|
|
|
for (v1 = 0; v1 < 20; v1++) {
|
|
param1->unk_124[v1] = inline_0208BE68(v8, Unk_020EFA84[v1]);
|
|
}
|
|
|
|
sub_0206B878(param0, param1, "data/tmap_flags.dat");
|
|
|
|
param1->unk_139 = param2;
|
|
}
|
|
|
|
static void sub_0206B878 (FieldSystem * param0, UnkStruct_0203D8AC * param1, const char * param2)
|
|
{
|
|
FSFile v0;
|
|
int v1, v2;
|
|
int v3;
|
|
UnkStruct_0206B878 * v4;
|
|
UnkUnion_0206B878 * v5;
|
|
UnkStruct_020507E4 * v6 = SaveData_Events(param0->saveData);
|
|
|
|
FS_InitFile(&v0);
|
|
|
|
if (!FS_OpenFile(&v0, param2)) {
|
|
GF_ASSERT(0);
|
|
return;
|
|
}
|
|
|
|
v1 = FS_ReadFile(&v0, &v3, 4);
|
|
GF_ASSERT(v1 >= 0);
|
|
|
|
v4 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_0206B878));
|
|
MI_CpuClear8(v4, sizeof(UnkStruct_0206B878));
|
|
|
|
param1->unk_13A = v3;
|
|
|
|
for (v2 = 0; v2 < v3; v2++) {
|
|
v5 = &(param1->unk_5C[v2]);
|
|
v1 = FS_ReadFile(&v0, v4, sizeof(UnkStruct_0206B878));
|
|
|
|
switch (v4->unk_00) {
|
|
case 1:
|
|
v5->val1_2 = inline_0208BE68(v6, v4->unk_01);
|
|
v5->val1_0 = 1;
|
|
break;
|
|
case 2:
|
|
v5->val1_2 = sub_0203F188(param0, v4->unk_01);
|
|
v5->val1_0 = 1;
|
|
break;
|
|
}
|
|
|
|
switch (v4->unk_02) {
|
|
case 1:
|
|
v5->val1_6 = inline_0208BE68(v6, v4->unk_03);
|
|
v5->val1_4 = 1;
|
|
break;
|
|
case 2:
|
|
v5->val1_6 = sub_0203F188(param0, v4->unk_03);
|
|
v5->val1_4 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
(void)FS_CloseFile(&v0);
|
|
Heap_FreeToHeap(v4);
|
|
|
|
return;
|
|
}
|