pmd-red/include/exclusive_pokemon.h
2025-11-24 01:55:24 -05:00

64 lines
1.8 KiB
C

#ifndef GUARD_EXCLUSIVE_POKEMON_H
#define GUARD_EXCLUSIVE_POKEMON_H
#include "constants/cutscenes.h"
#include "constants/tutorial_id.h"
#include "data_serializer.h"
#define NUM_EXCLUSIVE_POKEMON 12
// Size: 0x4
struct ExclusivePokemon
{
/* 0x0 */ s16 poke_id;
/* 0x2 */ bool8 in_rrt; // red rescue team
/* 0x3 */ bool8 in_brt; // blue rescue team
};
typedef struct ExclusivePokemonData
{
/* 0x00 */ bool8 unk0; // Initialized?
/* 0x04 */ u32 monSeenFlags[MONSTER_FLAGS_U32STORAGE];
/* 0x3C */ u32 cutsceneFlags[CUTSCENE_FLAGS_U32STORAGE];
/* 0x48 */ u32 tempCutsceneFlags[CUTSCENE_FLAGS_U32STORAGE];
/* 0x54 */ u32 tutorialFlags[TUTORIAL_FLAGS_U32STORAGE];
/* 0x58 */ bool8 exclusives[NUM_EXCLUSIVE_POKEMON];
} ExclusivePokemonData;
#define RED_EXCLUSIVE(species) \
{ \
.poke_id = species, \
.in_rrt = TRUE, \
.in_brt = FALSE, \
}
#define BLUE_EXCLUSIVE(species) \
{ \
.poke_id = species, \
.in_rrt = FALSE, \
.in_brt = TRUE, \
}
extern ExclusivePokemonData *gExclusiveMonPtr;
void LoadExclusivePokemon(void);
ExclusivePokemonData *GetExclusivePokemon(void);
void InitializeExclusivePokemon(void);
void SetTempCutsceneFlag(u8 flag);
void SetCutsceneFlag(u8 flag);
void FlushTempCutsceneFlags(void);
void UnsetCutsceneFlag(u8 flag);
void ClearTempCutsceneFlags(void);
bool8 sub_80980A4(void);
void SetMonSeenFlag(s16 monID);
bool8 GetCutsceneFlag(u8 flag);
bool8 GetMonSeenFlag(s16 monID);
void SetTutorialFlag(s32 flag);
bool8 GetTutorialFlag(s32 flag);
bool8 IsExclusivePokemonUnlocked(s32 pokeID);
void UnlockExclusivePokemon(s16 pokeID);
void WriteExclusivePokemon(DataSerializer *r0);
void ReadExclusivePokemon(DataSerializer *r0);
#endif // GUARD_EXCLUSIVE_POKEMON_H