From 1ad40453160d7362e838c640cf5d93bc69729a8c Mon Sep 17 00:00:00 2001 From: FroggestSpirit Date: Wed, 31 Jan 2024 19:15:28 -0500 Subject: [PATCH 1/2] Initial pokeradar documentation --- include/overlay006/ov6_022430C4.h | 2 +- include/pokeradar.h | 26 + include/struct_decls/struct_0206942C_decl.h | 2 +- include/struct_defs/struct_0203CDB0.h | 2 +- include/unk_0206940C.h | 26 - platinum.us/main.lsf | 2 +- src/meson.build | 2 +- src/overlay005/ov5_021D0D80.c | 4 +- src/overlay005/ov5_021D1C30.c | 4 +- src/overlay006/ov6_02240C9C.c | 20 +- src/overlay006/ov6_022430C4.c | 13 +- src/overlay053/ov53_022561C0.c | 4 +- src/pokeradar.c | 590 +++++++++++++++++++ src/unk_0203CC84.c | 8 +- src/unk_0203F6C4.c | 4 +- src/unk_02050A74.c | 30 +- src/unk_020530C8.c | 4 +- src/unk_020553DC.c | 4 +- src/unk_020683F4.c | 8 +- src/unk_0206940C.c | 602 -------------------- 20 files changed, 672 insertions(+), 685 deletions(-) create mode 100644 include/pokeradar.h delete mode 100644 include/unk_0206940C.h create mode 100644 src/pokeradar.c delete mode 100644 src/unk_0206940C.c diff --git a/include/overlay006/ov6_022430C4.h b/include/overlay006/ov6_022430C4.h index 3cdd0be7eb..4518b01b0e 100644 --- a/include/overlay006/ov6_022430C4.h +++ b/include/overlay006/ov6_022430C4.h @@ -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 diff --git a/include/pokeradar.h b/include/pokeradar.h new file mode 100644 index 0000000000..cfaea0f473 --- /dev/null +++ b/include/pokeradar.h @@ -0,0 +1,26 @@ +#ifndef POKEPLATINUM_POKERADAR_H +#define POKEPLATINUM_POKERADAR_H + +#include "struct_decls/struct_0203CDB0_decl.h" +#include "struct_decls/struct_020508D4_decl.h" +#include "struct_decls/struct_0206942C_decl.h" + +RadarChain * CreateRadarChain(const int param0); +void FreeRadarChain(RadarChain * chain); +void ClearRadarChain(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 diff --git a/include/struct_decls/struct_0206942C_decl.h b/include/struct_decls/struct_0206942C_decl.h index d4859456db..5c6364cf29 100644 --- a/include/struct_decls/struct_0206942C_decl.h +++ b/include/struct_decls/struct_0206942C_decl.h @@ -1,6 +1,6 @@ #ifndef POKEPLATINUM_STRUCT_0206942C_DECL_H #define POKEPLATINUM_STRUCT_0206942C_DECL_H -typedef struct UnkStruct_0206942C_t UnkStruct_0206942C; +typedef struct RadarChain_t RadarChain; #endif // POKEPLATINUM_STRUCT_0206942C_DECL_H diff --git a/include/struct_defs/struct_0203CDB0.h b/include/struct_defs/struct_0203CDB0.h index c4ef5f0c14..43c799adb6 100644 --- a/include/struct_defs/struct_0203CDB0.h +++ b/include/struct_defs/struct_0203CDB0.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; diff --git a/include/unk_0206940C.h b/include/unk_0206940C.h deleted file mode 100644 index b9a3863f53..0000000000 --- a/include/unk_0206940C.h +++ /dev/null @@ -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 diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index b00b762dfe..05f9d00674 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -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 diff --git a/src/meson.build b/src/meson.build index a1f8afa532..b4454a3f06 100644 --- a/src/meson.build +++ b/src/meson.build @@ -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', diff --git a/src/overlay005/ov5_021D0D80.c b/src/overlay005/ov5_021D0D80.c index 432508c447..bf723f47ad 100644 --- a/src/overlay005/ov5_021D0D80.c +++ b/src/overlay005/ov5_021D0D80.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); + ClearRadarChain(param0->chain); sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1); sub_0203A418(param0); diff --git a/src/overlay005/ov5_021D1C30.c b/src/overlay005/ov5_021D1C30.c index 84acb35afb..b0fb77c270 100644 --- a/src/overlay005/ov5_021D1C30.c +++ b/src/overlay005/ov5_021D1C30.c @@ -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; } diff --git a/src/overlay006/ov6_02240C9C.c b/src/overlay006/ov6_02240C9C.c index 1cd0cace76..6adc5bc335 100644 --- a/src/overlay006/ov6_02240C9C.c +++ b/src/overlay006/ov6_02240C9C.c @@ -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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(param0->chain); } } diff --git a/src/overlay006/ov6_022430C4.c b/src/overlay006/ov6_022430C4.c index ea5c317481..4a79d702ed 100644 --- a/src/overlay006/ov6_022430C4.c +++ b/src/overlay006/ov6_022430C4.c @@ -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) diff --git a/src/overlay053/ov53_022561C0.c b/src/overlay053/ov53_022561C0.c index 73b875e683..46c8c8b7cb 100644 --- a/src/overlay053/ov53_022561C0.c +++ b/src/overlay053/ov53_022561C0.c @@ -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) { diff --git a/src/pokeradar.c b/src/pokeradar.c new file mode 100644 index 0000000000..19d4c41420 --- /dev/null +++ b/src/pokeradar.c @@ -0,0 +1,590 @@ +#include +#include + +#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" + +#define NUM_GRASS_PATCHES 4 +#define RADAR_BATTERY_STEPS 50 + +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_t { + 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 * CreateRadarChain (const int param0) { + RadarChain * chain; + + chain = Heap_AllocFromHeap(param0, sizeof(RadarChain)); + + sub_0201CFEC(FX32_ONE * 16, FX32_ONE * 8, FX32_ONE * 16, &chain->unk_BC); + return chain; +} + +void FreeRadarChain (RadarChain * chain) { + Heap_FreeToHeap(chain); +} + +void ClearRadarChain (RadarChain * chain) { + u8 patchRing; + + chain->count = 0; + chain->shakeType = 0; + 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[0]), sizeof(GrassPatch) * 4); + + for (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 patchRing; + u8 v1, v2; + u8 v3; + u8 v4; + int v5, v6; + u8 v7; + const VecFx32 * v8; + u8 ringTileCount[4] = { // Number of tiles in each ring of the radar. Lowest being the most outer ring + 32, 24, 16, 8 + }; + + v8 = sub_0205EAFC(param0->unk_3C); + + v7 = 0; + + for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { + BOOL v10; + + 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; + } + } + + v10 = CheckTileIsGrass(param0, v8->y, param1, param2, v5, v6, &chain->patch[patchRing]); + + if (v10) { + v7++; + } + } + + if (v7 == 0) { + ClearRadarChain(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) { + u8 patchRing; + + for (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 = 0; + } else { + chain->patch[patchRing].shakeType = 1; + } + + 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) +{ + u8 patchRing; + + for (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 == 0) { + 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; + u8 patchRing; + + v0 = 0; + + for (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 1; + } + + return 0; +} + +BOOL sub_020696DC (const int param0, const int param1, UnkStruct_0203CDB0 * param2, RadarChain * chain, int * param4, BOOL * param5, BOOL * param6) +{ + u8 patchRing; + BOOL continueChain; + int shakeType; + + *param5 = 0; + *param6 = 0; + + if (!sub_020698AC(chain, param0, param1, &patchRing)) { + return 0; + } + + chain->unk_18 = 1; + + continueChain = chain->patch[patchRing].continueChain; + 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 1; + } else { + *param4 = shakeType; + } + } else { + *param4 = shakeType; + chain->unk_14 = 0; + + chain->unk_D0 = sub_0206994C(param2); + } + + chain->shakeType = *param4; + + return 1; +} + +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; + + v3 = 0; + + for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { + patch = &(param0->chain->patch[patchRing]); + + if (patch->active == 0) { + v3++; + } + } + + if (v3 == 4) { + ClearRadarChain(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, v1; + u8 v2; + + v0 = (param2 - (9 / 2)) + param4; + v1 = (param3 - (9 / 2)) + param5; + + patch->unk_00 = v0; + patch->unk_04 = v1; + + 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 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) { + patch->active = FALSE; + return 0; + } + } + + 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) +{ + u8 patchRing; + + for (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 1; + } + } + } + + return 0; +} + +static void sub_020698E4 (UnkStruct_0203CDB0 * param0, RadarChain * chain) +{ + UnkStruct_020698E4 * v0; + int v1; + int v2; + + v0 = sub_0202D830(sub_0202D834(param0->unk_0C)); + 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 (v2 = 0; v2 < 3; v2++) { + if (v0->unk_00[(2 - v2)].unk_02 == chain->count) { + chain->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 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 == 0x1) { // If the battle resulted in fainting the mon, use the regular rates + rates = ratesNormal; + } else if (battleResult == 0x4) { // 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: + { + u8 * v2; + + sub_02062C48(v0->unk_38); + + 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 { + int v3, v4; + + (*v2) = 0; + + v3 = sub_0205EABC(v0->unk_3C); + 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(1150); + (*v1) = 2; + break; + case 2: + if (sub_02069690(v0->chain)) { + (*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 CheckPatchShiny (const int chianCount) { + int rate; + + if (chianCount == 0) { + return FALSE; + } + + rate = 8200 - (chianCount * 200); + + if (rate < 200) { + rate = 200; + } + + if (inline_020564D0(rate) == 0) { + 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; + } +} diff --git a/src/unk_0203CC84.c b/src/unk_0203CC84.c index eda0ab8770..ca3234ebb9 100644 --- a/src/unk_0203CC84.c +++ b/src/unk_0203CC84.c @@ -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 = CreateRadarChain(11); - sub_02069434(v1->unk_94); + ClearRadarChain(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); + FreeRadarChain(v0->chain); sub_0209ACDC(v0->unk_B4); sub_0209C388(v0->unk_BC); diff --git a/src/unk_0203F6C4.c b/src/unk_0203F6C4.c index e963bd8616..974bfc7404 100644 --- a/src/unk_0203F6C4.c +++ b/src/unk_0203F6C4.c @@ -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); + ClearRadarChain(param0->unk_34->chain); { int v0; diff --git a/src/unk_02050A74.c b/src/unk_02050A74.c index 7e2ca5f1ee..afbc610f51 100644 --- a/src/unk_02050A74.c +++ b/src/unk_02050A74.c @@ -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); + ClearRadarChain(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); + ClearRadarChain(v0->chain); } } else { - sub_02069434(v0->unk_94); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(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); + ClearRadarChain(v2->chain); v1 = sub_02051D8C(11, (0x0 | 0x0)); sub_02052314(v1, v2); diff --git a/src/unk_020530C8.c b/src/unk_020530C8.c index dd57888036..cbde79cfae 100644 --- a/src/unk_020530C8.c +++ b/src/unk_020530C8.c @@ -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); + ClearRadarChain(v1->chain); (v2->unk_00)++; break; case 2: diff --git a/src/unk_020553DC.c b/src/unk_020553DC.c index 3c22e64821..cbab58dcee 100644 --- a/src/unk_020553DC.c +++ b/src/unk_020553DC.c @@ -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; } diff --git a/src/unk_020683F4.c b/src/unk_020683F4.c index 938f9f37f2..5b67628f4c 100644 --- a/src/unk_020683F4.c +++ b/src/unk_020683F4.c @@ -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); + ClearRadarChain(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; } diff --git a/src/unk_0206940C.c b/src/unk_0206940C.c deleted file mode 100644 index 3fa4e1ec77..0000000000 --- a/src/unk_0206940C.c +++ /dev/null @@ -1,602 +0,0 @@ -#include -#include - -#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; - } -} From 2039f30af635adfe9e435d7f51cb8778c4ecbe39 Mon Sep 17 00:00:00 2001 From: froggestpsirit Date: Sat, 3 Feb 2024 11:21:06 -0500 Subject: [PATCH 2/2] Pokeradar cleanup --- include/constants/sdat.h | 2 + include/pokeradar.h | 45 +-- include/struct_decls/struct_0206942C_decl.h | 6 - include/struct_defs/struct_0203CDB0.h | 4 +- src/overlay005/ov5_021D0D80.c | 2 +- src/overlay006/ov6_02240C9C.c | 10 +- src/pokeradar.c | 321 +++++++------------- src/unk_0203CC84.c | 6 +- src/unk_0203F6C4.c | 2 +- src/unk_02050A74.c | 16 +- src/unk_020530C8.c | 2 +- src/unk_020683F4.c | 2 +- 12 files changed, 161 insertions(+), 257 deletions(-) delete mode 100644 include/struct_decls/struct_0206942C_decl.h diff --git a/include/constants/sdat.h b/include/constants/sdat.h index 207782dd43..9fb552f9ff 100644 --- a/include/constants/sdat.h +++ b/include/constants/sdat.h @@ -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, diff --git a/include/pokeradar.h b/include/pokeradar.h index cfaea0f473..64f7a1030b 100644 --- a/include/pokeradar.h +++ b/include/pokeradar.h @@ -3,24 +3,33 @@ #include "struct_decls/struct_0203CDB0_decl.h" #include "struct_decls/struct_020508D4_decl.h" -#include "struct_decls/struct_0206942C_decl.h" -RadarChain * CreateRadarChain(const int param0); -void FreeRadarChain(RadarChain * chain); -void ClearRadarChain(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); +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 diff --git a/include/struct_decls/struct_0206942C_decl.h b/include/struct_decls/struct_0206942C_decl.h deleted file mode 100644 index 5c6364cf29..0000000000 --- a/include/struct_decls/struct_0206942C_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_0206942C_DECL_H -#define POKEPLATINUM_STRUCT_0206942C_DECL_H - -typedef struct RadarChain_t RadarChain; - -#endif // POKEPLATINUM_STRUCT_0206942C_DECL_H diff --git a/include/struct_defs/struct_0203CDB0.h b/include/struct_defs/struct_0203CDB0.h index 43c799adb6..9ded295b53 100644 --- a/include/struct_defs/struct_0203CDB0.h +++ b/include/struct_defs/struct_0203CDB0.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; - RadarChain * chain; + RadarChain *chain; UnkStruct_0207D99C * unk_98; UnkStruct_0202B628 * unk_9C; UnkStruct_ov5_021EF300 * unk_A0; diff --git a/src/overlay005/ov5_021D0D80.c b/src/overlay005/ov5_021D0D80.c index 41348183ca..473b4da2db 100644 --- a/src/overlay005/ov5_021D0D80.c +++ b/src/overlay005/ov5_021D0D80.c @@ -448,7 +448,7 @@ static BOOL ov5_021D11CC (UnkStruct_0203CDB0 * param0) } { - ClearRadarChain(param0->chain); + RadarChain_Clear(param0->chain); sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1); sub_0203A418(param0); diff --git a/src/overlay006/ov6_02240C9C.c b/src/overlay006/ov6_02240C9C.c index 4a40011f04..e1034493e9 100644 --- a/src/overlay006/ov6_02240C9C.c +++ b/src/overlay006/ov6_02240C9C.c @@ -314,7 +314,7 @@ BOOL ov6_02240D5C (UnkStruct_0203CDB0 * param0) sub_02052314(v0, param0); ov6_0224239C(v14.unk_00, v17, v0); - ClearRadarChain(param0->chain); + 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); - ClearRadarChain(param0->chain); + 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); - ClearRadarChain(param0->chain); + RadarChain_Clear(param0->chain); return 1; } else { return 0; @@ -789,7 +789,7 @@ static BOOL ov6_02241674 (UnkStruct_0203CDB0 * param0, Pokemon * param1, BattleP v0 = ov6_02241DC4(param1, 0xff, param5, param4, 0, 1, param2); if (v0) { - ClearRadarChain(param0->chain); + RadarChain_Clear(param0->chain); } } @@ -1355,7 +1355,7 @@ static BOOL ov6_02241F7C (UnkStruct_0203CDB0 * param0, Pokemon * param1, const U v2 = param7; sub_02069B74(param0); } else { - ClearRadarChain(param0->chain); + RadarChain_Clear(param0->chain); } } diff --git a/src/pokeradar.c b/src/pokeradar.c index 19d4c41420..becb5d61ee 100644 --- a/src/pokeradar.c +++ b/src/pokeradar.c @@ -28,8 +28,8 @@ #include "overlay005/ov5_021F2D20.h" #include "overlay006/ov6_022430C4.h" -#define NUM_GRASS_PATCHES 4 -#define RADAR_BATTERY_STEPS 50 +#include "constants/battle.h" +#include "constants/sdat.h" typedef struct { int unk_00; @@ -38,11 +38,11 @@ typedef struct { BOOL active; BOOL continueChain; BOOL shiny; - UnkStruct_ov101_021D5D90 * unk_18; + UnkStruct_ov101_021D5D90 *unk_18; VecFx32 position; } GrassPatch; -typedef struct RadarChain_t { +typedef struct RadarChain { int shakeType; int count; int species; @@ -55,71 +55,56 @@ typedef struct RadarChain_t { 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 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 * CreateRadarChain (const int param0) { - RadarChain * chain; - - chain = Heap_AllocFromHeap(param0, sizeof(RadarChain)); +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 FreeRadarChain (RadarChain * chain) { +void RadarChain_Free (RadarChain *chain) { Heap_FreeToHeap(chain); } -void ClearRadarChain (RadarChain * chain) { - u8 patchRing; - +void RadarChain_Clear (RadarChain *chain) { chain->count = 0; - chain->shakeType = 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[0]), sizeof(GrassPatch) * 4); - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { + 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 patchRing; +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; - const VecFx32 * v8; - u8 ringTileCount[4] = { // Number of tiles in each ring of the radar. Lowest being the most outer ring + u8 ringTileCount[NUM_GRASS_PATCHES] = { // Number of tiles in each ring of the radar. Lowest being the most outer ring 32, 24, 16, 8 }; - v8 = sub_0205EAFC(param0->unk_3C); - + const VecFx32 *v8 = sub_0205EAFC(param0->unk_3C); v7 = 0; - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { - BOOL v10; - + 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) { @@ -131,9 +116,7 @@ BOOL RadarSpawnPatches (UnkStruct_0203CDB0 * param0, const int param1, const int } else { GF_ASSERT(v3 >= (v1 * 2)); v4 = v3 - (v1 * 2); - v6 = patchRing + (v4 / 2) + 1; - if (v4 % 2 == 0) { v5 = patchRing; } else { @@ -141,16 +124,14 @@ BOOL RadarSpawnPatches (UnkStruct_0203CDB0 * param0, const int param1, const int } } - v10 = CheckTileIsGrass(param0, v8->y, param1, param2, v5, v6, &chain->patch[patchRing]); - + BOOL v10 = CheckTileIsGrass(param0, v8->y, param1, param2, v5, v6, &chain->patch[patchRing]); if (v10) { v7++; } } if (v7 == 0) { - ClearRadarChain(chain); - + RadarChain_Clear(chain); sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1); } else { chain->active = TRUE; @@ -159,43 +140,34 @@ BOOL RadarSpawnPatches (UnkStruct_0203CDB0 * param0, const int param1, const int return chain->active; } -void SetupGrassPatches (UnkStruct_0203CDB0 * param0, const int param1, RadarChain * chain) { - u8 patchRing; - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { +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 = 0; + chain->patch[patchRing].shakeType = PATCH_SHAKE_SOFT; } else { - chain->patch[patchRing].shakeType = 1; + 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) -{ - u8 patchRing; - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { +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 == 0) { + 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); @@ -207,14 +179,10 @@ void sub_02069638 (UnkStruct_0203CDB0 * param0, RadarChain * chain) } } -BOOL sub_02069690 (RadarChain * chain) -{ - u8 v0; - u8 patchRing; +BOOL sub_02069690 (RadarChain *chain) { + u8 v0 = 0; - v0 = 0; - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { + 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); @@ -227,132 +195,105 @@ BOOL sub_02069690 (RadarChain * chain) } if (v0 >= 4) { - return 1; + return TRUE; } - return 0; + return FALSE; } -BOOL sub_020696DC (const int param0, const int param1, UnkStruct_0203CDB0 * param2, RadarChain * chain, int * param4, BOOL * param5, BOOL * param6) -{ +BOOL sub_020696DC (const int param0, const int param1, UnkStruct_0203CDB0 *param2, RadarChain *chain, int *param4, BOOL *param5, BOOL *param6) { u8 patchRing; - BOOL continueChain; - int shakeType; - *param5 = 0; *param6 = 0; if (!sub_020698AC(chain, param0, param1, &patchRing)) { - return 0; + return FALSE; } chain->unk_18 = 1; - - continueChain = chain->patch[patchRing].continueChain; - shakeType = chain->patch[patchRing].shakeType; + 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 1; + *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 1; + return TRUE; } -void SetRadarMon (RadarChain * chain, const int species, const int level) { +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; +void GetRadarMon (RadarChain *chain, int *species, int *level) { + *species = chain->species; + *level = chain->level; } -const BOOL sub_02069798 (const RadarChain * chain) -{ +const BOOL sub_02069798 (const RadarChain *chain) { return chain->unk_18; } -void sub_0206979C (UnkStruct_0203CDB0 * param0) -{ +void sub_0206979C (UnkStruct_0203CDB0 *param0) { BOOL v0; - GrassPatch * patch; + GrassPatch *patch; int patchRing; - if ((!param0->chain->active) || (param0->unk_10 != NULL)) { + 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)) { + if (patch->active && !v0) { patch->active = FALSE; } } - { - int v3; - - v3 = 0; - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { - patch = &(param0->chain->patch[patchRing]); - - if (patch->active == 0) { - v3++; - } + int v3 = 0; + for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { + patch = &(param0->chain->patch[patchRing]); + if (patch->active == 0) { + v3++; } + } - if (v3 == 4) { - ClearRadarChain(param0->chain); - - sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1); - } + if (v3 == 4) { + RadarChain_Clear(param0->chain); + sub_02055554(param0, sub_02055428(param0, param0->unk_1C->unk_00), 1); } } -BOOL GetRadarChainActive (const RadarChain * chain) { +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, v1; - u8 v2; - - v0 = (param2 - (9 / 2)) + param4; - v1 = (param3 - (9 / 2)) + param5; - +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; - - v2 = sub_02054F94(param0, v0, 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); @@ -362,22 +303,14 @@ static BOOL CheckTileIsGrass (UnkStruct_0203CDB0 * param0, const fx32 param1, co return FALSE; } - { - 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) { - patch->active = FALSE; - return 0; - } + 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; @@ -385,57 +318,42 @@ static BOOL CheckTileIsGrass (UnkStruct_0203CDB0 * param0, const fx32 param1, co } } -static BOOL sub_020698AC (const RadarChain * chain, const int param1, const int param2, u8 * param3) -{ - u8 patchRing; - - for (patchRing = 0; patchRing < NUM_GRASS_PATCHES; patchRing++) { +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 1; + return TRUE; } } } - - return 0; + return FALSE; } -static void sub_020698E4 (UnkStruct_0203CDB0 * param0, RadarChain * chain) -{ - UnkStruct_020698E4 * v0; - int v1; - int v2; - - v0 = sub_0202D830(sub_0202D834(param0->unk_0C)); - v1 = v0->unk_00[chain->unk_D0].unk_02; +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 (v2 = 0; v2 < 3; v2++) { + 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(0); + GF_ASSERT(FALSE); } } } -static u8 sub_0206994C (UnkStruct_0203CDB0 * param0) -{ - UnkStruct_020698E4 * v0; +static u8 sub_0206994C (UnkStruct_0203CDB0 *param0) { u8 v1; BOOL v2; - - v0 = sub_0202D830(sub_0202D834(param0->unk_0C)); + UnkStruct_020698E4 *v0 = sub_0202D830(sub_0202D834(param0->unk_0C)); for (v1 = 0; v1 < 3; v1++) { if (v0->unk_00[v1].unk_00 == 0) { @@ -444,7 +362,6 @@ static u8 sub_0206994C (UnkStruct_0203CDB0 * param0) } (v0->unk_00[0].unk_02 < v0->unk_00[1].unk_02) ? (v2 = 1) : (v2 = 0); - if (v2) { v1 = 0; } else { @@ -452,7 +369,6 @@ static u8 sub_0206994C (UnkStruct_0203CDB0 * param0) } (v0->unk_00[v1].unk_02 < v0->unk_00[2].unk_02) ? (v2 = 1) : (v2 = 0); - if (!v2) { v1 = 2; } @@ -461,13 +377,13 @@ static u8 sub_0206994C (UnkStruct_0203CDB0 * param0) } static BOOL CheckPatchContinueChain (const u8 patchRing, const int battleResult) { - u8 * rates; + u8 *rates; u8 ratesNormal[4] = {88, 68, 48, 28}; u8 ratesBoosted[4] = {98, 78, 58, 38}; - if (battleResult == 0x1) { // If the battle resulted in fainting the mon, use the regular rates + if (battleResult == BATTLE_RESULT_WIN) { // If the battle resulted in fainting the mon, use the regular rates rates = ratesNormal; - } else if (battleResult == 0x4) { // If the battle resulted in a capture, use the boosted rates + } else if (battleResult == BATTLE_RESULT_CAPTURED_MON) { // If the battle resulted in a capture, use the boosted rates rates = ratesBoosted; } @@ -478,112 +394,95 @@ static BOOL CheckPatchContinueChain (const u8 patchRing, const int battleResult) } } -BOOL RefreshRadarChain (UnkStruct_020508D4 * param0) { - UnkStruct_0203CDB0 * v0 = sub_02050A60(param0); - int * v1 = sub_02050A64(param0); +BOOL RefreshRadarChain (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); + u8 *v2 = sub_0202D9C4(sub_0202D834(v0->unk_0C)); - v2 = sub_0202D9C4(sub_0202D834(v0->unk_0C)); - - if ((*v2) < RADAR_BATTERY_STEPS) { + if (*v2 < RADAR_BATTERY_STEPS) { sub_0203E8E0(param0, 8970, NULL, NULL); *(u16 *)(sub_0203F098(v0, 41)) = RADAR_BATTERY_STEPS - (*v2); - (*v1) = 4; + *v1 = 4; } else { - int v3, v4; - - (*v2) = 0; - - v3 = sub_0205EABC(v0->unk_3C); - v4 = sub_0205EAC8(v0->unk_3C); - + *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; + *v1 = 1; } else { - (*v1) = 3; + *v1 = 3; } } - } break; case 1: - Sound_PlayBGM(1150); - (*v1) = 2; + Sound_PlayBGM(SEQ_POKERADAR); + *v1 = 2; break; case 2: if (sub_02069690(v0->chain)) { - (*v1) = 4; + *v1 = 4; } break; case 4: Heap_FreeToHeap(v1); sub_02062C78(v0->unk_38); - return 1; + return TRUE; break; case 3: sub_0203E8E0(param0, 8971, NULL, NULL); - (*v1) = 4; + *v1 = 4; break; } - return 0; + return FALSE; } -static BOOL CheckPatchShiny (const int chianCount) { - int rate; - - if (chianCount == 0) { +static BOOL CheckPatchShiny (const int chainCount) { + if (!chainCount) { return FALSE; } - rate = 8200 - (chianCount * 200); - + int rate = 8200 - (chainCount * 200); if (rate < 200) { rate = 200; } - if (inline_020564D0(rate) == 0) { + if (!inline_020564D0(rate)) { return TRUE; } else { return FALSE; } } -void sub_02069B74 (UnkStruct_0203CDB0 * param0) -{ +void sub_02069B74 (UnkStruct_0203CDB0 *param0) { IncWithCap(&(param0->chain->count)); sub_020698E4(param0, param0->chain); } -int GetChainCount (UnkStruct_0203CDB0 * param0) { +int GetChainCount (UnkStruct_0203CDB0 *param0) { return param0->chain->count; } -void RadarChargeStep (UnkStruct_0203CDB0 * param0) { - u8 * v0; +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) { +static void IncWithCap (int *param0) { (*param0)++; - if ((*param0) > 999) { (*param0) = 999; } diff --git a/src/unk_0203CC84.c b/src/unk_0203CC84.c index ca3234ebb9..618991ddb4 100644 --- a/src/unk_0203CC84.c +++ b/src/unk_0203CC84.c @@ -184,9 +184,9 @@ static UnkStruct_0203CDB0 * sub_0203CDB0 (UnkStruct_020067E8 * param0) sub_0203A378(v1, 11); v1->unk_98 = sub_0207D99C(11); - v1->chain = CreateRadarChain(11); + v1->chain = RadarChain_Init(11); - ClearRadarChain(v1->chain); + 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); - FreeRadarChain(v0->chain); + RadarChain_Free(v0->chain); sub_0209ACDC(v0->unk_B4); sub_0209C388(v0->unk_BC); diff --git a/src/unk_0203F6C4.c b/src/unk_0203F6C4.c index 0c07f53ab1..8fcfaf8477 100644 --- a/src/unk_0203F6C4.c +++ b/src/unk_0203F6C4.c @@ -4769,7 +4769,7 @@ static BOOL sub_02042AB0 (UnkStruct_0203E724 * param0) static BOOL sub_02042AE0 (UnkStruct_0203E724 * param0) { - ClearRadarChain(param0->unk_34->chain); + RadarChain_Clear(param0->unk_34->chain); { int v0; diff --git a/src/unk_02050A74.c b/src/unk_02050A74.c index 73ddf4997e..5fb2292b35 100644 --- a/src/unk_02050A74.c +++ b/src/unk_02050A74.c @@ -399,7 +399,7 @@ static BOOL sub_02050EE0 (UnkStruct_020508D4 * param0) if (sub_02052868(v1->unk_10->unk_14) == 0) { sub_02050DFC(v1); - ClearRadarChain(v0->chain); + RadarChain_Clear(v0->chain); sub_02050924(param0, sub_02052B2C, NULL); return 0; } @@ -414,10 +414,10 @@ static BOOL sub_02050EE0 (UnkStruct_020508D4 * param0) if (GetRadarChainActive(v0->chain)) { if (sub_02069798(v0->chain)) { if ((!(v1->unk_10->unk_14 == 0x1)) && (!(v1->unk_10->unk_14 == 0x4))) { - ClearRadarChain(v0->chain); + RadarChain_Clear(v0->chain); } } else { - ClearRadarChain(v0->chain); + RadarChain_Clear(v0->chain); } } @@ -541,7 +541,7 @@ void sub_0205120C (UnkStruct_020508D4 * param0, int * param1) UnkStruct_0203CDB0 * v2; v2 = sub_02050A60(param0); - ClearRadarChain(v2->chain); + 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); - ClearRadarChain(v2->chain); + 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); - ClearRadarChain(v2->chain); + 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; } - ClearRadarChain(v3->chain); + 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); - ClearRadarChain(v2->chain); + RadarChain_Clear(v2->chain); v1 = sub_02051D8C(11, (0x0 | 0x0)); sub_02052314(v1, v2); diff --git a/src/unk_020530C8.c b/src/unk_020530C8.c index 801cfc273b..87026c872d 100644 --- a/src/unk_020530C8.c +++ b/src/unk_020530C8.c @@ -695,7 +695,7 @@ static BOOL sub_02053930 (UnkStruct_020508D4 * param0) sub_0205311C(v1, &v2->unk_04); sub_020533CC(v1); sub_020531C0(v1, 0); - ClearRadarChain(v1->chain); + RadarChain_Clear(v1->chain); (v2->unk_00)++; break; case 2: diff --git a/src/unk_020683F4.c b/src/unk_020683F4.c index 7845839e78..73e0eb5134 100644 --- a/src/unk_020683F4.c +++ b/src/unk_020683F4.c @@ -504,7 +504,7 @@ static BOOL sub_02068884 (UnkStruct_020508D4 * param0) ov5_021DFB54(v0->unk_3C, (1 << 1)); ov5_021DFB5C(v0->unk_3C); - ClearRadarChain(v0->chain); + RadarChain_Clear(v0->chain); } (*v1)++;