From cb9f1f27a7ede0e80e9a75963c9b602a29291784 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 18 Oct 2024 22:00:19 -0400 Subject: [PATCH] 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 --- include/config/dexnav.h | 10 +++++++++- include/constants/flags.h | 8 ++++---- include/constants/vars.h | 4 ++-- src/dexnav.c | 20 +++++++++++++++++--- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/include/config/dexnav.h b/include/config/dexnav.h index 363c11eede..c5531e18d2 100644 --- a/include/config/dexnav.h +++ b/include/config/dexnav.h @@ -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 diff --git a/include/constants/flags.h b/include/constants/flags.h index aa4859164a..c245bd1a81 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -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) diff --git a/include/constants/vars.h b/include/constants/vars.h index 18f18a0d56..e79919c329 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -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 diff --git a/src/dexnav.c b/src/dexnav.c index 49e1b23bae..7e652590c4 100644 --- a/src/dexnav.c +++ b/src/dexnav.c @@ -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;