mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-10-26 10:31:04 -05:00
Merge pull request #137 from froggestspirit/main
Pokeradar Documentation
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
35
include/pokeradar.h
Normal 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
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
489
src/pokeradar.c
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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, ¶m3->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user