pokeemerald-expansion/include/trainer_pools.h
hedara90 3c94074750
Add pool rules for Mega Stones and Z-Crystals (#7720)
Co-authored-by: Hedara <hedara90@gmail.com>
2025-09-12 21:04:36 +02:00

79 lines
2.1 KiB
C

#ifndef GUARD_TRAINER_POOLS_H
#define GUARD_TRAINER_POOLS_H
#include "pokemon.h"
#include "data.h"
#include "global.h"
#define POOL_SLOT_DISABLED 0xff
// Unlimited is set to 0 so that the default is unlimited
#define POOL_MEMBER_COUNT_UNLIMITED 0
#define POOL_MEMBER_COUNT_NONE 0xff
enum PoolRulesets {
POOL_RULESET_BASIC,
POOL_RULESET_DOUBLES,
POOL_RULESET_WEATHER_SINGLES,
POOL_RULESET_WEATHER_DOUBLES,
POOL_RULESET_SUPPORT_DOUBLES,
};
enum PoolPickFunctions {
POOL_PICK_DEFAULT,
POOL_PICK_LOWEST,
};
enum PoolPruneOptions {
POOL_PRUNE_NONE,
POOL_PRUNE_TEST,
POOL_PRUNE_RANDOM_TAG,
};
enum PoolTags {
// Lead and Ace has special handling, leave them be
POOL_TAG_LEAD = 0,
POOL_TAG_ACE = 1,
// No special handling for these
POOL_TAG_WEATHER_SETTER = 2,
POOL_TAG_WEATHER_ABUSER = 3,
POOL_TAG_SUPPORT = 4,
POOL_TAG_TAG6 = 5,
POOL_TAG_TAG7 = 6,
POOL_TAG_TAG8 = 7,
// Must be the last element
POOL_NUM_TAGS = 8
};
#define MON_POOL_TAG_LEAD 1 << POOL_TAG_LEAD
#define MON_POOL_TAG_ACE 1 << POOL_TAG_ACE
#define MON_POOL_TAG_WEATHER_SETTER 1 << POOL_TAG_WEATHER_SETTER
#define MON_POOL_TAG_WEATHER_ABUSER 1 << POOL_TAG_WEATHER_ABUSER
#define MON_POOL_TAG_SUPPORT 1 << POOL_TAG_SUPPORT
#define MON_POOL_TAG_TAG6 1 << POOL_TAG_TAG6
#define MON_POOL_TAG_TAG7 1 << POOL_TAG_TAG7
#define MON_POOL_TAG_TAG8 1 << POOL_TAG_TAG8
struct PoolRules
{
u8 speciesClause:1;
u8 excludeForms:1;
u8 itemClause:1;
u8 itemClauseExclusions:1;
u8 megaStoneClause:1;
u8 zCrystalClause:1;
u8 tagMaxMembers[POOL_NUM_TAGS];
bool8 tagRequired[POOL_NUM_TAGS];
};
struct PickFunctions
{
u32 (*LeadFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *);
u32 (*AceFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *);
u32 (*OtherFunction)(const struct Trainer *, u8 *, u32, u32, u32, struct PoolRules *);
};
void DoTrainerPartyPool(const struct Trainer *trainer, u32 *monIndices, u8 monsCount, u32 battleTypeFlags);
#endif