Merge pull request #137 from froggestspirit/main

Pokeradar Documentation
This commit is contained in:
Rachel
2024-02-04 10:22:43 -08:00
committed by GitHub
21 changed files with 582 additions and 691 deletions

View File

@@ -24,6 +24,8 @@ enum SDATID {
SEQ_CONTEST_DRESSING_ROOM,
SEQ_BATTLE_ELITE_FOUR,
SEQ_POKERADAR = 1150,
SEQ_BATTLE_GIRATINA = 1201,
SEQ_BATTLE_FRONTIER_BRAIN,
SEQ_VICTORY_FRONTIER_BRAIN,

View File

@@ -8,7 +8,7 @@ int ov6_022430C4(UnkStruct_0203CDB0 * param0);
int ov6_022430E8(UnkStruct_0203CDB0 * param0, const u8 param1);
int ov6_02243114(UnkStruct_0203CDB0 * param0, const u8 param1);
int ov6_02243140(UnkStruct_0203CDB0 * param0);
int ov6_02243148(UnkStruct_0203CDB0 * param0);
int GetRadarSpecies(UnkStruct_0203CDB0 * param0);
void ov6_02243160(UnkStruct_020698E4 * param0);
#endif // POKEPLATINUM_OV6_022430C4_H

35
include/pokeradar.h Normal file
View File

@@ -0,0 +1,35 @@
#ifndef POKEPLATINUM_POKERADAR_H
#define POKEPLATINUM_POKERADAR_H
#include "struct_decls/struct_0203CDB0_decl.h"
#include "struct_decls/struct_020508D4_decl.h"
typedef struct RadarChain RadarChain;
#define NUM_GRASS_PATCHES 4
#define RADAR_BATTERY_STEPS 50
enum PatchShakeType {
PATCH_SHAKE_SOFT = 0,
PATCH_SHAKE_HARD = 1
};
RadarChain *RadarChain_Init(const int heapID);
void RadarChain_Free(RadarChain *chain);
void RadarChain_Clear(RadarChain *chain);
BOOL RadarSpawnPatches(UnkStruct_0203CDB0 *param0, const int param1, const int param2, RadarChain *chain);
void SetupGrassPatches(UnkStruct_0203CDB0 *param0, const int param1, RadarChain *chain);
void sub_02069638(UnkStruct_0203CDB0 *param0, RadarChain *chain);
BOOL sub_02069690(RadarChain *chain);
int sub_020696DC(const int param0, const int param1, UnkStruct_0203CDB0 *param2, RadarChain *chain, int *param4, BOOL *param5, BOOL *param6);
void SetRadarMon(RadarChain *chain, const int species, const int level);
void GetRadarMon(RadarChain *chain, int *species, int *level);
const BOOL sub_02069798(const RadarChain *chain);
void sub_0206979C(UnkStruct_0203CDB0 *param0);
BOOL GetRadarChainActive(const RadarChain *chain);
BOOL RefreshRadarChain(UnkStruct_020508D4 *param0);
void sub_02069B74(UnkStruct_0203CDB0 *param0);
int GetChainCount(UnkStruct_0203CDB0 *param0);
void RadarChargeStep(UnkStruct_0203CDB0 *param0);
#endif // POKEPLATINUM_POKERADAR_H

View File

@@ -1,6 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_0206942C_DECL_H
#define POKEPLATINUM_STRUCT_0206942C_DECL_H
typedef struct UnkStruct_0206942C_t UnkStruct_0206942C;
#endif // POKEPLATINUM_STRUCT_0206942C_DECL_H

View File

@@ -19,7 +19,7 @@
#include "struct_decls/struct_0205C22C_decl.h"
#include "struct_decls/struct_0205E884_decl.h"
#include "struct_decls/struct_02061830_decl.h"
#include "struct_decls/struct_0206942C_decl.h"
#include "pokeradar.h"
#include "struct_decls/struct_0207D99C_decl.h"
#include "struct_decls/struct_02095E80_decl.h"
#include "struct_decls/struct_0209ACBC_decl.h"
@@ -82,7 +82,7 @@ typedef struct UnkStruct_0203CDB0_t {
UnkStruct_02095E80 * unk_88;
UnkStruct_ov5_021EB0E0 * unk_8C;
int unk_90;
UnkStruct_0206942C * unk_94;
RadarChain *chain;
UnkStruct_0207D99C * unk_98;
UnkStruct_0202B628 * unk_9C;
UnkStruct_ov5_021EF300 * unk_A0;

View File

@@ -1,26 +0,0 @@
#ifndef POKEPLATINUM_UNK_0206940C_H
#define POKEPLATINUM_UNK_0206940C_H
#include "struct_decls/struct_0203CDB0_decl.h"
#include "struct_decls/struct_020508D4_decl.h"
#include "struct_decls/struct_0206942C_decl.h"
UnkStruct_0206942C * sub_0206940C(const int param0);
void sub_0206942C(UnkStruct_0206942C * param0);
void sub_02069434(UnkStruct_0206942C * param0);
BOOL sub_02069474(UnkStruct_0203CDB0 * param0, const int param1, const int param2, UnkStruct_0206942C * param3);
void sub_020695C8(UnkStruct_0203CDB0 * param0, const int param1, UnkStruct_0206942C * param2);
void sub_02069638(UnkStruct_0203CDB0 * param0, UnkStruct_0206942C * param1);
BOOL sub_02069690(UnkStruct_0206942C * param0);
int sub_020696DC(const int param0, const int param1, UnkStruct_0203CDB0 * param2, UnkStruct_0206942C * param3, int * param4, BOOL * param5, BOOL * param6);
void sub_02069774(UnkStruct_0206942C * param0, const int param1, const int param2);
void sub_0206978C(UnkStruct_0206942C * param0, int * param1, int * param2);
const BOOL sub_02069798(const UnkStruct_0206942C * param0);
void sub_0206979C(UnkStruct_0203CDB0 * param0);
BOOL sub_0206981C(const UnkStruct_0206942C * param0);
BOOL sub_02069A00(UnkStruct_020508D4 * param0);
void sub_02069B74(UnkStruct_0203CDB0 * param0);
int sub_02069B90(UnkStruct_0203CDB0 * param0);
void sub_02069B98(UnkStruct_0203CDB0 * param0);
#endif // POKEPLATINUM_UNK_0206940C_H

View File

@@ -260,7 +260,7 @@ Static main
Object main.nef.p/src_unk_02067A84.c.o
Object main.nef.p/src_unk_02068344.c.o
Object main.nef.p/src_unk_020683F4.c.o
Object main.nef.p/src_unk_0206940C.c.o
Object main.nef.p/src_pokeradar.c.o
Object main.nef.p/src_unk_02069BE0.c.o
Object main.nef.p/src_unk_0206A780.c.o
Object main.nef.p/src_unk_0206A8DC.c.o

View File

@@ -247,7 +247,7 @@ pokeplatinum_c = files(
'unk_02067A84.c',
'unk_02068344.c',
'unk_020683F4.c',
'unk_0206940C.c',
'pokeradar.c',
'unk_02069BE0.c',
'unk_0206A780.c',
'unk_0206A8DC.c',

View File

@@ -65,7 +65,7 @@
#include "unk_0205E7D0.h"
#include "unk_02061804.h"
#include "unk_02068344.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "overlay005/ov5_021D0D80.h"
#include "overlay005/ov5_021D1A94.h"
#include "overlay005/ov5_021D37AC.h"
@@ -448,7 +448,7 @@ static BOOL ov5_021D11CC (UnkStruct_0203CDB0 * param0)
}
{
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1);
sub_0203A418(param0);

View File

@@ -51,7 +51,7 @@
#include "unk_02061804.h"
#include "unk_02067A84.h"
#include "unk_020683F4.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
#include "unk_02071B10.h"
@@ -920,7 +920,7 @@ static BOOL ov5_021D2B08 (UnkStruct_0203CDB0 * param0)
static BOOL ov5_021D2B14 (UnkStruct_0203CDB0 * param0)
{
sub_02069B98(param0);
RadarChargeStep(param0);
return 0;
}

View File

@@ -36,7 +36,7 @@
#include "unk_020559DC.h"
#include "unk_0205DAC8.h"
#include "unk_0205E7D0.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
#include "roaming_pokemon.h"
@@ -288,7 +288,7 @@ BOOL ov6_02240D5C (UnkStruct_0203CDB0 * param0)
memset(&v10, 0, sizeof(UnkStruct_ov6_02241674));
if (!sub_020696DC(v2, v3, param0, param0->unk_94, &v10.unk_00, &v10.unk_04, &v10.unk_08)) {
if (!sub_020696DC(v2, v3, param0, param0->chain, &v10.unk_00, &v10.unk_04, &v10.unk_08)) {
v10.unk_0C = 0;
} else {
v10.unk_0C = 1;
@@ -314,7 +314,7 @@ BOOL ov6_02240D5C (UnkStruct_0203CDB0 * param0)
sub_02052314(v0, param0);
ov6_0224239C(v14.unk_00, v17, v0);
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
sub_02050E10(param0, v0);
return 1;
} else {
@@ -537,7 +537,7 @@ BOOL ov6_022411C8 (UnkStruct_0203CDB0 * param0, UnkStruct_020508D4 * param1)
sub_02052314(v0, param0);
ov6_0224239C(v13.unk_00, v15, v0);
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
sub_02050E78(param0, param1, v0);
return 1;
}
@@ -683,7 +683,7 @@ BOOL ov6_022413E4 (UnkStruct_0203CDB0 * param0, BattleParams ** param1)
sub_02052314(*param1, param0);
ov6_0224239C(v13.unk_00, v16, *param1);
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
return 1;
} else {
return 0;
@@ -764,7 +764,7 @@ static BOOL ov6_02241674 (UnkStruct_0203CDB0 * param0, Pokemon * param1, BattleP
param4[11].unk_00 = param3->unk_58[3];
}
sub_0206978C(param0->unk_94, &v1, &v2);
GetRadarMon(param0->chain, &v1, &v2);
if (param6->unk_04 == 1) {
TrainerInfo * v3;
@@ -782,14 +782,14 @@ static BOOL ov6_02241674 (UnkStruct_0203CDB0 * param0, Pokemon * param1, BattleP
v4 = sub_0205EABC(param0->unk_3C);
v5 = sub_0205EAC8(param0->unk_3C);
sub_02069474(param0, v4, v5, param0->unk_94);
RadarSpawnPatches(param0, v4, v5, param0->chain);
}
}
} else {
v0 = ov6_02241DC4(param1, 0xff, param5, param4, 0, 1, param2);
if (v0) {
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
}
}
@@ -1347,7 +1347,7 @@ static BOOL ov6_02241F7C (UnkStruct_0203CDB0 * param0, Pokemon * param1, const U
v3 = param3[v1].unk_00;
if (param6 == 0) {
sub_02069774(param0->unk_94, v3, v2);
SetRadarMon(param0->chain, v3, v2);
sub_02069B74(param0);
} else {
if (v3 == param6) {
@@ -1355,7 +1355,7 @@ static BOOL ov6_02241F7C (UnkStruct_0203CDB0 * param0, Pokemon * param1, const U
v2 = param7;
sub_02069B74(param0);
} else {
sub_02069434(param0->unk_94);
RadarChain_Clear(param0->chain);
}
}

View File

@@ -6,7 +6,7 @@
#include "overlay006/struct_ov6_022430E8.h"
#include "unk_0202D7A8.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "overlay006/ov6_022430C4.h"
static void ov6_022431A0(UnkStruct_020698E4 * param0, UnkStruct_ov6_022430E8 ** param1);
@@ -56,15 +56,14 @@ int ov6_02243114 (UnkStruct_0203CDB0 * param0, const u8 param1)
int ov6_02243140 (UnkStruct_0203CDB0 * param0)
{
return sub_02069B90(param0);
return GetChainCount(param0);
}
int ov6_02243148 (UnkStruct_0203CDB0 * param0)
{
int v0, v1;
int GetRadarSpecies (UnkStruct_0203CDB0 * param0) {
int species, level;
sub_0206978C(param0->unk_94, &v0, &v1);
return v0;
GetRadarMon(param0->chain, &species, &level);
return species;
}
void ov6_02243160 (UnkStruct_020698E4 * param0)

View File

@@ -96,7 +96,7 @@ static BOOL ov53_0225621C (UnkStruct_ov53_0225621C * param0, UnkStruct_ov25_0225
param0->unk_04.unk_04 = ov6_02243140(v1);
if (param0->unk_04.unk_04) {
param0->unk_04.unk_00 = ov6_02243148(v1);
param0->unk_04.unk_00 = GetRadarSpecies(v1);
} else {
param0->unk_04.unk_00 = 0;
}
@@ -212,7 +212,7 @@ static BOOL ov53_02256370 (UnkStruct_ov53_0225621C * param0)
if (param0->unk_04.unk_04 == 0) {
v1 = 0;
} else {
v1 = ov6_02243148(v0);
v1 = GetRadarSpecies(v0);
}
if (v1 != param0->unk_04.unk_00) {

489
src/pokeradar.c Normal file
View File

@@ -0,0 +1,489 @@
#include <nitro.h>
#include <string.h>
#include "inlines.h"
#include "struct_decls/struct_020508D4_decl.h"
#include "overlay101/struct_ov101_021D5D90_decl.h"
#include "struct_defs/struct_0201CFEC.h"
#include "struct_defs/struct_0203CDB0.h"
#include "struct_defs/struct_020698E4.h"
#include "unk_02005474.h"
#include "heap.h"
#include "unk_0201CED8.h"
#include "unk_0202D7A8.h"
#include "unk_02039C80.h"
#include "unk_0203E880.h"
#include "unk_020508D4.h"
#include "unk_02054D00.h"
#include "unk_020553DC.h"
#include "unk_0205DAC8.h"
#include "unk_0205E7D0.h"
#include "unk_02061804.h"
#include "pokeradar.h"
#include "unk_020711EC.h"
#include "unk_0207D3B8.h"
#include "overlay005/ov5_021F2D20.h"
#include "overlay006/ov6_022430C4.h"
#include "constants/battle.h"
#include "constants/sdat.h"
typedef struct {
int unk_00;
int unk_04;
int shakeType;
BOOL active;
BOOL continueChain;
BOOL shiny;
UnkStruct_ov101_021D5D90 *unk_18;
VecFx32 position;
} GrassPatch;
typedef struct RadarChain {
int shakeType;
int count;
int species;
int level;
BOOL active;
BOOL unk_14;
BOOL unk_18;
GrassPatch patch[NUM_GRASS_PATCHES];
UnkStruct_0201CFEC unk_BC;
u8 unk_D0;
} RadarChain;
static BOOL CheckTileIsGrass(UnkStruct_0203CDB0 *param0, const fx32 param1, const int param2, const int param3, const u8 param4, const u8 param5, GrassPatch *patch);
static BOOL sub_020698AC(const RadarChain *chain, const int param1, const int param2, u8 *param3);
static void sub_020698E4(UnkStruct_0203CDB0 *param0, RadarChain *chain);
static u8 sub_0206994C(UnkStruct_0203CDB0 *param0);
static BOOL CheckPatchContinueChain(const u8 patchRing, const int battleResult);
static BOOL CheckPatchShiny(const int param0);
static void IncWithCap(int *param0);
RadarChain *RadarChain_Init (const int heapID) {
RadarChain *chain = Heap_AllocFromHeap(heapID, sizeof(RadarChain));
sub_0201CFEC(FX32_ONE * 16, FX32_ONE * 8, FX32_ONE * 16, &chain->unk_BC);
return chain;
}
void RadarChain_Free (RadarChain *chain) {
Heap_FreeToHeap(chain);
}
void RadarChain_Clear (RadarChain *chain) {
chain->count = 0;
chain->shakeType = PATCH_SHAKE_SOFT;
chain->species = 0;
chain->level = 0;
chain->active = FALSE;
chain->unk_D0 = 0;
chain->unk_14 = 1;
chain->unk_18 = 0;
MI_CpuClear8(chain->patch, sizeof(GrassPatch) * NUM_GRASS_PATCHES);
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
chain->patch[patchRing].active = FALSE;
}
}
BOOL RadarSpawnPatches (UnkStruct_0203CDB0 *param0, const int param1, const int param2, RadarChain *chain) {
u8 v1, v2;
u8 v3;
u8 v4;
int v5, v6;
u8 v7;
u8 ringTileCount[NUM_GRASS_PATCHES] = { // Number of tiles in each ring of the radar. Lowest being the most outer ring
32, 24, 16, 8
};
const VecFx32 *v8 = sub_0205EAFC(param0->unk_3C);
v7 = 0;
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
v3 = inline_020564D0(ringTileCount[patchRing]);
v1 = 9 - (patchRing * 2);
v2 = 9 - (patchRing * 2);
v4 = v3 / v1;
if (v4 == 0) {
v5 = patchRing + v3 % v1;
v6 = patchRing;
} else if (v4 == 1) {
v5 = patchRing + v3 % v1;
v6 = patchRing + v2 - 1;
} else {
GF_ASSERT(v3 >= (v1 * 2));
v4 = v3 - (v1 * 2);
v6 = patchRing + (v4 / 2) + 1;
if (v4 % 2 == 0) {
v5 = patchRing;
} else {
v5 = patchRing + v1 - 1;
}
}
BOOL v10 = CheckTileIsGrass(param0, v8->y, param1, param2, v5, v6, &chain->patch[patchRing]);
if (v10) {
v7++;
}
}
if (v7 == 0) {
RadarChain_Clear(chain);
sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1);
} else {
chain->active = TRUE;
}
return chain->active;
}
void SetupGrassPatches (UnkStruct_0203CDB0 *param0, const int param1, RadarChain *chain) {
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
if (chain->patch[patchRing].active) {
chain->patch[patchRing].continueChain = CheckPatchContinueChain(patchRing, param1);
if (!chain->patch[patchRing].continueChain) {
if (inline_020564D0(100) < 50) { // If the patch will break the chain, it has a 50/50 chance of shaking the other type
chain->patch[patchRing].shakeType = PATCH_SHAKE_SOFT;
} else {
chain->patch[patchRing].shakeType = PATCH_SHAKE_HARD;
}
chain->patch[patchRing].shiny = FALSE;
} else {
chain->patch[patchRing].shakeType = chain->shakeType; // A patch that continues the chain, shakes the type the chain is set to
chain->patch[patchRing].shiny = CheckPatchShiny(param0->chain->count);
}
}
}
}
void sub_02069638 (UnkStruct_0203CDB0 *param0, RadarChain *chain) {
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
if (chain->patch[patchRing].active) {
int v1 = chain->patch[patchRing].unk_00;
int v2 = chain->patch[patchRing].unk_04;
if (chain->patch[patchRing].shiny) {
chain->patch[patchRing].unk_18 = ov5_021F3154(param0, v1, v2, 2);
} else {
if (chain->patch[patchRing].shakeType == PATCH_SHAKE_SOFT) {
chain->patch[patchRing].unk_18 = ov5_021F3154(param0, v1, v2, 0);
} else {
chain->patch[patchRing].unk_18 = ov5_021F3154(param0, v1, v2, 1);
}
}
} else {
chain->patch[patchRing].unk_18 = NULL;
}
}
}
BOOL sub_02069690 (RadarChain *chain) {
u8 v0 = 0;
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
if (chain->patch[patchRing].unk_18 != NULL) {
if (ov5_021F31A8(chain->patch[patchRing].unk_18)) {
sub_0207136C(chain->patch[patchRing].unk_18);
chain->patch[patchRing].unk_18 = NULL;
v0++;
}
} else {
v0++;
}
}
if (v0 >= 4) {
return TRUE;
}
return FALSE;
}
BOOL sub_020696DC (const int param0, const int param1, UnkStruct_0203CDB0 *param2, RadarChain *chain, int *param4, BOOL *param5, BOOL *param6) {
u8 patchRing;
*param5 = 0;
*param6 = 0;
if (!sub_020698AC(chain, param0, param1, &patchRing)) {
return FALSE;
}
chain->unk_18 = 1;
BOOL continueChain = chain->patch[patchRing].continueChain;
int shakeType = chain->patch[patchRing].shakeType;
if (chain->unk_14 == 0) {
if (continueChain) {
IncWithCap(&(chain->count));
*param4 = shakeType;
*param5 = 1;
sub_020698E4(param2, chain);
*param6 = chain->patch[patchRing].shiny;
return TRUE;
} else {
*param4 = shakeType;
}
} else {
*param4 = shakeType;
chain->unk_14 = 0;
chain->unk_D0 = sub_0206994C(param2);
}
chain->shakeType = *param4;
return TRUE;
}
void SetRadarMon (RadarChain *chain, const int species, const int level) {
GF_ASSERT(species != 0);
chain->species = species;
chain->level = level;
}
void GetRadarMon (RadarChain *chain, int *species, int *level) {
*species = chain->species;
*level = chain->level;
}
const BOOL sub_02069798 (const RadarChain *chain) {
return chain->unk_18;
}
void sub_0206979C (UnkStruct_0203CDB0 *param0) {
BOOL v0;
GrassPatch *patch;
int patchRing;
if (!param0->chain->active || param0->unk_10 != NULL) {
return;
}
for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
patch = &(param0->chain->patch[patchRing]);
v0 = sub_0201CF7C(&(patch->position), &(param0->chain->unk_BC));
if (patch->active && !v0) {
patch->active = FALSE;
}
}
int v3 = 0;
for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
patch = &(param0->chain->patch[patchRing]);
if (patch->active == 0) {
v3++;
}
}
if (v3 == 4) {
RadarChain_Clear(param0->chain);
sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1);
}
}
BOOL GetRadarChainActive (const RadarChain *chain) {
return chain->active;
}
static BOOL CheckTileIsGrass (UnkStruct_0203CDB0 *param0, const fx32 param1, const int param2, const int param3, const u8 param4, const u8 param5, GrassPatch *patch) {
int v0 = (param2 - (9 / 2)) + param4;
int v1 = (param3 - (9 / 2)) + param5;
patch->unk_00 = v0;
patch->unk_04 = v1;
u8 v2 = sub_02054F94(param0, v0, v1);
if (sub_0205DAC8(v2)) {
u8 v3;
patch->position.x = FX32_ONE * 16 * v0;
patch->position.z = FX32_ONE * 16 * v1;
patch->position.y = sub_02054FBC(param0, 0, patch->position.x, patch->position.z, &v3);
if (param1 != patch->position.y) {
patch->active = FALSE;
return FALSE;
}
int v5 = v0 / 32;
int v6 = v1 / 32;
int v4 = sub_02039E30(param0->unk_2C, v5, v6);
if (param0->unk_1C->unk_00 != v4) {
patch->active = FALSE;
return FALSE;
}
patch->active = TRUE;
return TRUE;
} else {
patch->active = FALSE;
return FALSE;
}
}
static BOOL sub_020698AC (const RadarChain *chain, const int param1, const int param2, u8 *param3) {
for (u8 patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) {
if (chain->patch[patchRing].active) {
if ((chain->patch[patchRing].unk_00 == param1) && (chain->patch[patchRing].unk_04 == param2)) {
*param3 = patchRing;
return TRUE;
}
}
}
return FALSE;
}
static void sub_020698E4 (UnkStruct_0203CDB0 *param0, RadarChain *chain) {
UnkStruct_020698E4 *v0 = sub_0202D830(sub_0202D834(param0->unk_0C));
int v1 = v0->unk_00[chain->unk_D0].unk_02;
if (v1 < chain->count) {
v0->unk_00[chain->unk_D0].unk_02 = chain->count;
v0->unk_00[chain->unk_D0].unk_00 = chain->species;
ov6_02243160(v0);
if (v0->unk_00[chain->unk_D0].unk_02 <= chain->count) {
for (int v2 = 0; v2 < 3; v2++) {
if (v0->unk_00[(2 - v2)].unk_02 == chain->count) {
chain->unk_D0 = (2 - v2);
return;
}
}
GF_ASSERT(FALSE);
}
}
}
static u8 sub_0206994C (UnkStruct_0203CDB0 *param0) {
u8 v1;
BOOL v2;
UnkStruct_020698E4 *v0 = sub_0202D830(sub_0202D834(param0->unk_0C));
for (v1 = 0; v1 < 3; v1++) {
if (v0->unk_00[v1].unk_00 == 0) {
return v1;
}
}
(v0->unk_00[0].unk_02 < v0->unk_00[1].unk_02) ? (v2 = 1) : (v2 = 0);
if (v2) {
v1 = 0;
} else {
v1 = 1;
}
(v0->unk_00[v1].unk_02 < v0->unk_00[2].unk_02) ? (v2 = 1) : (v2 = 0);
if (!v2) {
v1 = 2;
}
return v1;
}
static BOOL CheckPatchContinueChain (const u8 patchRing, const int battleResult) {
u8 *rates;
u8 ratesNormal[4] = {88, 68, 48, 28};
u8 ratesBoosted[4] = {98, 78, 58, 38};
if (battleResult == BATTLE_RESULT_WIN) { // If the battle resulted in fainting the mon, use the regular rates
rates = ratesNormal;
} else if (battleResult == BATTLE_RESULT_CAPTURED_MON) { // If the battle resulted in a capture, use the boosted rates
rates = ratesBoosted;
}
if (inline_020564D0(100) < rates[patchRing]) { // Check if random number falls within the rates
return TRUE; // Patch will continue the chain
} else {
return FALSE; // Patch will break the chain
}
}
BOOL RefreshRadarChain (UnkStruct_020508D4 *param0) {
UnkStruct_0203CDB0 *v0 = sub_02050A60(param0);
int *v1 = sub_02050A64(param0);
switch (*v1) {
case 0:
sub_02062C48(v0->unk_38);
u8 *v2 = sub_0202D9C4(sub_0202D834(v0->unk_0C));
if (*v2 < RADAR_BATTERY_STEPS) {
sub_0203E8E0(param0, 8970, NULL, NULL);
*(u16 *)(sub_0203F098(v0, 41)) = RADAR_BATTERY_STEPS - (*v2);
*v1 = 4;
} else {
*v2 = 0;
int v3 = sub_0205EABC(v0->unk_3C);
int v4 = sub_0205EAC8(v0->unk_3C);
RadarSpawnPatches(v0, v3, v4, v0->chain);
if (v0->chain->active) {
SetupGrassPatches(v0, 0x1, v0->chain);
sub_02069638(v0, v0->chain);
*v1 = 1;
} else {
*v1 = 3;
}
}
break;
case 1:
Sound_PlayBGM(SEQ_POKERADAR);
*v1 = 2;
break;
case 2:
if (sub_02069690(v0->chain)) {
*v1 = 4;
}
break;
case 4:
Heap_FreeToHeap(v1);
sub_02062C78(v0->unk_38);
return TRUE;
break;
case 3:
sub_0203E8E0(param0, 8971, NULL, NULL);
*v1 = 4;
break;
}
return FALSE;
}
static BOOL CheckPatchShiny (const int chainCount) {
if (!chainCount) {
return FALSE;
}
int rate = 8200 - (chainCount * 200);
if (rate < 200) {
rate = 200;
}
if (!inline_020564D0(rate)) {
return TRUE;
} else {
return FALSE;
}
}
void sub_02069B74 (UnkStruct_0203CDB0 *param0) {
IncWithCap(&(param0->chain->count));
sub_020698E4(param0, param0->chain);
}
int GetChainCount (UnkStruct_0203CDB0 *param0) {
return param0->chain->count;
}
void RadarChargeStep (UnkStruct_0203CDB0 *param0) {
u8 *v0;
if (sub_0207D688(sub_0207D990(param0->unk_0C), 431, 1, 4) == 1) {
v0 = sub_0202D9C4(sub_0202D834(param0->unk_0C));
if ((*v0) < RADAR_BATTERY_STEPS) {
(*v0)++;
}
}
}
static void IncWithCap (int *param0) {
(*param0)++;
if ((*param0) > 999) {
(*param0) = 999;
}
}

View File

@@ -31,7 +31,7 @@
#include "unk_020530C8.h"
#include "unk_02057518.h"
#include "unk_0205F180.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0207D3B8.h"
#include "unk_0209ACBC.h"
#include "unk_0209C370.h"
@@ -184,9 +184,9 @@ static UnkStruct_0203CDB0 * sub_0203CDB0 (UnkStruct_020067E8 * param0)
sub_0203A378(v1, 11);
v1->unk_98 = sub_0207D99C(11);
v1->unk_94 = sub_0206940C(11);
v1->chain = RadarChain_Init(11);
sub_02069434(v1->unk_94);
RadarChain_Clear(v1->chain);
v1->unk_B4 = sub_0209ACBC(11);
v1->unk_BC = sub_0209C370(11);
@@ -201,7 +201,7 @@ static void sub_0203CE6C (UnkStruct_020067E8 * param0)
sub_02039DE4(v0->unk_2C);
sub_0203A398(v0);
Heap_FreeToHeap(v0->unk_98);
sub_0206942C(v0->unk_94);
RadarChain_Free(v0->chain);
sub_0209ACDC(v0->unk_B4);
sub_0209C388(v0->unk_BC);

View File

@@ -167,7 +167,7 @@
#include "unk_02061804.h"
#include "unk_02063400.h"
#include "unk_020655F4.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_02069BE0.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
@@ -4769,7 +4769,7 @@ static BOOL sub_02042AB0 (UnkStruct_0203E724 * param0)
static BOOL sub_02042AE0 (UnkStruct_0203E724 * param0)
{
sub_02069434(param0->unk_34->unk_94);
RadarChain_Clear(param0->unk_34->chain);
{
int v0;

View File

@@ -42,7 +42,7 @@
#include "unk_020562F8.h"
#include "unk_0205964C.h"
#include "unk_02061804.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
#include "unk_0206CCB0.h"
@@ -399,7 +399,7 @@ static BOOL sub_02050EE0 (UnkStruct_020508D4 * param0)
if (sub_02052868(v1->unk_10->unk_14) == 0) {
sub_02050DFC(v1);
sub_02069434(v0->unk_94);
RadarChain_Clear(v0->chain);
sub_02050924(param0, sub_02052B2C, NULL);
return 0;
}
@@ -411,13 +411,13 @@ static BOOL sub_02050EE0 (UnkStruct_020508D4 * param0)
sub_020518B0(v0, v1->unk_10);
sub_02051988(v0, v1->unk_10);
if (sub_0206981C(v0->unk_94)) {
if (sub_02069798(v0->unk_94)) {
if (GetRadarChainActive(v0->chain)) {
if (sub_02069798(v0->chain)) {
if ((!(v1->unk_10->unk_14 == 0x1)) && (!(v1->unk_10->unk_14 == 0x4))) {
sub_02069434(v0->unk_94);
RadarChain_Clear(v0->chain);
}
} else {
sub_02069434(v0->unk_94);
RadarChain_Clear(v0->chain);
}
}
@@ -430,15 +430,15 @@ static BOOL sub_02050EE0 (UnkStruct_020508D4 * param0)
v1->unk_00++;
break;
case 5:
if (sub_0206981C(v0->unk_94)) {
sub_020695C8(v0, v1->unk_10->unk_14, v0->unk_94);
sub_02069638(v0, v0->unk_94);
if (GetRadarChainActive(v0->chain)) {
SetupGrassPatches(v0, v1->unk_10->unk_14, v0->chain);
sub_02069638(v0, v0->chain);
}
v1->unk_00++;
break;
case 6:
if (sub_02069690(v0->unk_94)) {
if (sub_02069690(v0->chain)) {
sub_02062C78(v0->unk_38);
sub_02050DFC(v1);
return 1;
@@ -541,7 +541,7 @@ void sub_0205120C (UnkStruct_020508D4 * param0, int * param1)
UnkStruct_0203CDB0 * v2;
v2 = sub_02050A60(param0);
sub_02069434(v2->unk_94);
RadarChain_Clear(v2->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, v2);
@@ -562,7 +562,7 @@ void sub_02051270 (UnkStruct_020508D4 * param0, u16 param1, u8 param2, int * par
UnkStruct_0203CDB0 * v2;
v2 = sub_02050A60(param0);
sub_02069434(v2->unk_94);
RadarChain_Clear(v2->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, v2);
@@ -586,7 +586,7 @@ void sub_020512E4 (UnkStruct_020508D4 * param0, u16 param1, u8 param2, int * par
int v4;
v2 = sub_02050A60(param0);
sub_02069434(v2->unk_94);
RadarChain_Clear(v2->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, v2);
@@ -764,7 +764,7 @@ void sub_020515CC (UnkStruct_020508D4 * param0, int param1, int param2, int para
v0 = 0x1;
}
sub_02069434(v3->unk_94);
RadarChain_Clear(v3->chain);
v2 = sub_02051D8C(11, v0);
sub_02052314(v2, v3);
@@ -1011,7 +1011,7 @@ void sub_02051ABC (UnkStruct_020508D4 * param0, u16 param1, u8 param2, int * par
UnkStruct_0203CDB0 * v2;
v2 = sub_02050A60(param0);
sub_02069434(v2->unk_94);
RadarChain_Clear(v2->chain);
v1 = sub_02051D8C(11, (0x0 | 0x0));
sub_02052314(v1, v2);

View File

@@ -64,7 +64,7 @@
#include "unk_0205D8CC.h"
#include "unk_0205E7D0.h"
#include "unk_02061804.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
#include "unk_02070428.h"
@@ -695,7 +695,7 @@ static BOOL sub_02053930 (UnkStruct_020508D4 * param0)
sub_0205311C(v1, &v2->unk_04);
sub_020533CC(v1);
sub_020531C0(v1, 0);
sub_02069434(v1->unk_94);
RadarChain_Clear(v1->chain);
(v2->unk_00)++;
break;
case 2:

View File

@@ -15,7 +15,7 @@
#include "unk_020507CC.h"
#include "unk_020553DC.h"
#include "unk_0205E7D0.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "trainer_data.h"
@@ -168,7 +168,7 @@ u16 sub_02055428 (UnkStruct_0203CDB0 * param0, int param1)
}
}
if (sub_0206981C(param0->unk_94) == 1) {
if (GetRadarChainActive(param0->chain) == 1) {
return 1150;
}

View File

@@ -52,7 +52,7 @@
#include "unk_02061804.h"
#include "unk_02063400.h"
#include "unk_020683F4.h"
#include "unk_0206940C.h"
#include "pokeradar.h"
#include "unk_0206A8DC.h"
#include "unk_0206AFE0.h"
#include "unk_0206B9D8.h"
@@ -504,7 +504,7 @@ static BOOL sub_02068884 (UnkStruct_020508D4 * param0)
ov5_021DFB54(v0->unk_3C, (1 << 1));
ov5_021DFB5C(v0->unk_3C);
sub_02069434(v0->unk_94);
RadarChain_Clear(v0->chain);
}
(*v1)++;
@@ -721,7 +721,7 @@ static void sub_02068BF8 (UnkStruct_02068630 * param0, const UnkStruct_020684D0
(*v2) = 0;
sub_020509D4(v0);
v1->unk_22C = sub_02069A00;
v1->unk_22C = RefreshRadarChain;
v1->unk_25C = v2;
v1->unk_2A = 10;
}
@@ -731,7 +731,7 @@ static BOOL sub_02068C38 (UnkStruct_02068870 * param0)
int * v0 = Heap_AllocFromHeapAtEnd(11, sizeof(int));
*v0 = 0;
sub_02050904(param0->unk_00, sub_02069A00, v0);
sub_02050904(param0->unk_00, RefreshRadarChain, v0);
return 0;
}

View File

@@ -1,602 +0,0 @@
#include <nitro.h>
#include <string.h>
#include "inlines.h"
#include "struct_decls/struct_020508D4_decl.h"
#include "overlay101/struct_ov101_021D5D90_decl.h"
#include "struct_defs/struct_0201CFEC.h"
#include "struct_defs/struct_0203CDB0.h"
#include "struct_defs/struct_020698E4.h"
#include "unk_02005474.h"
#include "heap.h"
#include "unk_0201CED8.h"
#include "unk_0202D7A8.h"
#include "unk_02039C80.h"
#include "unk_0203E880.h"
#include "unk_020508D4.h"
#include "unk_02054D00.h"
#include "unk_020553DC.h"
#include "unk_0205DAC8.h"
#include "unk_0205E7D0.h"
#include "unk_02061804.h"
#include "unk_0206940C.h"
#include "unk_020711EC.h"
#include "unk_0207D3B8.h"
#include "overlay005/ov5_021F2D20.h"
#include "overlay006/ov6_022430C4.h"
typedef struct {
int unk_00;
int unk_04;
int unk_08;
BOOL unk_0C;
BOOL unk_10;
BOOL unk_14;
UnkStruct_ov101_021D5D90 * unk_18;
VecFx32 unk_1C;
} UnkStruct_0206979C;
typedef struct UnkStruct_0206942C_t {
int unk_00;
int unk_04;
int unk_08;
int unk_0C;
BOOL unk_10;
BOOL unk_14;
BOOL unk_18;
UnkStruct_0206979C unk_1C[4];
UnkStruct_0201CFEC unk_BC;
u8 unk_D0;
} UnkStruct_0206942C;
static BOOL sub_02069820(UnkStruct_0203CDB0 * param0, const fx32 param1, const int param2, const int param3, const u8 param4, const u8 param5, UnkStruct_0206979C * param6);
static BOOL sub_020698AC(const UnkStruct_0206942C * param0, const int param1, const int param2, u8 * param3);
static void sub_020698E4(UnkStruct_0203CDB0 * param0, UnkStruct_0206942C * param1);
static u8 sub_0206994C(UnkStruct_0203CDB0 * param0);
static BOOL sub_02069994(const u8 param0, const int param1);
static BOOL sub_02069B00(const int param0);
static void sub_02069BCC(int * param0);
UnkStruct_0206942C * sub_0206940C (const int param0)
{
UnkStruct_0206942C * v0;
v0 = Heap_AllocFromHeap(param0, sizeof(UnkStruct_0206942C));
sub_0201CFEC(FX32_ONE * 16, FX32_ONE * 8, FX32_ONE * 16, &v0->unk_BC);
return v0;
}
void sub_0206942C (UnkStruct_0206942C * param0)
{
Heap_FreeToHeap(param0);
}
void sub_02069434 (UnkStruct_0206942C * param0)
{
u8 v0;
param0->unk_04 = 0;
param0->unk_00 = 0;
param0->unk_08 = 0;
param0->unk_0C = 0;
param0->unk_10 = 0;
param0->unk_D0 = 0;
param0->unk_14 = 1;
param0->unk_18 = 0;
MI_CpuClear8(&(param0->unk_1C[0]), sizeof(UnkStruct_0206979C) * 4);
for (v0 = 0; v0 < 4; v0++) {
param0->unk_1C[v0].unk_0C = 0;
}
}
BOOL sub_02069474 (UnkStruct_0203CDB0 * param0, const int param1, const int param2, UnkStruct_0206942C * param3)
{
u8 v0;
u8 v1, v2;
u8 v3;
u8 v4;
int v5, v6;
u8 v7;
const VecFx32 * v8;
u8 v9[4] = {
32, 24, 16, 8
};
v8 = sub_0205EAFC(param0->unk_3C);
v7 = 0;
for (v0 = 0; v0 < 4; v0++) {
BOOL v10;
v3 = inline_020564D0(v9[v0]);
v1 = 9 - (v0 * 2);
v2 = 9 - (v0 * 2);
v4 = v3 / v1;
if (v4 == 0) {
v5 = v0 + v3 % v1;
v6 = v0;
} else if (v4 == 1) {
v5 = v0 + v3 % v1;
v6 = v0 + v2 - 1;
} else {
GF_ASSERT(v3 >= (v1 * 2));
v4 = v3 - (v1 * 2);
v6 = v0 + (v4 / 2) + 1;
if (v4 % 2 == 0) {
v5 = v0;
} else {
v5 = v0 + v1 - 1;
}
}
v10 = sub_02069820(param0, v8->y, param1, param2, v5, v6, &param3->unk_1C[v0]);
if (v10) {
v7++;
}
}
if (v7 == 0) {
sub_02069434(param3);
sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1);
} else {
param3->unk_10 = 1;
}
return param3->unk_10;
}
void sub_020695C8 (UnkStruct_0203CDB0 * param0, const int param1, UnkStruct_0206942C * param2)
{
u8 v0;
for (v0 = 0; v0 < 4; v0++) {
if (param2->unk_1C[v0].unk_0C) {
param2->unk_1C[v0].unk_10 = sub_02069994(v0, param1);
if (!param2->unk_1C[v0].unk_10) {
if (inline_020564D0(100) < 50) {
param2->unk_1C[v0].unk_08 = 0;
} else {
param2->unk_1C[v0].unk_08 = 1;
}
param2->unk_1C[v0].unk_14 = 0;
} else {
param2->unk_1C[v0].unk_08 = param2->unk_00;
param2->unk_1C[v0].unk_14 = sub_02069B00(param0->unk_94->unk_04);
}
}
}
}
void sub_02069638 (UnkStruct_0203CDB0 * param0, UnkStruct_0206942C * param1)
{
u8 v0;
for (v0 = 0; v0 < 4; v0++) {
if (param1->unk_1C[v0].unk_0C) {
int v1 = param1->unk_1C[v0].unk_00;
int v2 = param1->unk_1C[v0].unk_04;
if (param1->unk_1C[v0].unk_14) {
param1->unk_1C[v0].unk_18 = ov5_021F3154(param0, v1, v2, 2);
} else {
if (param1->unk_1C[v0].unk_08 == 0) {
param1->unk_1C[v0].unk_18 = ov5_021F3154(param0, v1, v2, 0);
} else {
param1->unk_1C[v0].unk_18 = ov5_021F3154(param0, v1, v2, 1);
}
}
} else {
param1->unk_1C[v0].unk_18 = NULL;
}
}
}
BOOL sub_02069690 (UnkStruct_0206942C * param0)
{
u8 v0;
u8 v1;
v0 = 0;
for (v1 = 0; v1 < 4; v1++) {
if (param0->unk_1C[v1].unk_18 != NULL) {
if (ov5_021F31A8(param0->unk_1C[v1].unk_18)) {
sub_0207136C(param0->unk_1C[v1].unk_18);
param0->unk_1C[v1].unk_18 = NULL;
v0++;
}
} else {
v0++;
}
}
if (v0 >= 4) {
return 1;
}
return 0;
}
BOOL sub_020696DC (const int param0, const int param1, UnkStruct_0203CDB0 * param2, UnkStruct_0206942C * param3, int * param4, BOOL * param5, BOOL * param6)
{
u8 v0;
BOOL v1;
int v2;
*param5 = 0;
*param6 = 0;
if (!sub_020698AC(param3, param0, param1, &v0)) {
return 0;
}
param3->unk_18 = 1;
v1 = param3->unk_1C[v0].unk_10;
v2 = param3->unk_1C[v0].unk_08;
if (param3->unk_14 == 0) {
if (v1) {
sub_02069BCC(&(param3->unk_04));
*param4 = v2;
*param5 = 1;
sub_020698E4(param2, param3);
(*param6) = param3->unk_1C[v0].unk_14;
return 1;
} else {
*param4 = v2;
}
} else {
*param4 = v2;
param3->unk_14 = 0;
param3->unk_D0 = sub_0206994C(param2);
}
param3->unk_00 = *param4;
return 1;
}
void sub_02069774 (UnkStruct_0206942C * param0, const int param1, const int param2)
{
GF_ASSERT(param1 != 0);
param0->unk_08 = param1;
param0->unk_0C = param2;
}
void sub_0206978C (UnkStruct_0206942C * param0, int * param1, int * param2)
{
(*param1) = param0->unk_08;
(*param2) = param0->unk_0C;
}
const BOOL sub_02069798 (const UnkStruct_0206942C * param0)
{
return param0->unk_18;
}
void sub_0206979C (UnkStruct_0203CDB0 * param0)
{
BOOL v0;
UnkStruct_0206979C * v1;
int v2;
if ((!param0->unk_94->unk_10) || (param0->unk_10 != NULL)) {
return;
}
for (v2 = 0; v2 < 4; v2++) {
v1 = &(param0->unk_94->unk_1C[v2]);
v0 = sub_0201CF7C(&(v1->unk_1C), &(param0->unk_94->unk_BC));
if ((v1->unk_0C) && (!v0)) {
v1->unk_0C = 0;
}
}
{
int v3;
v3 = 0;
for (v2 = 0; v2 < 4; v2++) {
v1 = &(param0->unk_94->unk_1C[v2]);
if (v1->unk_0C == 0) {
v3++;
}
}
if (v3 == 4) {
sub_02069434(param0->unk_94);
sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1);
}
}
}
BOOL sub_0206981C (const UnkStruct_0206942C * param0)
{
return param0->unk_10;
}
static BOOL sub_02069820 (UnkStruct_0203CDB0 * param0, const fx32 param1, const int param2, const int param3, const u8 param4, const u8 param5, UnkStruct_0206979C * param6)
{
int v0, v1;
u8 v2;
v0 = (param2 - (9 / 2)) + param4;
v1 = (param3 - (9 / 2)) + param5;
param6->unk_00 = v0;
param6->unk_04 = v1;
v2 = sub_02054F94(param0, v0, v1);
if (sub_0205DAC8(v2)) {
u8 v3;
param6->unk_1C.x = FX32_ONE * 16 * v0;
param6->unk_1C.z = FX32_ONE * 16 * v1;
param6->unk_1C.y = sub_02054FBC(param0, 0, param6->unk_1C.x, param6->unk_1C.z, &v3);
if (param1 != param6->unk_1C.y) {
param6->unk_0C = 0;
return 0;
}
{
int v4;
int v5, v6;
v5 = v0 / 32;
v6 = v1 / 32;
v4 = sub_02039E30(param0->unk_2C, v5, v6);
if (param0->unk_1C->unk_00 != v4) {
param6->unk_0C = 0;
return 0;
}
}
param6->unk_0C = 1;
return 1;
} else {
param6->unk_0C = 0;
return 0;
}
}
static BOOL sub_020698AC (const UnkStruct_0206942C * param0, const int param1, const int param2, u8 * param3)
{
u8 v0;
for (v0 = 0; v0 < 4; v0++) {
if (param0->unk_1C[v0].unk_0C) {
if ((param0->unk_1C[v0].unk_00 == param1) && (param0->unk_1C[v0].unk_04 == param2)) {
*param3 = v0;
return 1;
}
}
}
return 0;
}
static void sub_020698E4 (UnkStruct_0203CDB0 * param0, UnkStruct_0206942C * param1)
{
UnkStruct_020698E4 * v0;
int v1;
int v2;
v0 = sub_0202D830(sub_0202D834(param0->unk_0C));
v1 = v0->unk_00[param1->unk_D0].unk_02;
if (v1 < param1->unk_04) {
v0->unk_00[param1->unk_D0].unk_02 = param1->unk_04;
v0->unk_00[param1->unk_D0].unk_00 = param1->unk_08;
ov6_02243160(v0);
if (v0->unk_00[param1->unk_D0].unk_02 <= param1->unk_04) {
for (v2 = 0; v2 < 3; v2++) {
if (v0->unk_00[(2 - v2)].unk_02 == param1->unk_04) {
param1->unk_D0 = (2 - v2);
return;
}
}
GF_ASSERT(0);
}
}
}
static u8 sub_0206994C (UnkStruct_0203CDB0 * param0)
{
UnkStruct_020698E4 * v0;
u8 v1;
BOOL v2;
v0 = sub_0202D830(sub_0202D834(param0->unk_0C));
for (v1 = 0; v1 < 3; v1++) {
if (v0->unk_00[v1].unk_00 == 0) {
return v1;
}
}
(v0->unk_00[0].unk_02 < v0->unk_00[1].unk_02) ? (v2 = 1) : (v2 = 0);
if (v2) {
v1 = 0;
} else {
v1 = 1;
}
(v0->unk_00[v1].unk_02 < v0->unk_00[2].unk_02) ? (v2 = 1) : (v2 = 0);
if (!v2) {
v1 = 2;
}
return v1;
}
static BOOL sub_02069994 (const u8 param0, const int param1)
{
u8 * v0;
u8 v1[4] = {88, 68, 48, 28};
u8 v2[4] = {98, 78, 58, 38};
if (param1 == 0x1) {
v0 = v1;
} else if (param1 == 0x4) {
v0 = v2;
}
if (inline_020564D0(100) < v0[param0]) {
return 1;
} else {
return 0;
}
}
BOOL sub_02069A00 (UnkStruct_020508D4 * param0)
{
UnkStruct_0203CDB0 * v0 = sub_02050A60(param0);
int * v1 = sub_02050A64(param0);
switch (*v1) {
case 0:
{
u8 * v2;
sub_02062C48(v0->unk_38);
v2 = sub_0202D9C4(sub_0202D834(v0->unk_0C));
if ((*v2) < 50) {
sub_0203E8E0(param0, 8970, NULL, NULL);
*(u16 *)(sub_0203F098(v0, 41)) = 50 - (*v2);
(*v1) = 4;
} else {
int v3, v4;
(*v2) = 0;
v3 = sub_0205EABC(v0->unk_3C);
v4 = sub_0205EAC8(v0->unk_3C);
sub_02069474(v0, v3, v4, v0->unk_94);
if (v0->unk_94->unk_10) {
sub_020695C8(v0, 0x1, v0->unk_94);
sub_02069638(v0, v0->unk_94);
(*v1) = 1;
} else {
(*v1) = 3;
}
}
}
break;
case 1:
Sound_PlayBGM(1150);
(*v1) = 2;
break;
case 2:
if (sub_02069690(v0->unk_94)) {
(*v1) = 4;
}
break;
case 4:
Heap_FreeToHeap(v1);
sub_02062C78(v0->unk_38);
return 1;
break;
case 3:
sub_0203E8E0(param0, 8971, NULL, NULL);
(*v1) = 4;
break;
}
return 0;
}
static BOOL sub_02069B00 (const int param0)
{
int v0;
if (param0 == 0) {
return 0;
}
v0 = 8200 - (param0 * 200);
if (v0 < 200) {
v0 = 200;
}
if (inline_020564D0(v0) == 0) {
return 1;
} else {
return 0;
}
}
void sub_02069B74 (UnkStruct_0203CDB0 * param0)
{
sub_02069BCC(&(param0->unk_94->unk_04));
sub_020698E4(param0, param0->unk_94);
}
int sub_02069B90 (UnkStruct_0203CDB0 * param0)
{
return param0->unk_94->unk_04;
}
void sub_02069B98 (UnkStruct_0203CDB0 * param0)
{
u8 * v0;
if (sub_0207D688(sub_0207D990(param0->unk_0C), 431, 1, 4) == 1) {
v0 = sub_0202D9C4(sub_0202D834(param0->unk_0C));
if ((*v0) < 50) {
(*v0)++;
}
}
}
static void sub_02069BCC (int * param0)
{
(*param0)++;
if ((*param0) > 999) {
(*param0) = 999;
}
}