move dexnav flags, vars to config, add DEXNAV_ENABLED config to add static asserts that flags, vars are setup and dexnav cannot be used/accessed otherwise

This commit is contained in:
ghoulslash 2024-10-18 22:00:19 -04:00
parent 54484593b3
commit cb9f1f27a7
4 changed files with 32 additions and 10 deletions

View file

@ -1,9 +1,17 @@
#ifndef GUARD_CONFIG_DEXNAV_H
#define GUARD_CONFIG_DEXNAV_H
#define DEXNAV_ENABLED FALSE // Whether or not dexnav is enabled. If TRUE, flags/vars below must all be non-zero
#define USE_DEXNAV_SEARCH_LEVELS FALSE /* WARNING: POSSIBLY EXCEEDS SAVEBLOCK SPACE! REQUIRES 1 BYTE PER SPECIES */
// search parameters
// Flag/var defines
#define FLAG_SYS_DEXNAV_SEARCH 0 // Searching for mon. MUST BE DEFINED FOR DEXNAV TO WORK
#define FLAG_SYS_DEXNAV_GET 0 // Dexnav shows in start menu
#define FLAG_SYS_DETECTOR_MODE 0 // Allow player to find hidden mons
#define VAR_DEXNAV_SPECIES 0 // Registered dexnav species
#define VAR_DEXNAV_STEP_COUNTER 0 // Steps for finding hidden pokemon
// Search parameters
#define DEXNAV_TIMEOUT 15 // 15 seconds is the time out. Max of 1092 seconds allowed
#define SNEAKING_PROXIMITY 4 // Tile amount
#define CREEPING_PROXIMITY 2

View file

@ -1387,8 +1387,8 @@
#define FLAG_IS_CHAMPION (SYSTEM_FLAGS + 0x1F) // Seems to be related to linking.
#define FLAG_NURSE_UNION_ROOM_REMINDER (SYSTEM_FLAGS + 0x20)
#define FLAG_SYS_DEXNAV_SEARCH (SYSTEM_FLAGS + 0x21)
#define FLAG_SHINY_CREATION (SYSTEM_FLAGS + 0x22) // force creation of a shiny mon
#define FLAG_UNUSED_0x881 (SYSTEM_FLAGS + 0x21) // Unused Flag
#define FLAG_UNUSED_0x882 (SYSTEM_FLAGS + 0x22) // Unused Flag
#define FLAG_UNUSED_0x883 (SYSTEM_FLAGS + 0x23) // Unused Flag
#define FLAG_UNUSED_0x884 (SYSTEM_FLAGS + 0x24) // Unused Flag
#define FLAG_UNUSED_0x885 (SYSTEM_FLAGS + 0x25) // Unused Flag
@ -1402,8 +1402,8 @@
#define FLAG_SYS_SAFARI_MODE (SYSTEM_FLAGS + 0x2C)
#define FLAG_SYS_CRUISE_MODE (SYSTEM_FLAGS + 0x2D)
#define FLAG_SYS_DETECTOR_MODE (SYSTEM_FLAGS + 0x2E) // allow player to find hidden mons
#define FLAG_SYS_DEXNAV_GET (SYSTEM_FLAGS + 0x2F) // dexnav shows in start menu
#define FLAG_UNUSED_0x88E (SYSTEM_FLAGS + 0x2E)
#define FLAG_UNUSED_0x88F (SYSTEM_FLAGS + 0x2F)
#define FLAG_SYS_TV_HOME (SYSTEM_FLAGS + 0x30)
#define FLAG_SYS_TV_WATCH (SYSTEM_FLAGS + 0x31)

View file

@ -264,8 +264,8 @@
#define VAR_ROXANNE_CALL_STEP_COUNTER 0x40F4
#define VAR_SCOTT_BF_CALL_STEP_COUNTER 0x40F5
#define VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER 0x40F6
#define VAR_DEXNAV_SPECIES 0x40F7 // Registered dexnav species
#define VAR_DEXNAV_STEP_COUNTER 0x40F8 // steps for finding hidden pokemon
#define VAR_UNUSED_0x40F7 0x40F7 // Unused Var
#define VAR_UNUSED_0x40F8 0x40F8 // Unused Var
#define VAR_UNUSED_0x40F9 0x40F9 // Unused Var
#define VAR_UNUSED_0x40FA 0x40FA // Unused Var
#define VAR_UNUSED_0x40FB 0x40FB // Unused Var

View file

@ -59,6 +59,14 @@
#include "constants/region_map_sections.h"
#include "gba/m4a_internal.h"
#if DEXNAV_ENABLED
STATIC_ASSERT(FLAG_SYS_DEXNAV_SEARCH != 0);
STATIC_ASSERT(FLAG_SYS_DEXNAV_GET != 0);
STATIC_ASSERT(FLAG_SYS_DETECTOR_MODE != 0);
STATIC_ASSERT(VAR_DEXNAV_SPECIES != 0);
STATIC_ASSERT(VAR_DEXNAV_STEP_COUNTER != 0);
#endif
// Defines
enum WindowIds
{
@ -1264,7 +1272,6 @@ static void CreateDexNavWildMon(u16 species, u8 potential, u8 level, u8 abilityN
SetMonMoveSlot(mon, moves[i], i);
CalculateMonStats(mon);
FlagClear(FLAG_SHINY_CREATION);
}
// gets a random level of the species based on map data.
@ -2360,7 +2367,11 @@ static void DexNavGuiInit(MainCallback callback)
void Task_OpenDexNavFromStartMenu(u8 taskId)
{
if (!gPaletteFade.active)
if (DEXNAV_ENABLED == FALSE)
{ // must have it enabled to enter
DestroyTask(taskId);
}
else if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
DexNavGuiInit(CB2_ReturnToFieldWithOpenMenu);
@ -2525,7 +2536,10 @@ bool8 TryFindHiddenPokemon(void)
{
u16 *stepPtr = GetVarPointer(VAR_DEXNAV_STEP_COUNTER);
if (!FlagGet(FLAG_SYS_DETECTOR_MODE) || FlagGet(FLAG_SYS_DEXNAV_SEARCH) || GetFlashLevel() > 0)
if (DEXNAV_ENABLED == 0
|| !FlagGet(FLAG_SYS_DETECTOR_MODE)
|| FlagGet(FLAG_SYS_DEXNAV_SEARCH)
|| GetFlashLevel() > 0)
{
(*stepPtr) = 0;
return FALSE;