Document src/event_data.c
This commit is contained in:
+47
-41
@@ -3,37 +3,45 @@
|
||||
|
||||
#include "constants/trainers.h"
|
||||
|
||||
#define FLAG_TEMP_1 0x001
|
||||
#define FLAG_TEMP_2 0x002
|
||||
#define FLAG_TEMP_3 0x003
|
||||
#define FLAG_TEMP_4 0x004
|
||||
#define FLAG_TEMP_5 0x005
|
||||
#define FLAG_TEMP_6 0x006
|
||||
#define FLAG_TEMP_7 0x007
|
||||
#define FLAG_TEMP_8 0x008
|
||||
#define FLAG_TEMP_9 0x009
|
||||
#define FLAG_TEMP_A 0x00A
|
||||
#define FLAG_TEMP_B 0x00B
|
||||
#define FLAG_TEMP_C 0x00C
|
||||
#define FLAG_TEMP_D 0x00D
|
||||
#define FLAG_TEMP_E 0x00E
|
||||
#define FLAG_TEMP_F 0x00F
|
||||
#define FLAG_TEMP_10 0x010
|
||||
#define FLAG_TEMP_11 0x011
|
||||
#define FLAG_TEMP_12 0x012
|
||||
#define FLAG_TEMP_13 0x013
|
||||
#define FLAG_TEMP_14 0x014
|
||||
#define FLAG_TEMP_15 0x015
|
||||
#define FLAG_TEMP_16 0x016
|
||||
#define FLAG_TEMP_17 0x017
|
||||
#define FLAG_TEMP_18 0x018
|
||||
#define FLAG_TEMP_19 0x019
|
||||
#define FLAG_TEMP_1A 0x01A
|
||||
#define FLAG_TEMP_1B 0x01B
|
||||
#define FLAG_TEMP_1C 0x01C
|
||||
#define FLAG_TEMP_1D 0x01D
|
||||
#define FLAG_TEMP_1E 0x01E
|
||||
#define FLAG_TEMP_1F 0x01F
|
||||
// Temporary Flags
|
||||
// These temporary flags are are cleared every time a map is loaded. They are used
|
||||
// for things like shortening an NPCs introduction text if the player already spoke
|
||||
// to them once.
|
||||
#define TEMP_FLAGS_START 0x0
|
||||
#define FLAG_TEMP_1 (TEMP_FLAGS_START + 0x01)
|
||||
#define FLAG_TEMP_2 (TEMP_FLAGS_START + 0x02)
|
||||
#define FLAG_TEMP_3 (TEMP_FLAGS_START + 0x03)
|
||||
#define FLAG_TEMP_4 (TEMP_FLAGS_START + 0x04)
|
||||
#define FLAG_TEMP_5 (TEMP_FLAGS_START + 0x05)
|
||||
#define FLAG_TEMP_6 (TEMP_FLAGS_START + 0x06)
|
||||
#define FLAG_TEMP_7 (TEMP_FLAGS_START + 0x07)
|
||||
#define FLAG_TEMP_8 (TEMP_FLAGS_START + 0x08)
|
||||
#define FLAG_TEMP_9 (TEMP_FLAGS_START + 0x09)
|
||||
#define FLAG_TEMP_A (TEMP_FLAGS_START + 0x0A)
|
||||
#define FLAG_TEMP_B (TEMP_FLAGS_START + 0x0B)
|
||||
#define FLAG_TEMP_C (TEMP_FLAGS_START + 0x0C)
|
||||
#define FLAG_TEMP_D (TEMP_FLAGS_START + 0x0D)
|
||||
#define FLAG_TEMP_E (TEMP_FLAGS_START + 0x0E)
|
||||
#define FLAG_TEMP_F (TEMP_FLAGS_START + 0x0F)
|
||||
#define FLAG_TEMP_10 (TEMP_FLAGS_START + 0x10)
|
||||
|
||||
// Used for obstacles (e.g. cut trees and rock smash rocks)
|
||||
#define FLAG_TEMP_11 (TEMP_FLAGS_START + 0x11)
|
||||
#define FLAG_TEMP_12 (TEMP_FLAGS_START + 0x12)
|
||||
#define FLAG_TEMP_13 (TEMP_FLAGS_START + 0x13)
|
||||
#define FLAG_TEMP_14 (TEMP_FLAGS_START + 0x14)
|
||||
#define FLAG_TEMP_15 (TEMP_FLAGS_START + 0x15)
|
||||
#define FLAG_TEMP_16 (TEMP_FLAGS_START + 0x16)
|
||||
#define FLAG_TEMP_17 (TEMP_FLAGS_START + 0x17)
|
||||
#define FLAG_TEMP_18 (TEMP_FLAGS_START + 0x18)
|
||||
#define FLAG_TEMP_19 (TEMP_FLAGS_START + 0x19)
|
||||
#define FLAG_TEMP_1A (TEMP_FLAGS_START + 0x1A)
|
||||
#define FLAG_TEMP_1B (TEMP_FLAGS_START + 0x1B)
|
||||
#define FLAG_TEMP_1C (TEMP_FLAGS_START + 0x1C)
|
||||
#define FLAG_TEMP_1D (TEMP_FLAGS_START + 0x1D)
|
||||
#define FLAG_TEMP_1E (TEMP_FLAGS_START + 0x1E)
|
||||
#define FLAG_TEMP_1F (TEMP_FLAGS_START + 0x1F)
|
||||
#define TEMP_FLAGS_END FLAG_TEMP_1F
|
||||
|
||||
#define FLAG_0x020 0x020
|
||||
#define FLAG_0x021 0x021
|
||||
@@ -1376,8 +1384,8 @@
|
||||
#define FLAG_SYS_NOT_SOMEONES_PC (SYS_FLAGS + 0x34)
|
||||
#define FLAG_0x835 (SYS_FLAGS + 0x35)
|
||||
#define FLAG_0x836 (SYS_FLAGS + 0x36)
|
||||
#define FLAG_0x837 (SYS_FLAGS + 0x37)
|
||||
#define FLAG_0x838 (SYS_FLAGS + 0x38)
|
||||
#define FLAG_SYS_RESET_RTC_ENABLE (SYS_FLAGS + 0x37)
|
||||
#define FLAG_0x838 (SYS_FLAGS + 0x38) // Set, never read
|
||||
#define FLAG_SYS_MYSTERY_GIFT_ENABLED (SYS_FLAGS + 0x39)
|
||||
#define FLAG_0x83A (SYS_FLAGS + 0x3A)
|
||||
#define FLAG_SYS_RIBBON_GET (SYS_FLAGS + 0x3B)
|
||||
@@ -1515,13 +1523,11 @@
|
||||
|
||||
#define FLAGS_COUNT (FLAG_0x8FF + 1)
|
||||
|
||||
// SPECIAL FLAGS (unknown purpose)
|
||||
#define SPECIAL_FLAGS_START 0x4000
|
||||
#define SPECIAL_FLAGS_COUNT 16
|
||||
#define FLAG_DONT_SHOW_MAP_NAME_POPUP 0x4000
|
||||
#define FLAG_DONT_TRANSITION_MUSIC 0x4001
|
||||
#define FLAG_SPECIAL_FLAG_0x4002 0x4002
|
||||
#define FLAG_SPECIAL_FLAG_0x4003 0x4003
|
||||
#define FLAG_SPECIAL_FLAG_0x4004 0x4004
|
||||
// Special Flags (Stored in EWRAM (sSpecialFlags, not in the SaveBlock)
|
||||
#define SPECIAL_FLAGS_START 0x4000
|
||||
#define FLAG_DONT_SHOW_MAP_NAME_POPUP (SPECIAL_FLAGS_START + 0x0)
|
||||
#define FLAG_DONT_TRANSITION_MUSIC (SPECIAL_FLAGS_START + 0x1)
|
||||
// FLAG_SPECIAL_FLAG_0x4002 - 0x407F also exist and are unused
|
||||
#define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F)
|
||||
|
||||
#endif // GUARD_CONSTANTS_FLAGS_H
|
||||
|
||||
+23
-21
@@ -3,23 +3,25 @@
|
||||
|
||||
#define VARS_START 0x4000
|
||||
|
||||
// Temporary variables. Reset on map load.
|
||||
#define VAR_TEMP_0 0x4000
|
||||
#define VAR_TEMP_1 0x4001
|
||||
#define VAR_TEMP_2 0x4002
|
||||
#define VAR_TEMP_3 0x4003
|
||||
#define VAR_TEMP_4 0x4004
|
||||
#define VAR_TEMP_5 0x4005
|
||||
#define VAR_TEMP_6 0x4006
|
||||
#define VAR_TEMP_7 0x4007
|
||||
#define VAR_TEMP_8 0x4008
|
||||
#define VAR_TEMP_9 0x4009
|
||||
#define VAR_TEMP_A 0x400A
|
||||
#define VAR_TEMP_B 0x400B
|
||||
#define VAR_TEMP_C 0x400C
|
||||
#define VAR_TEMP_D 0x400D
|
||||
#define VAR_TEMP_E 0x400E
|
||||
#define VAR_TEMP_F 0x400F
|
||||
// Temporary variables. Temp vars are cleared every time a map is loaded.
|
||||
#define TEMP_VARS_START 0x4000
|
||||
#define VAR_TEMP_0 (TEMP_VARS_START + 0x0)
|
||||
#define VAR_TEMP_1 (TEMP_VARS_START + 0x1)
|
||||
#define VAR_TEMP_2 (TEMP_VARS_START + 0x2)
|
||||
#define VAR_TEMP_3 (TEMP_VARS_START + 0x3)
|
||||
#define VAR_TEMP_4 (TEMP_VARS_START + 0x4)
|
||||
#define VAR_TEMP_5 (TEMP_VARS_START + 0x5)
|
||||
#define VAR_TEMP_6 (TEMP_VARS_START + 0x6)
|
||||
#define VAR_TEMP_7 (TEMP_VARS_START + 0x7)
|
||||
#define VAR_TEMP_8 (TEMP_VARS_START + 0x8)
|
||||
#define VAR_TEMP_9 (TEMP_VARS_START + 0x9)
|
||||
#define VAR_TEMP_A (TEMP_VARS_START + 0xA)
|
||||
#define VAR_TEMP_B (TEMP_VARS_START + 0xB)
|
||||
#define VAR_TEMP_C (TEMP_VARS_START + 0xC)
|
||||
#define VAR_TEMP_D (TEMP_VARS_START + 0xD)
|
||||
#define VAR_TEMP_E (TEMP_VARS_START + 0xE)
|
||||
#define VAR_TEMP_F (TEMP_VARS_START + 0xF)
|
||||
#define TEMP_VARS_END VAR_TEMP_F
|
||||
|
||||
// Object event graphics IDs which can be changed by
|
||||
// script commands.
|
||||
@@ -86,7 +88,7 @@
|
||||
#define VAR_0x4029 0x4029
|
||||
#define VAR_0x402A 0x402A
|
||||
#define VAR_0x402B 0x402B
|
||||
#define VAR_RESET_RTC_ENABLE 0x402C
|
||||
#define VAR_0x402C 0x402C
|
||||
#define VAR_0x402D 0x402D
|
||||
#define VAR_0x402E 0x402E
|
||||
|
||||
@@ -94,7 +96,7 @@
|
||||
|
||||
#define VAR_ICE_STEP_COUNT 0x4030
|
||||
#define VAR_STARTER_MON 0x4031 // 0: Bulbasaur, 1: Squirtle, 2: Charmander
|
||||
#define VAR_0x4032 0x4032
|
||||
#define VAR_RESET_RTC_ENABLE 0x4032
|
||||
#define VAR_ENIGMA_BERRY_AVAILABLE 0x4033
|
||||
|
||||
#define VAR_0x4034 0x4034
|
||||
@@ -105,7 +107,7 @@
|
||||
#define VAR_FANCLUB_LOSE_FAN_TIMER 0x4039
|
||||
#define VAR_ELEVATOR_FLOOR 0x403A
|
||||
#define VAR_RESORT_GORGEOUS_REWARD 0x403B
|
||||
#define VAR_0x403C 0x403C
|
||||
#define VAR_0x403C 0x403C // Set to 0x0302, never read
|
||||
#define VAR_HERACROSS_SIZE_RECORD 0x403D
|
||||
#define VAR_DEOXYS_INTERACTION_NUM 0x403E
|
||||
#define VAR_0x403F 0x403F
|
||||
@@ -158,7 +160,7 @@
|
||||
#define VAR_MAP_SCENE_PEWTER_CITY 0x406C
|
||||
#define VAR_0x406D 0x406D
|
||||
#define VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE 0x406E
|
||||
#define VAR_CABLE_CLUB_STATE 0x406F
|
||||
#define VAR_CABLE_CLUB_STATE 0x406F
|
||||
#define VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY 0x4070
|
||||
#define VAR_MAP_SCENE_CINNABAR_ISLAND 0x4071
|
||||
#define VAR_0x4072 0x4072
|
||||
|
||||
@@ -52,7 +52,7 @@ void ResetSpecialVars(void);
|
||||
void ResetMysteryEventFlags(void);
|
||||
void ResetMysteryEventVars(void);
|
||||
bool32 IsNationalPokedexEnabled(void);
|
||||
void sub_806E190(void);
|
||||
void EnableNationalPokedex_RSE(void);
|
||||
void ClearTempFieldEventData(void);
|
||||
|
||||
#endif // GUARD_EVENT_DATA_H
|
||||
|
||||
+2
-2
@@ -183,8 +183,8 @@ struct Pokedex
|
||||
{
|
||||
/*0x00*/ u8 order;
|
||||
/*0x01*/ u8 mode;
|
||||
/*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode
|
||||
/*0x03*/ u8 unknown2; // set to 0xB9 when national dex is first enabled
|
||||
/*0x02*/ u8 unused; // set to 0xDA, never read
|
||||
/*0x03*/ u8 nationalMagic; // set to 0xB9 when national dex is first enabled
|
||||
/*0x04*/ u32 unownPersonality; // set when you first see Unown
|
||||
/*0x08*/ u32 spindaPersonality; // set when you first see Spinda
|
||||
/*0x0C*/ u32 unknown3;
|
||||
|
||||
+44
-33
@@ -5,6 +5,14 @@
|
||||
|
||||
static bool8 IsFlagOrVarStoredInQuestLog(u16 idx, u8 a1);
|
||||
|
||||
#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
|
||||
#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1)
|
||||
#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1)
|
||||
|
||||
#define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte
|
||||
#define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8)
|
||||
#define TEMP_VARS_SIZE (NUM_TEMP_VARS * 2) // 1/2 var per byte
|
||||
|
||||
EWRAM_DATA u16 gSpecialVar_0x8000 = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_0x8001 = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_0x8002 = 0;
|
||||
@@ -25,7 +33,7 @@ EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_TextColor = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_PrevTextColor = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_0x8014 = 0;
|
||||
EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_COUNT] = {};
|
||||
EWRAM_DATA u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {};
|
||||
|
||||
u16 gLastQuestLogStoredFlagOrVarIdx;
|
||||
|
||||
@@ -33,15 +41,15 @@ extern u16 *const gSpecialVars[];
|
||||
|
||||
void InitEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags, 0, NUM_FLAG_BYTES);
|
||||
memset(gSaveBlock1Ptr->vars, 0, VARS_COUNT * 2);
|
||||
memset(sSpecialFlags, 0, SPECIAL_FLAGS_COUNT);
|
||||
memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags));
|
||||
memset(gSaveBlock1Ptr->vars, 0, sizeof(gSaveBlock1Ptr->vars));
|
||||
memset(sSpecialFlags, 0, sizeof(sSpecialFlags));
|
||||
}
|
||||
|
||||
void ClearTempFieldEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags, 0, 4);
|
||||
memset(gSaveBlock1Ptr->vars, 0, 16 * 2);
|
||||
memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE);
|
||||
memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE);
|
||||
FlagClear(FLAG_SYS_WHITE_FLUTE_ACTIVE);
|
||||
FlagClear(FLAG_SYS_BLACK_FLUTE_ACTIVE);
|
||||
FlagClear(FLAG_SYS_USE_STRENGTH);
|
||||
@@ -49,37 +57,41 @@ void ClearTempFieldEventData(void)
|
||||
FlagClear(FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER);
|
||||
}
|
||||
|
||||
void sub_806E168(void) // Unused
|
||||
// Unused
|
||||
static void DisableNationalPokedex_RSE(void)
|
||||
{
|
||||
u16 *ptr = GetVarPointer(VAR_0x403C);
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
|
||||
gSaveBlock2Ptr->pokedex.unused = 0;
|
||||
*ptr = 0;
|
||||
FlagClear(FLAG_0x838);
|
||||
}
|
||||
|
||||
void sub_806E190(void)
|
||||
// The magic numbers used here (0xDA and 0x0302) correspond to those
|
||||
// used in RSE for enabling the national Pokedex
|
||||
void EnableNationalPokedex_RSE(void)
|
||||
{
|
||||
// Note: the var, struct member, and flag are never used
|
||||
u16 *ptr = GetVarPointer(VAR_0x403C);
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0xDA;
|
||||
gSaveBlock2Ptr->pokedex.unused = 0xDA;
|
||||
*ptr = 0x0302;
|
||||
FlagSet(FLAG_0x838);
|
||||
}
|
||||
|
||||
bool32 sub_806E1C0(void) // Unused
|
||||
// Unused
|
||||
static bool32 IsNationalPokedexEnabled_RSE(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->pokedex.nationalMagic != 0xDA)
|
||||
return FALSE;
|
||||
if (VarGet(VAR_0x403C) != 0x0302)
|
||||
return FALSE;
|
||||
if (!FlagGet(FLAG_0x838))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
if (gSaveBlock2Ptr->pokedex.unused == 0xDA
|
||||
&& VarGet(VAR_0x403C) == 0x0302
|
||||
&& FlagGet(FLAG_0x838))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void DisableNationalPokedex(void)
|
||||
{
|
||||
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
|
||||
gSaveBlock2Ptr->pokedex.unknown2 = 0;
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
|
||||
*nationalDexVar = 0;
|
||||
FlagClear(FLAG_SYS_NATIONAL_DEX);
|
||||
}
|
||||
@@ -87,20 +99,19 @@ void DisableNationalPokedex(void)
|
||||
void EnableNationalPokedex(void)
|
||||
{
|
||||
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
|
||||
gSaveBlock2Ptr->pokedex.unknown2 = 0xB9;
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0xB9;
|
||||
*nationalDexVar = 0x6258;
|
||||
FlagSet(FLAG_SYS_NATIONAL_DEX);
|
||||
}
|
||||
|
||||
bool32 IsNationalPokedexEnabled(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->pokedex.unknown2 != 0xB9)
|
||||
return FALSE;
|
||||
if (VarGet(VAR_NATIONAL_DEX) != 0x6258)
|
||||
return FALSE;
|
||||
if (!FlagGet(FLAG_SYS_NATIONAL_DEX))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
if (gSaveBlock2Ptr->pokedex.nationalMagic == 0xB9
|
||||
&& VarGet(VAR_NATIONAL_DEX) == 0x6258
|
||||
&& FlagGet(FLAG_SYS_NATIONAL_DEX))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void DisableMysteryGift(void)
|
||||
@@ -153,21 +164,21 @@ void ResetMysteryEventVars(void)
|
||||
|
||||
void DisableResetRTC(void)
|
||||
{
|
||||
VarSet(VAR_0x4032, 0);
|
||||
FlagClear(FLAG_0x837);
|
||||
VarSet(VAR_RESET_RTC_ENABLE, 0);
|
||||
FlagClear(FLAG_SYS_RESET_RTC_ENABLE);
|
||||
}
|
||||
|
||||
void EnableResetRTC(void)
|
||||
{
|
||||
VarSet(VAR_0x4032, 0x0920);
|
||||
FlagSet(FLAG_0x837);
|
||||
VarSet(VAR_RESET_RTC_ENABLE, 0x0920);
|
||||
FlagSet(FLAG_SYS_RESET_RTC_ENABLE);
|
||||
}
|
||||
|
||||
bool32 CanResetRTC(void)
|
||||
{
|
||||
if (!FlagGet(FLAG_0x837))
|
||||
if (!FlagGet(FLAG_SYS_RESET_RTC_ENABLE))
|
||||
return FALSE;
|
||||
if (VarGet(VAR_0x4032) != 0x0920)
|
||||
if (VarGet(VAR_RESET_RTC_ENABLE) != 0x0920)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+1
-1
@@ -130,7 +130,7 @@ void NewGameInitData(void)
|
||||
ClearPlayerLinkBattleRecords();
|
||||
InitHeracrossSizeRecord();
|
||||
InitMagikarpSizeRecord();
|
||||
sub_806E190();
|
||||
EnableNationalPokedex_RSE();
|
||||
gPlayerPartyCount = 0;
|
||||
ZeroPlayerPartyMons();
|
||||
ResetPokemonStorageSystem();
|
||||
|
||||
Reference in New Issue
Block a user