diff options
author | Cheng Hann Gan <chenghanngan.us@gmail.com> | 2021-09-09 19:22:48 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-09 16:22:48 -0700 |
commit | 8237e29a164211eb2ec4cd161eb4183cc1947fee (patch) | |
tree | 67dc502264b755dc620f56969f3bea68a40b17af /include | |
parent | 4eff1882443b0004d9c9fa4895cdfefdc356565f (diff) |
Defined more in-dungeon structs and enums (#53)
* Defined DungeonEntity
* Rename EntityType enums
* Revert EntityType rename
* Defined more in-dungeon structs and enums
* Added more dungeon global structs/enums
* Prefixed dungeonGlobalData with g
* Fixed compile errors
* Removed some CRLFs
* Fixed compile after merge
* Revert Makefile
* Rename DungeonEntityData.entityType
Co-authored-by: Seth Barberee <seth.barberee@gmail.com>
* Renamed symbols per PR comments
Co-authored-by: Cheng Hann Gan <chenghann_gan@ultimatesoftware.com>
Co-authored-by: Seth Barberee <seth.barberee@gmail.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/constants/ability.h | 84 | ||||
-rw-r--r-- | include/constants/direction.h | 16 | ||||
-rw-r--r-- | include/constants/dungeon.h | 106 | ||||
-rw-r--r-- | include/constants/dungeon_action.h | 44 | ||||
-rw-r--r-- | include/constants/iq_skill.h | 31 | ||||
-rw-r--r-- | include/constants/move.h | 474 | ||||
-rw-r--r-- | include/constants/status.h | 124 | ||||
-rw-r--r-- | include/constants/tactic.h | 19 | ||||
-rw-r--r-- | include/constants/trap.h | 28 | ||||
-rw-r--r-- | include/constants/type.h | 25 | ||||
-rw-r--r-- | include/dungeon_entity.h | 277 | ||||
-rw-r--r-- | include/dungeon_global_data.h | 93 | ||||
-rw-r--r-- | include/gUnknown_203B418.h | 47 | ||||
-rw-r--r-- | include/item.h | 19 | ||||
-rw-r--r-- | include/map.h | 61 | ||||
-rw-r--r-- | include/pokemon.h | 19 |
16 files changed, 1372 insertions, 95 deletions
diff --git a/include/constants/ability.h b/include/constants/ability.h new file mode 100644 index 0000000..27f87fc --- /dev/null +++ b/include/constants/ability.h @@ -0,0 +1,84 @@ +#ifndef GUARD_CONSTANTS_ABILITY_H +#define GUARD_CONSTANTS_ABILITY_H + +enum Ability +{ + ABILITY_STENCH = 0x1, + ABILITY_THICK_FAT = 0x2, + ABILITY_RAIN_DISH = 0x3, + ABILITY_DRIZZLE = 0x4, + ABILITY_ARENA_TRAP = 0x5, + ABILITY_INTIMIDATE = 0x6, + ABILITY_ROCK_HEAD = 0x7, + ABILITY_AIR_LOCK = 0x8, + ABILITY_HYPER_CUTTER = 0x9, + ABILITY_SHADOW_TAG = 0xA, + ABILITY_SPEED_BOOST = 0xB, + ABILITY_BATTLE_ARMOR = 0xC, + ABILITY_STURDY = 0xD, + ABILITY_SUCTION_CUPS = 0xE, + ABILITY_CLEAR_BODY = 0xF, + ABILITY_TORRENT = 0x10, + ABILITY_GUTS = 0x11, + ABILITY_ROUGH_SKIN = 0x12, + ABILITY_SHELL_ARMOR = 0x13, + ABILITY_NATURAL_CURE = 0x14, + ABILITY_DAMP = 0x15, + ABILITY_LIMBER = 0x16, + ABILITY_MAGNET_PULL = 0x17, + ABILITY_WHITE_SMOKE = 0x18, + ABILITY_SYNCHRONIZE = 0x19, + ABILITY_OVERGROW = 0x1A, + ABILITY_SWIFT_SWIM = 0x1B, + ABILITY_SAND_STREAM = 0x1C, + ABILITY_SAND_VEIL = 0x1D, + ABILITY_KEEN_EYE = 0x1E, + ABILITY_INNER_FOCUS = 0x1F, + ABILITY_STATIC = 0x20, + ABILITY_SHED_SKIN = 0x21, + ABILITY_HUGE_POWER = 0x22, + ABILITY_VOLT_ABSORB = 0x23, + ABILITY_WATER_ABSORB = 0x24, + ABILITY_FORECAST = 0x25, + ABILITY_SERENE_GRACE = 0x26, + ABILITY_POISON_POINT = 0x27, + ABILITY_TRACE = 0x28, + ABILITY_OBLIVIOUS = 0x29, + ABILITY_TRUANT = 0x2A, + ABILITY_RUN_AWAY = 0x2B, + ABILITY_STICKY_HOLD = 0x2C, + ABILITY_CLOUD_NINE = 0x2D, + ABILITY_ILLUMINATE = 0x2E, + ABILITY_EARLY_BIRD = 0x2F, + ABILITY_HUSTLE = 0x30, + ABILITY_DROUGHT = 0x31, + ABILITY_LIGHTNINGROD = 0x32, + ABILITY_COMPOUNDEYES = 0x33, + ABILITY_MARVEL_SCALE = 0x34, + ABILITY_WONDER_GUARD = 0x35, + ABILITY_INSOMNIA = 0x36, + ABILITY_LEVITATE = 0x37, + ABILITY_PLUS = 0x38, + ABILITY_PRESSURE = 0x39, + ABILITY_LIQUID_OOZE = 0x3A, + ABILITY_COLOR_CHANGE = 0x3B, + ABILITY_SOUNDPROOF = 0x3C, + ABILITY_EFFECT_SPORE = 0x3D, + ABILITY_FLAME_BODY = 0x3E, + ABILITY_MINUS = 0x3F, + ABILITY_OWN_TEMPO = 0x40, + ABILITY_MAGMA_ARMOR = 0x41, + ABILITY_WATER_VEIL = 0x42, + ABILITY_SWARM = 0x43, + ABILITY_CUTE_CHARM = 0x44, + ABILITY_IMMUNITY = 0x45, + ABILITY_BLAZE = 0x46, + ABILITY_PICKUP = 0x47, + ABILITY_FLASH_FIRE = 0x48, + ABILITY_VITAL_SPIRIT = 0x49, + ABILITY_CHLOROPHYLL = 0x4A, + ABILITY_PURE_POWER = 0x4B, + ABILITY_SHIELD_DUST = 0x4C +}; + +#endif diff --git a/include/constants/direction.h b/include/constants/direction.h new file mode 100644 index 0000000..5f2bfb3 --- /dev/null +++ b/include/constants/direction.h @@ -0,0 +1,16 @@ +#ifndef GUARD_CONSTANTS_DIRECTION_H +#define GUARD_CONSTANTS_DIRECTION_H + +enum Direction +{ + DIRECTION_SOUTH, + DIRECTION_SOUTHEAST, + DIRECTION_EAST, + DIRECTION_NORTHEAST, + DIRECTION_NORTH, + DIRECTION_NORTHWEST, + DIRECTION_WEST, + DIRECTION_SOUTHWEST +}; + +#endif diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h new file mode 100644 index 0000000..19f5340 --- /dev/null +++ b/include/constants/dungeon.h @@ -0,0 +1,106 @@ +#ifndef GUARD_CONSTANTS_DUNGEON_H +#define GUARD_CONSTANTS_DUNGEON_H + +enum Dungeon +{ + DUNGEON_TINY_WOODS = 0, + DUNGEON_THUNDERWAVE_CAVE = 1, + DUNGEON_MT_STEEL = 2, + DUNGEON_SINISTER_WOODS = 3, + DUNGEON_SILENT_CHASM = 4, + DUNGEON_MT_THUNDER = 5, + DUNGEON_MT_THUNDER_PEAK = 6, + DUNGEON_GREAT_CANYON = 7, + DUNGEON_LAPIS_CAVE = 8, + DUNGEON_MT_BLAZE = 9, + DUNGEON_MT_BLAZE_PEAK = 10, + DUNGEON_FROSTY_FOREST = 11, + DUNGEON_FROSTY_GROTTO = 12, + DUNGEON_MT_FREEZE = 13, + DUNGEON_MT_FREEZE_PEAK = 14, + DUNGEON_MAGMA_CAVERN = 15, + DUNGEON_MAGMA_CAVERN_PIT = 16, + DUNGEON_SKY_TOWER = 17, + DUNGEON_SKY_TOWER_SUMMIT = 18, + DUNGEON_STORMY_SEA = 19, + DUNGEON_SILVER_TRENCH = 20, + DUNGEON_METEOR_CAVE = 21, + DUNGEON_MT_FREEZE_PEAK_2 = 22, // Duplicate + DUNGEON_WESTERN_CAVE = 23, + DUNGEON_BOSS_3 = 24, + DUNGEON_BOSS_4 = 25, + DUNGEON_WISH_CAVE = 26, + DUNGEON_BURIED_RELIC = 27, + DUNGEON_PITFALL_VALLEY = 28, + DUNGEON_NORTHERN_RANGE = 29, + DUNGEON_BOSS_9 = 30, + DUNGEON_DESERT_REGION = 31, + DUNGEON_SOUTHERN_CAVERN = 32, + DUNGEON_WYVERN_HILL = 33, + DUNGEON_FIERY_FIELD = 34, + DUNGEON_NORTHWIND_FIELD = 35, + DUNGEON_SOLAR_CAVE = 36, + DUNGEON_LIGHTNING_FIELD = 37, + DUNGEON_DARKNIGHT_RELIC = 38, + DUNGEON_WONDROUS_SEA = 39, + DUNGEON_MURKY_CAVE = 40, + DUNGEON_GRAND_SEA = 41, + DUNGEON_UPROAR_FOREST = 42, + DUNGEON_ODDITY_CAVE = 43, + DUNGEON_REMAINS_ISLAND = 44, + DUNGEON_MARVELOUS_SEA = 45, + DUNGEON_FANTASY_STRAIT = 46, + DUNGEON_ROCK_PATH = 47, + DUNGEON_SNOW_PATH = 48, + DUNGEON_AUTOPILOT = 49, + DUNGEON_D50 = 50, + DUNGEON_D51 = 51, + DUNGEON_NORMAL_MAZE = 52, + DUNGEON_HOWLING_FOREST = 53, + DUNGEON_D54 = 54, + DUNGEON_POISON_MAZE = 55, + DUNGEON_WATERFALL_POND = 56, + DUNGEON_UNKNOWN_RELIC = 57, + DUNGEON_JOYOUS_TOWER = 58, + DUNGEON_FAR_OFF_SEA = 59, + DUNGEON_MT_FARAWAY = 60, + DUNGEON_D61 = 61, + DUNGEON_PURITY_FOREST = 62, + DUNGEON_OUT_ON_RESCUE = 63, + DUNGEON_JOIN_LOCATION_LEADER = 64, // Displays as "???". + DUNGEON_JOIN_LOCATION_PARTNER = 65, // Displays as "Tiny Woods". + DUNGEON_UNKNOWN_WORLD = 66, + DUNGEON_FROSTY_GROTTO_2 = 67, // Duplicate + DUNGEON_HOWLING_FOREST_2 = 68, // Duplicate + DUNGEON_POKEMON_SQUARE = 69, + DUNGEON_POKEMON_SQUARE_2 = 70, // Duplicate + DUNGEON_RESCUE_TEAM_BASE = 71, + DUNGEON_RESCUE_TEAM_BASE_2 = 72, // Duplicate + DUNGEON_AGB_SLOT = 73, + DUNGEON_JOIN_LOCATION_CLIENT_POKEMON = 74, + DUNGEON_NORMAL_MAZE_2 = 75, // Duplicate + DUNGEON_FIRE_MAZE = 76, + DUNGEON_WATER_MAZE = 77, + DUNGEON_GRASS_MAZE = 78, + DUNGEON_ELECTRIC_MAZE = 79, + DUNGEON_ICE_MAZE = 80, + DUNGEON_FIGHTING_MAZE = 81, + DUNGEON_GROUND_MAZE = 82, + DUNGEON_FLYING_MAZE = 83, + DUNGEON_PSYCHIC_MAZE = 84, + DUNGEON_POISON_MAZE_2 = 85, // Duplicate + DUNGEON_BUG_MAZE = 86, + DUNGEON_ROCK_MAZE = 87, + DUNGEON_GHOST_MAZE = 88, + DUNGEON_DRAGON_MAZE = 89, + DUNGEON_DARK_MAZE = 90, + DUNGEON_STEEL_MAZE = 91, + DUNGEON_TEAM_SHIFTY = 92, + DUNGEON_TEAM_CONSTRICTOR = 93, + DUNGEON_TEAM_HYDRO = 94, + DUNGEON_TEAM_RUMBLEROCK = 95, + DUNGEON_RESCUE_TEAM_2 = 96, + DUNGEON_RESCUE_TEAM_MAZE = 97, +}; + +#endif diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h new file mode 100644 index 0000000..f5e0290 --- /dev/null +++ b/include/constants/dungeon_action.h @@ -0,0 +1,44 @@ +#ifndef GUARD_CONSTANTS_DUNGEON_ACTION_H +#define GUARD_CONSTANTS_DUNGEON_ACTION_H + +enum DungeonAction +{ + DUNGEON_ACTION_WAIT = 0x1, + DUNGEON_ACTION_WALK = 0x2, + // Switching between Pokémon in the moves menu. + DUNGEON_ACTION_NEXT_POKEMON_MOVES = 0x6, + DUNGEON_ACTION_PREVIOUS_POKEMON_MOVES = 0x7, + DUNGEON_ACTION_PLACE_ITEM = 0x8, + // Some actions are different between the leader and AI-controlled Pokémon. + DUNGEON_ACTION_TAKE_ITEM_LEADER = 0x9, // Picking up an item underfoot. + DUNGEON_ACTION_THROW_ITEM_LEADER = 0xB, + DUNGEON_ACTION_CONSUME_ITEM_LEADER = 0xD, + DUNGEON_ACTION_USE_ITEM_LEADER = 0x12, + DUNGEON_ACTION_TALK_FIELD = 0x13, // Talking to another Pokémon by facing them and interacting. + DUNGEON_ACTION_USE_MOVE_LEADER = 0x14, + DUNGEON_ACTION_USE_MOVE_AI = 0x15, + DUNGEON_ACTION_STRUGGLE = 0x17, // Using the Struggle move. + DUNGEON_ACTION_CHECK_MOVES = 0x19, + DUNGEON_ACTION_CHANGE_TACTICS = 0x1A, + DUNGEON_ACTION_CHECK_POKEMON_SUMMARY = 0x1B, + DUNGEON_ACTION_TALK_MENU = 0x1C, // Talking to another Pokémon via the menu. + DUNGEON_ACTION_SET_MOVE = 0x1E, // Registering a move. + DUNGEON_ACTION_CONSUME_ITEM_AI = 0x23, + DUNGEON_ACTION_THROW_ITEM_AI = 0x24, + DUNGEON_ACTION_THROW_STRAIGHT_THROWN_ITEM_LEADER = 0x27, + DUNGEON_ACTION_USE_LINK_BOX = 0x2C, + DUNGEON_ACTION_GIVE_UP = 0x2E, + DUNGEON_ACTION_CHANGE_IQ_SKILLS = 0x30, + DUNGEON_ACTION_USE_ORB = 0x31, + DUNGEON_ACTION_REGULAR_ATTACK = 0x32, + DUNGEON_ACTION_UNSET_MOVE = 0x33, + DUNGEON_ACTION_GIVE_HELD_ITEM = 0x36, + DUNGEON_ACTION_TAKE_HELD_ITEM = 0x37, + DUNGEON_ACTION_HAVE_SECOND_THOUGHTS = 0x39, // Happens with invalid actions, like attempting to eat a non-consumable item. + DUNGEON_ACTION_SET_ITEM = 0x3C, + DUNGEON_ACTION_UNSET_ITEM = 0x3D, + DUNGEON_ACTION_TAKE_ITEM_AI = 0x3F, + DUNGEON_ACTION_THROW_ARC_THROWN_ITEM_LEADER = 0x41, // Throwing Gravelerocks and Geo Pebbles. +}; + +#endif diff --git a/include/constants/iq_skill.h b/include/constants/iq_skill.h new file mode 100644 index 0000000..759c350 --- /dev/null +++ b/include/constants/iq_skill.h @@ -0,0 +1,31 @@ +#ifndef GUARD_CONSTANTS_IQ_SKILL_H +#define GUARD_CONSTANTS_IQ_SKILL_H + +enum IQSkill +{ + IQ_SKILL_TYPE_ADVANTAGE_MASTER = 0x1, + IQ_SKILL_ITEM_CATCHER = 0x2, + IQ_SKILL_COURSE_CHECKER = 0x3, + IQ_SKILL_SURE_HIT_ATTACKER = 0x4, + IQ_SKILL_QUICK_DODGER = 0x5, + IQ_SKILL_PP_CHECKER = 0x6, + IQ_SKILL_NONTRAITOR = 0x7, + IQ_SKILL_STATUS_CHECKER = 0x8, + IQ_SKILL_EXP_GO_GETTER = 0x9, + IQ_SKILL_EFFICIENCY_EXPERT = 0xA, + IQ_SKILL_WEAK_TYPE_PICKER = 0xB, + IQ_SKILL_ALL_TERRAIN_HIKER = 0xC, + IQ_SKILL_SUPER_MOBILE = 0xD, + IQ_SKILL_TRAP_AVOIDER = 0xE, + IQ_SKILL_HOUSE_AVOIDER = 0xF, + IQ_SKILL_ENERGY_SAVER = 0x10, + IQ_SKILL_NONSLEEPER = 0x11, + IQ_SKILL_SELF_CURER = 0x12, + IQ_SKILL_TRAP_SEER = 0x13, + IQ_SKILL_LAVA_EVADER = 0x14, + IQ_SKILL_DEDICATED_TRAVELER = 0x15, + IQ_SKILL_ITEM_MASTER = 0x16, + IQ_SKILL_EXCLUSIVE_MOVE_USER = 0x17 +}; + +#endif diff --git a/include/constants/move.h b/include/constants/move.h new file mode 100644 index 0000000..6f1ea70 --- /dev/null +++ b/include/constants/move.h @@ -0,0 +1,474 @@ +#ifndef GUARD_CONSTANTS_MOVE_H +#define GUARD_CONSTANTS_MOVE_H + +enum MoveFlags +{ + MOVE_FLAG_EXISTS = 1 << 0, + MOVE_FLAG_LINKED = 1 << 1, // This move is linked with the previous move in the Pokémon's moveset. + MOVE_FLAG_ENABLED = 1 << 2, // Enabled for the AI to use. + MOVE_FLAG_SET = 1 << 3, // This move can be triggered by pressing L+A instead of having to go to the move menu. + MOVE_FLAG_LAST_USED = 1 << 4, // The most recent move used by the Pokémon. + MOVE_FLAG_DISABLED = 1 << 5 // Disabled by an effect like Taunt. +}; + +struct MoveData +{ + u8 fill0[0x8 - 0x0]; + // Determines the range of moves. + /* 0x8 */ u16 targetingFlags; + /* 0xA */ u16 aiTargetingFlags; // The AI consider certain moves to have different range than they actually do. + /* 0xC */ u8 maxPP; + /* 0xD */ u8 defaultMoveWeight; + u8 fillE[0x10 - 0xE]; + // Used by the AI to determine how often to use Spikes. + // Values exist for all other moves, though they seem to be unused. + /* 0x10 */ u8 moveUseChance; + u8 fill11[0x17 - 0x11]; + /* 0x17 */ bool8 cannotHitFrozen; // Used by Status Checker to determine if a move can be used on a frozen target. + /* 0x18 */ bool8 dealsDirectDamage; +}; + +struct PokemonMove +{ + u8 moveFlags; + bool8 sealed; + u16 moveID; + u8 pp; + u8 powerBoost; // How much the move is boosted by Ginsengs. +}; + +enum TargetingFlag +{ + TARGETING_FLAG_TARGET_OTHER = 0x0, + TARGETING_FLAG_HEAL_TEAM = 0x1, + TARGETING_FLAG_SWAP_POSITIONS = 0x2, + TARGETING_FLAG_ATTACK_ALL = 0x5, + TARGETING_FLAG_BOOST_TEAM = 0x6, + TARGETING_FLAG_DONT_USE = 0xF, + TARGETING_FLAG_TARGET_FRONTAL_CONE = 0x10, + TARGETING_FLAG_TARGET_AROUND = 0x20, + TARGETING_FLAG_TARGET_ROOM = 0x30, + TARGETING_FLAG_TARGET_2_TILES_AHEAD = 0x40, + TARGETING_FLAG_TARGET_LINE = 0x50, + TARGETING_FLAG_TARGET_FLOOR = 0x60, + TARGETING_FLAG_SELF_HEAL = 0x70, + TARGETING_FLAG_CUT_CORNERS = 0x80, + TARGETING_FLAG_SET_TRAP = 0x100, + TARGETING_FLAG_HEAL_HP = 0x200, + TARGETING_FLAG_HEAL_STATUS = 0x300, + TARGETING_FLAG_DREAM_EATER = 0x400, + TARGETING_FLAG_HEAL_ALL = 0x500, + TARGETING_FLAG_EXPOSE = 0x600, +}; + +enum MoveID +{ + MOVE_IRON_TAIL = 0x1, + MOVE_ICE_BALL = 0x2, + MOVE_YAWN = 0x3, + MOVE_LOVELY_KISS = 0x4, + MOVE_NIGHTMARE = 0x5, + MOVE_MORNING_SUN = 0x6, + MOVE_VITAL_THROW = 0x7, + MOVE_DIG = 0x8, + MOVE_THRASH = 0x9, + MOVE_SWEET_SCENT = 0xA, + MOVE_CHARM = 0xB, + MOVE_RAIN_DANCE = 0xC, + MOVE_CONFUSE_RAY = 0xD, + MOVE_HAIL = 0xE, + MOVE_AROMATHERAPY = 0xF, + MOVE_BUBBLE = 0x10, + MOVE_ENCORE = 0x11, + MOVE_CUT = 0x12, + MOVE_RAGE = 0x13, + MOVE_SUPER_FANG = 0x14, + MOVE_PAIN_SPLIT = 0x15, + MOVE_TORMENT = 0x16, + MOVE_STRING_SHOT = 0x17, + MOVE_SWAGGER = 0x18, + MOVE_SNORE = 0x19, + MOVE_HEAL_BELL = 0x1A, + MOVE_SCREECH = 0x1B, + MOVE_ROCK_THROW = 0x1C, + MOVE_ROCK_SMASH = 0x1D, + MOVE_ROCK_SLIDE = 0x1E, + MOVE_WEATHER_BALL = 0x1F, + MOVE_WHIRLPOOL = 0x20, + MOVE_FAKE_TEARS = 0x21, + MOVE_SING = 0x22, + MOVE_SPITE = 0x23, + MOVE_AIR_CUTTER = 0x24, + MOVE_SMOKESCREEN = 0x25, + MOVE_PURSUIT = 0x26, + MOVE_DOUBLESLAP = 0x27, + MOVE_MIRROR_MOVE = 0x28, + MOVE_OVERHEAT = 0x29, + MOVE_AURORA_BEAM = 0x2A, + MOVE_MEMENTO = 0x2B, + MOVE_OCTAZOOKA = 0x2C, + MOVE_FLATTER = 0x2D, + MOVE_ASTONISH = 0x2E, + MOVE_WILL_O_WISP = 0x2F, + MOVE_RETURN = 0x30, + MOVE_GRUDGE = 0x31, + MOVE_STRENGTH = 0x32, + MOVE_COUNTER = 0x33, + MOVE_FLAME_WHEEL = 0x34, + MOVE_FLAMETHROWER = 0x35, + MOVE_ODOR_SLEUTH = 0x36, + MOVE_SHARPEN = 0x37, + MOVE_DOUBLE_TEAM = 0x38, + MOVE_GUST = 0x39, + MOVE_HARDEN = 0x3A, + MOVE_DISABLE = 0x3B, + MOVE_RAZOR_WIND = 0x3C, + MOVE_BIDE = 0x3D, + MOVE_CRUNCH = 0x3E, + MOVE_BITE = 0x3F, + MOVE_THUNDER = 0x40, + MOVE_THUNDERPUNCH = 0x41, + MOVE_ENDEAVOR = 0x42, + MOVE_FACADE = 0x43, + MOVE_KARATE_CHOP = 0x44, + MOVE_CLAMP = 0x45, + MOVE_WITHDRAW = 0x46, + MOVE_CONSTRICT = 0x47, + MOVE_BRICK_BREAK = 0x48, + MOVE_ROCK_TOMB = 0x49, + MOVE_FOCUS_ENERGY = 0x4A, + MOVE_FOCUS_PUNCH = 0x4B, + MOVE_GIGA_DRAIN = 0x4C, + MOVE_REVERSAL = 0x4D, + MOVE_SMELLINGSALT = 0x4E, + MOVE_SPORE = 0x4F, + MOVE_LEECH_LIFE = 0x50, + MOVE_SLASH = 0x51, + MOVE_SILVER_WIND = 0x52, + MOVE_METAL_SOUND = 0x53, + MOVE_GRASSWHISTLE = 0x54, + MOVE_TICKLE = 0x55, + MOVE_SPIDER_WEB = 0x56, + MOVE_CRABHAMMER = 0x57, + MOVE_HAZE = 0x58, + MOVE_MEAN_LOOK = 0x59, + MOVE_CROSS_CHOP = 0x5A, + MOVE_OUTRAGE = 0x5B, + MOVE_LOW_KICK = 0x5C, + MOVE_ANCIENTPOWER = 0x5D, + MOVE_SYNTHESIS = 0x5E, + MOVE_AGILITY = 0x5F, + MOVE_RAPID_SPIN = 0x60, + MOVE_ICY_WIND = 0x61, + MOVE_MIND_READER = 0x62, + MOVE_COSMIC_POWER = 0x63, + MOVE_SKY_ATTACK = 0x64, + MOVE_POWDER_SNOW = 0x65, + MOVE_FOLLOW_ME = 0x66, + MOVE_METEOR_MASH = 0x67, + MOVE_ENDURE = 0x68, + MOVE_ROLLOUT = 0x69, + MOVE_SCARY_FACE = 0x6A, + MOVE_PSYBEAM = 0x6B, + MOVE_PSYWAVE = 0x6C, + MOVE_PSYCHIC = 0x6D, + MOVE_PSYCHO_BOOST = 0x6E, + MOVE_HYPNOSIS = 0x6F, + MOVE_UPROAR = 0x70, + MOVE_WATER_SPOUT = 0x71, + MOVE_SIGNAL_BEAM = 0x72, + MOVE_PSYCH_UP = 0x73, + MOVE_SUBMISSION = 0x74, + MOVE_RECOVER = 0x75, + MOVE_EARTHQUAKE = 0x76, + MOVE_NATURE_POWER = 0x77, + MOVE_LICK = 0x78, + MOVE_FLAIL = 0x79, + MOVE_TAIL_WHIP = 0x7A, + MOVE_SELFDESTRUCT = 0x7B, + MOVE_STUN_SPORE = 0x7C, + MOVE_BIND = 0x7D, + MOVE_SHADOW_PUNCH = 0x7E, + MOVE_SHADOW_BALL = 0x7F, + MOVE_CHARGE = 0x80, + MOVE_THUNDERBOLT = 0x81, + MOVE_MIST = 0x82, + MOVE_FISSURE = 0x83, + MOVE_EXTREMESPEED = 0x84, + MOVE_EXTRASENSORY = 0x85, + MOVE_SAFEGUARD = 0x86, + MOVE_ABSORB = 0x87, + MOVE_SKY_UPPERCUT = 0x88, + MOVE_SKILL_SWAP = 0x89, + MOVE_SKETCH = 0x8A, + MOVE_HEADBUTT = 0x8B, + MOVE_DOUBLE_EDGE = 0x8C, + MOVE_SANDSTORM = 0x8D, + MOVE_SAND_ATTACK = 0x8E, + MOVE_SAND_TOMB = 0x8F, + MOVE_SPARK = 0x90, + MOVE_SWIFT = 0x91, + MOVE_KINESIS = 0x92, + MOVE_SMOG = 0x93, + MOVE_GROWTH = 0x94, + MOVE_SACRED_FIRE = 0x95, + MOVE_SHEER_COLD = 0x96, + MOVE_SOLARBEAM = 0x97, + MOVE_SONICBOOM = 0x98, + MOVE_FLY = 0x99, + MOVE_TACKLE = 0x9A, + MOVE_EXPLOSION = 0x9B, + MOVE_DIVE = 0x9C, + MOVE_FIRE_BLAST = 0x9D, + MOVE_WATERFALL = 0x9E, + MOVE_MUDDY_WATER = 0x9F, + MOVE_STOCKPILE = 0xA0, + MOVE_SLAM = 0xA1, + MOVE_TWISTER = 0xA2, + MOVE_BULLET_SEED = 0xA3, + MOVE_TWINEEDLE = 0xA4, + MOVE_SOFTBOILED = 0xA5, + MOVE_EGG_BOMB = 0xA6, + MOVE_FAINT_ATTACK = 0xA7, + MOVE_BARRAGE = 0xA8, + MOVE_MINIMIZE = 0xA9, + MOVE_SEISMIC_TOSS = 0xAA, + MOVE_SUPERSONIC = 0xAB, + MOVE_TAUNT = 0xAC, + MOVE_MOONLIGHT = 0xAD, + MOVE_PECK = 0xAE, + MOVE_ARM_THRUST = 0xAF, + MOVE_HORN_ATTACK = 0xB0, + MOVE_HORN_DRILL = 0xB1, + MOVE_WING_ATTACK = 0xB2, + MOVE_AERIAL_ACE = 0xB3, + MOVE_ICICLE_SPEAR = 0xB4, + MOVE_SWORDS_DANCE = 0xB5, + MOVE_VINE_WHIP = 0xB6, + MOVE_CONVERSION = 0xB7, + MOVE_CONVERSION_2 = 0xB8, + MOVE_HELPING_HAND = 0xB9, + MOVE_IRON_DEFENSE = 0xBA, + MOVE_TELEPORT = 0xBB, + MOVE_THUNDERSHOCK = 0xBC, + MOVE_SHOCK_WAVE = 0xBD, + MOVE_QUICK_ATTACK = 0xBE, + MOVE_SWEET_KISS = 0xBF, + MOVE_THUNDER_WAVE = 0xC0, + MOVE_ZAP_CANNON = 0xC1, + MOVE_BLOCK = 0xC2, + MOVE_HOWL = 0xC3, + MOVE_POISON_GAS = 0xC4, + MOVE_TOXIC = 0xC5, + MOVE_POISON_FANG = 0xC6, + MOVE_POISONPOWDER = 0xC7, + MOVE_POISON_STING = 0xC8, + MOVE_SPIKE_CANNON = 0xC9, + MOVE_ACID_ARMOR = 0xCA, + MOVE_TAKE_DOWN = 0xCB, + MOVE_JUMP_KICK = 0xCC, + MOVE_BOUNCE = 0xCD, + MOVE_HI_JUMP_KICK = 0xCE, + MOVE_TRI_ATTACK = 0xCF, + MOVE_DRAGON_CLAW = 0xD0, + MOVE_TRICK = 0xD1, + MOVE_TRIPLE_KICK = 0xD2, + MOVE_DRILL_PECK = 0xD3, + MOVE_MUD_SPORT = 0xD4, + MOVE_MUD_SLAP = 0xD5, + MOVE_THIEF = 0xD6, + MOVE_AMNESIA = 0xD7, + MOVE_NIGHT_SHADE = 0xD8, + MOVE_GROWL = 0xD9, + MOVE_SLACK_OFF = 0xDA, + MOVE_SURF = 0xDB, + MOVE_ROLE_PLAY = 0xDC, + MOVE_NEEDLE_ARM = 0xDD, + MOVE_DOUBLE_KICK = 0xDE, + MOVE_SUNNY_DAY = 0xDF, + MOVE_LEER = 0xE0, + MOVE_WISH = 0xE1, + MOVE_FAKE_OUT = 0xE2, + MOVE_SLEEP_TALK = 0xE3, + MOVE_PAY_DAY = 0xE4, + MOVE_ASSIST = 0xE5, + MOVE_HEAT_WAVE = 0xE6, + MOVE_SLEEP_POWDER = 0xE7, + MOVE_REST = 0xE8, + MOVE_INGRAIN = 0xE9, + MOVE_CONFUSION = 0xEA, + MOVE_BODY_SLAM = 0xEB, + MOVE_SWALLOW = 0xEC, + MOVE_CURSE = 0xED, + MOVE_FRENZY_PLANT = 0xEE, + MOVE_HYDRO_CANNON = 0xEF, + MOVE_HYDRO_PUMP = 0xF0, + MOVE_HYPER_VOICE = 0xF1, + MOVE_HYPER_BEAM = 0xF2, + MOVE_SUPERPOWER = 0xF3, + MOVE_STEEL_WING = 0xF4, + MOVE_SPIT_UP = 0xF5, + MOVE_DYNAMICPUNCH = 0xF6, + MOVE_GUILLOTINE = 0xF7, + MOVE_VICEGRIP = 0xF8, + MOVE_KNOCK_OFF = 0xF9, + MOVE_POUND = 0xFA, + MOVE_RAZOR_LEAF = 0xFB, + MOVE_BATON_PASS = 0xFC, + MOVE_PETAL_DANCE = 0xFD, + MOVE_SPLASH = 0xFE, + MOVE_BUBBLEBEAM = 0xFF, + MOVE_DOOM_DESIRE = 0x100, + MOVE_BELLY_DRUM = 0x101, + MOVE_BARRIER = 0x102, + MOVE_LIGHT_SCREEN = 0x103, + MOVE_SCRATCH = 0x104, + MOVE_HYPER_FANG = 0x105, + MOVE_EMBER = 0x106, + MOVE_SECRET_POWER = 0x107, + MOVE_DIZZY_PUNCH = 0x108, + MOVE_BULK_UP = 0x109, + MOVE_IMPRISON = 0x10A, + MOVE_FEATHERDANCE = 0x10B, + MOVE_WHIRLWIND = 0x10C, + MOVE_BEAT_UP = 0x10D, + MOVE_BLIZZARD = 0x10E, + MOVE_STOMP = 0x10F, + MOVE_BLAST_BURN = 0x110, + MOVE_FLASH = 0x111, + MOVE_TEETER_DANCE = 0x112, + MOVE_CRUSH_CLAW = 0x113, + MOVE_BLAZE_KICK = 0x114, + MOVE_PRESENT = 0x115, + MOVE_ERUPTION = 0x116, + MOVE_SLUDGE = 0x117, + MOVE_SLUDGE_BOMB = 0x118, + MOVE_GLARE = 0x119, + MOVE_TRANSFORM = 0x11A, + MOVE_POISON_TAIL = 0x11B, + MOVE_ROAR = 0x11C, + MOVE_BONE_RUSH = 0x11D, + MOVE_CAMOUFLAGE = 0x11E, + MOVE_COVET = 0x11F, + MOVE_TAIL_GLOW = 0x120, + MOVE_BONE_CLUB = 0x121, + MOVE_BONEMERANG = 0x122, + MOVE_FIRE_SPIN = 0x123, + MOVE_FIRE_PUNCH = 0x124, + MOVE_PERISH_SONG = 0x125, + MOVE_WRAP = 0x126, + MOVE_SPIKES = 0x127, + MOVE_MAGNITUDE = 0x128, + MOVE_MAGICAL_LEAF = 0x129, + MOVE_MAGIC_COAT = 0x12A, + MOVE_MUD_SHOT = 0x12B, + MOVE_MACH_PUNCH = 0x12C, + MOVE_PROTECT = 0x12D, + MOVE_DEFENSE_CURL = 0x12E, + MOVE_ROLLING_KICK = 0x12F, + MOVE_SUBSTITUTE = 0x130, + MOVE_DETECT = 0x131, + MOVE_PIN_MISSILE = 0x132, + MOVE_WATER_SPORT = 0x133, + MOVE_WATER_GUN = 0x134, + MOVE_MIST_BALL = 0x135, + MOVE_WATER_PULSE = 0x136, + MOVE_FURY_ATTACK = 0x137, + MOVE_FURY_SWIPES = 0x138, + MOVE_DESTINY_BOND = 0x139, + MOVE_FALSE_SWIPE = 0x13A, + MOVE_FORESIGHT = 0x13B, + MOVE_MIRROR_COAT = 0x13C, + MOVE_FUTURE_SIGHT = 0x13D, + MOVE_MILK_DRINK = 0x13E, + MOVE_CALM_MIND = 0x13F, + MOVE_MEGA_DRAIN = 0x140, + MOVE_MEGA_KICK = 0x141, + MOVE_MEGA_PUNCH = 0x142, + MOVE_MEGAHORN = 0x143, + MOVE_HIDDEN_POWER = 0x144, + MOVE_METAL_CLAW = 0x145, + MOVE_ATTRACT = 0x146, + MOVE_MIMIC = 0x147, + MOVE_FRUSTRATION = 0x148, + MOVE_LEECH_SEED = 0x149, + MOVE_METRONOME = 0x14A, + MOVE_DREAM_EATER = 0x14B, + MOVE_ACID = 0x14C, + MOVE_MEDITATE = 0x14D, + MOVE_SNATCH = 0x14E, + MOVE_LUSTER_PURGE = 0x14F, + MOVE_LEAF_BLADE = 0x150, + MOVE_RECYCLE = 0x151, + MOVE_REFLECT = 0x152, + MOVE_REFRESH = 0x153, + MOVE_REVENGE = 0x154, + MOVE_DRAGON_RAGE = 0x155, + MOVE_DRAGONBREATH = 0x156, + MOVE_DRAGON_DANCE = 0x157, + MOVE_ICE_PUNCH = 0x158, + MOVE_ICE_BEAM = 0x159, + MOVE_FURY_CUTTER = 0x15A, + MOVE_COMET_PUNCH = 0x15B, + MOVE_SKULL_BASH = 0x15C, + MOVE_LOCK_ON = 0x15D, + MOVE_ROCK_BLAST = 0x15E, + MOVE_COTTON_SPORE = 0x15F, + MOVE_STRUGGLE = 0x160, + MOVE_AEROBLAST = 0x161, + MOVE_VOLT_TACKLE = 0x162, + MOVE_REGULAR_ATTACK = 0x163, + MOVE_WIDE_SLASH = 0x168, + MOVE_EXCAVATE = 0x169, // Unused + MOVE_SPIN_SLASH = 0x16A, // Unused + // Orb effects + MOVE_SEE_TRAP = 0x16B, + MOVE_TAKEAWAY = 0x16C, + MOVE_REBOUND = 0x16D, + MOVE_BLOOP_SLASH = 0x16E, + MOVE_SWITCHER = 0x16F, + MOVE_BLOWBACK = 0x170, + MOVE_WARP = 0x171, + MOVE_TRANSFER = 0x172, + MOVE_SLOW_DOWN = 0x173, + MOVE_SPEED_BOOST = 0x174, + MOVE_SEARCHLIGHT = 0x175, + MOVE_PETRIFY = 0x176, + MOVE_STAY_AWAY = 0x177, + MOVE_POUNCE = 0x178, + MOVE_TRAWL = 0x179, + MOVE_CLEANSE = 0x17A, + MOVE_OBSERVER = 0x17B, + MOVE_DECOY_MAKER = 0x17C, + MOVE_SIESTA = 0x17D, + MOVE_TOTTER = 0x17E, + MOVE_TWO_EDGE = 0x17F, + MOVE_NO_MOVE = 0x180, + MOVE_ESCAPE = 0x181, + MOVE_SCAN = 0x182, + MOVE_POWER_EARS = 0x183, + MOVE_DROUGHT = 0x184, + MOVE_TRAP_BUSTER = 0x185, + MOVE_WILD_CALL = 0x186, + MOVE_INVISIFY = 0x187, + MOVE_ONE_SHOT = 0x188, + MOVE_HP_GAUGE = 0x189, + MOVE_VACUUM_CUT = 0x18A, + MOVE_REVIVER = 0x18B, + MOVE_SHOCKER = 0x18C, + MOVE_ECHO = 0x18D, + MOVE_FAMISH = 0x18E, + MOVE_ONE_ROOM = 0x18F, + MOVE_FILL_IN = 0x190, + MOVE_TRAPPER = 0x191, + MOVE_POSSESS = 0x192, + MOVE_ITEMIZE = 0x193, + MOVE_HURL = 0x196, + MOVE_MOBILE = 0x197, + MOVE_ITEM_TOSS = 0x198, + MOVE_SEE_STAIRS = 0x199, + MOVE_LONG_TOSS = 0x19A, + MOVE_PIERCE = 0x19B +}; + +#endif diff --git a/include/constants/status.h b/include/constants/status.h new file mode 100644 index 0000000..8445731 --- /dev/null +++ b/include/constants/status.h @@ -0,0 +1,124 @@ +#ifndef GUARD_CONSTANTS_STATUS_H +#define GUARD_CONSTANTS_STATUS_H + +enum SleepStatus +{ + SLEEP_STATUS_SLEEP = 1, + SLEEP_STATUS_SLEEPLESS = 2, + SLEEP_STATUS_NIGHTMARE = 3, + SLEEP_STATUS_YAWNING = 4, + SLEEP_STATUS_NAPPING = 5 +}; + +enum NonVolatileStatus +{ + NON_VOLATILE_STATUS_BURNED = 1, + NON_VOLATILE_STATUS_POISONED = 2, + NON_VOLATILE_STATUS_BADLY_POISONED = 3, + NON_VOLATILE_STATUS_PARALYZED = 4 +}; + +enum ImmobilizeStatus +{ + IMMOBILIZE_STATUS_FROZEN = 1, + IMMOBILIZE_STATUS_IMMOBILIZED = 2, + IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE = 3, + IMMOBILIZE_STATUS_WRAPPED_BY_FOE = 4, + IMMOBILIZE_STATUS_INGRAIN = 5, + IMMOBILIZE_STATUS_PETRIFIED = 6, + IMMOBILIZE_STATUS_SQUEEZED = 7 +}; + +enum ChargingStatus +{ + CHARGING_STATUS_BIDE = 0x1, + CHARGING_STATUS_SOLARBEAM = 0x2, + CHARGING_STATUS_SKY_ATTACK = 0x3, + CHARGING_STATUS_RAZOR_WIND = 0x4, + CHARGING_STATUS_FOCUS_PUNCH = 0x5, + CHARGING_STATUS_SKULL_BASH = 0x6, + CHARGING_STATUS_FLY = 0x7, + CHARGING_STATUS_BOUNCE = 0x8, + CHARGING_STATUS_DIVE = 0x9, + CHARGING_STATUS_DIG = 0xA, + CHARGING_STATUS_CHARGE = 0xB, + CHARGING_STATUS_RAGE = 0xC +}; + +enum ProtectionStatus +{ + PROTECTION_STATUS_REFLECT = 0x1, + PROTECTION_STATUS_SAFEGUARD = 0x2, + PROTECTION_STATUS_LIGHT_SCREEN = 0x3, + PROTECTION_STATUS_COUNTER = 0x4, + PROTECTION_STATUS_MAGIC_COAT = 0x5, + PROTECTION_STATUS_WISH = 0x6, + PROTECTION_STATUS_PROTECT = 0x7, + PROTECTION_STATUS_MIRROR_COAT = 0x8, + PROTECTION_STATUS_ENDURE = 0x9, + PROTECTION_STATUS_MINI_COUNTER = 0xA, + PROTECTION_STATUS_MIRROR_MOVE = 0xB, + PROTECTION_STATUS_CONVERSION_2 = 0xC, + PROTECTION_STATUS_VITAL_THROW = 0xD, + PROTECTION_STATUS_MIST = 0xE +}; + +enum WaitingStatus +{ + WAITING_STATUS_CURSED = 1, + WAITING_STATUS_DECOY = 2, + WAITING_STATUS_SNATCH = 3 +}; + +enum LinkedStatus +{ + LINKED_STATUS_LEECH_SEED = 1, + LINKED_STATUS_DESTINY_BOND = 2 +}; + +enum MoveStatus +{ + MOVE_STATUS_SURE_SHOT = 1, + MOVE_STATUS_WHIFFER = 2, + MOVE_STATUS_SET_DAMAGE = 3, + MOVE_STATUS_FOCUS_ENERGY = 4 +}; + +enum ItemStatus +{ + ITEM_STATUS_LONG_TOSS = 1, + ITEM_STATUS_PIERCE = 2 +}; + +enum TransformStatus +{ + TRANSFORM_STATUS_INVISIBLE = 1, + TRANSFORM_STATUS_TRANSFORMED = 2, + TRANSFORM_STATUS_MOBILE = 3 +}; + +enum EyesightStatus +{ + EYESIGHT_STATUS_BLINKER = 1, + EYESIGHT_STATUS_CROSS_EYED = 2, + EYESIGHT_STATUS_EYEDROPS = 3 +}; + +enum VolatileStatus +{ + VOLATILE_STATUS_CRINGING = 1, + VOLATILE_STATUS_CONFUSED = 2, + VOLATILE_STATUS_PAUSED = 3, + VOLATILE_STATUS_COWERING = 4, + VOLATILE_STATUS_TAUNTED = 5, + VOLATILE_STATUS_ENCORE = 6, + VOLATILE_STATUS_INFATUATED = 7 +}; + +enum TargetingDecoy +{ + TARGETING_DECOY_TEAM = 1, + TARGETING_DECOY_WILD = 2 +}; + +#endif diff --git a/include/constants/tactic.h b/include/constants/tactic.h new file mode 100644 index 0000000..4d24b01 --- /dev/null +++ b/include/constants/tactic.h @@ -0,0 +1,19 @@ +#ifndef GUARD_CONSTANTS_TACTIC_H +#define GUARD_CONSTANTS_TACTIC_H + +enum Tactic +{ + TACTIC_LETS_GO_TOGETHER = 0x0, + TACTIC_GO_THE_OTHER_WAY = 0x1, + TACTIC_GO_AFTER_FOES = 0x2, + TACTIC_AVOID_THE_FIRST_HIT = 0x3, + TACTIC_ALL_FOR_ONE = 0x4, // Unused + TACTIC_GROUP_SAFETY = 0x5, // Unused + TACTIC_AVOID_TROUBLE = 0x6, + TACTIC_BE_PATIENT = 0x7, + TACTIC_KEEP_YOUR_DISTANCE = 0x8, + TACTIC_WAIT_THERE = 0x9, + TACTIC_GET_AWAY = 0xA +}; + +#endif diff --git a/include/constants/trap.h b/include/constants/trap.h new file mode 100644 index 0000000..cbc3454 --- /dev/null +++ b/include/constants/trap.h @@ -0,0 +1,28 @@ +#ifndef GUARD_CONSTANTS_TRAP_H +#define GUARD_CONSTANTS_TRAP_H + +enum TrapType +{ + TRIP_TRAP = 0x0, + MUD_TRAP = 0x1, + STICKY_TRAP = 0x2, + GRIMY_TRAP = 0x3, + SUMMON_TRAP = 0x4, + PITFALL_TRAP = 0x5, + WARP_TRAP = 0x6, + WHIRLWIND_TRAP = 0x7, + SPIN_TRAP = 0x8, + SLUMBER_TRAP = 0x9, + SLOW_TRAP = 0xA, + SEAL_TRAP = 0xB, + POISON_TRAP = 0xC, + SELFDESTRUCT_TRAP = 0xD, + EXPLOSION_TRAP = 0xE, + PP_ZERO_TRAP = 0xF, + CHESTNUT_TRAP = 0x10, + WONDER_TILE = 0x11, + POKEMON_TRAP = 0x12, + SPIKE_TRAP = 0x13 +}; + +#endif diff --git a/include/constants/type.h b/include/constants/type.h new file mode 100644 index 0000000..8c982fd --- /dev/null +++ b/include/constants/type.h @@ -0,0 +1,25 @@ +#ifndef GUARD_CONSTANTS_TYPE_H +#define GUARD_CONSTANTS_TYPE_H + +enum Type +{ + TYPE_NORMAL = 0x1, + TYPE_FIRE = 0x2, + TYPE_WATER = 0x3, + TYPE_GRASS = 0x4, + TYPE_ELECTRIC = 0x5, + TYPE_ICE = 0x6, + TYPE_FIGHTING = 0x7, + TYPE_POISON = 0x8, + TYPE_GROUND = 0x9, + TYPE_FLYING = 0xA, + TYPE_PSYCHIC = 0xB, + TYPE_BUG = 0xC, + TYPE_ROCK = 0xD, + TYPE_GHOST = 0xE, + TYPE_DRAGON = 0xF, + TYPE_DARK = 0x10, + TYPE_STEEL = 0x11 +}; + +#endif diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 9f3033c..e7d0fc1 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -1,44 +1,227 @@ #ifndef GUARD_DUNGEON_ENTITY_H #define GUARD_DUNGEON_ENTITY_H -struct subStruct_8048524 +#include "item.h" +#include "constants/move.h" + +struct DungeonEntityData { - /* 0x0 */ u8 unk0; - /* 0x1 */ u8 unk1; - /* 0x2 */ s16 species; - /* 0x4 */ s16 transformSpecies; + // This has different purposes for Pokémon, items, and traps. + // Pokemon: MovementFlag + // Items: ItemFlag + // Traps: TrapType + /* 0x0 */ u8 flags; + /* 0x1 */ bool8 moving; + /* 0x2 */ u16 entityID; // Pokémon species or item ID. + // Everything from here on only applies to Pokémon. + /* 0x4 */ u16 transformSpecies; // Shows a different Pokémon when using Transform. /* 0x6 */ bool8 isEnemy; /* 0x7 */ bool8 isLeader; - /* 0x8 */ u8 shopKeeper; + /* 0x8 */ u8 shopkeeperMode; /* 0x9 */ u8 level; - /* 0xA */ u16 partyIndex; + /* 0xA */ u8 partyIndex; // Leader is 0, partner is 1, etc. + u8 fillB; /* 0xC */ u16 IQ; /* 0xE */ s16 HP; - /* 0x10 */ s16 maxHP; - /* 0x12 */ s16 bossHPBackup; - u8 fill14[0x46 - 0x14]; + /* 0x10 */ u16 maxHP; + // Bosses have higher HP than normal for their level. This is the max HP they would normally have given their level. + /* 0x12 */ u16 originalHP; + /* 0x14 */ u8 attack; + /* 0x15 */ u8 specialAttack; + /* 0x16 */ u8 defense; + /* 0x17 */ u8 specialDefense; + /* 0x18 */ u32 expPoints; + // Temporary stat boosts/drops from effects like Growl or Swords Dance. + // These start at 10 and are in the range [1, 19]. + /* 0x1C */ s16 attackStage; + /* 0x1E */ s16 specialAttackStage; + /* 0x20 */ s16 defenseStage; + /* 0x22 */ s16 specialDefenseStage; + /* 0x24 */ s16 accuracyStage; + /* 0x26 */ s16 evasionStage; + // // When a Fire-type move is used on a Pokémon with Flash Fire, this value increases the power of the Pokémon's Fire-type moves. + /* 0x28 */ s16 flashFireBoost; + u8 fill2A[0x2C - 0x2A]; + // These start at 0x1000, and are halved by certain moves like Screech to lower the corresponding stat. + /* 0x2C */ s32 attackMultiplier; + /* 0x30 */ s32 specialAttackMultiplier; + /* 0x34 */ s32 defenseMultiplier; + /* 0x38 */ s32 specialDefenseMultiplier; + u8 fill3C[0x3E - 0x3C]; + /* 0x3E */ u8 hiddenPowerType; + u8 fill3F; + /* 0x40 */ u8 joinLocation; // Uses the dungeon index in dungeon.h. + u8 fill41[0x44 - 0x41]; + /* 0x44 */ u16 action; /* 0x46 */ s8 facingDir; - u8 fill47[0x8C - 0x47]; - u8 unk8C[4]; - u8 fill90[0xA4 - 0x90]; + u8 fill47; + // Additional parameter alongside actionIndex. Used for things like indiciating which move a Pokémon should use from its moveset. + /* 0x48 */ u8 actionUseIndex; + u8 fill49[0x4C - 0x49]; + // Position of the Pokémon the last time it threw an item. + /* 0x4C */ s16 lastItemThrowPositionX; + /* 0x4E */ s16 lastItemThrowPositionY; + u8 fill50[0x58 - 0x50]; + // Position of the target that the Pokémon wants throw an item at. + /* 0x58 */ s16 itemTargetPositionX; + /* 0x5A */ s16 itemTargetPositionY; + /* 0x5C */ u8 type1; + /* 0x5D */ u8 type2; + /* 0x5E */ u8 ability1; + /* 0x5F */ u8 ability2; + // Same format as ItemSlot struct. + /* 0x60 */ u8 heldItemFlags; + /* 0x61 */ u8 heldItemNumItems; + /* 0x62 */ u8 heldItemIndex; + u8 fill63[0x68 - 0x63]; + /* 0x68 */ s16 previousPosition1X; + /* 0x6A */ s16 previousPosition1Y; + /* 0x6C */ s16 previousPosition2X; + /* 0x6E */ s16 previousPosition2Y; + /* 0x70 */ s16 previousPosition3X; + /* 0x72 */ s16 previousPosition3Y; + /* 0x74 */ s16 previousPosition4X; + /* 0x76 */ s16 previousPosition4Y; + /* 0x78 */ u8 movementAction; + /* 0x79 */ bool8 notAdjacentToTarget; + /* 0x7A */ bool8 hasTarget; + /* 0x7B */ bool8 turnAround; + /* 0x7C */ u16 targetPokemonSpawnIndex; + u8 fill7E[0x80 - 0x7E]; + /* 0x80 */ u32 targetPokemon; + u8 fill84[0x88 - 0x84]; + /* 0x88 */ s16 targetMovePositionX; + /* 0x8A */ s16 targetMovePositionY; + // Bitwise flags corresponding to selected IQ skills. + /* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu. + /* 0x90 */ u8 IQSkillsEnabled[4]; + /* 0x94 */ u8 tactics; + u8 fill95[0xA4 - 0x95]; /* 0xA4 */ u8 clientFlags; - u8 fillA5[0xAC - 0xA5]; - /* 0xAC */ u8 statusCondition; - u8 fillAD[0xF7 - 0xAD]; + u8 fillA5[0xA8 - 0xA5]; + // Statuses are split into groups based on which ones can't overlap. + // See status.h for which statuses are in each group. + /* 0xA8 */ u8 sleepStatus; + /* 0xA9 */ u8 sleepStatusTurnsLeft; + u8 fillAA[0xAC - 0xAA]; + /* 0xAC */ u8 nonVolatileStatus; + /* 0xAD */ u8 nonVolatileStatusTurnsLeft; + /* 0xAE */ u8 nonVolatileStatusDamageTimer; + u8 fillAF; + /* 0xB0 */ u8 immobilizeStatus; + u8 fillB1[0xB8 - 0xB1]; + /* 0xB8 */ u8 immobilizeStatusTurnsLeft; + /* 0xB9 */ u8 immobilizeStatusDamageTimer; + u8 fillBA[0xBC - 0xBA]; + /* 0xBC */ u8 volatileStatus; + /* 0xBD */ u8 volatileStatusTurnsLeft; + u8 fillBE[0xC0 - 0xBE]; + /* 0xC0 */ u8 chargingStatus; + /* 0xC1 */ u8 chargingStatusTurnsLeft; + /* 0xC2 */ u8 chargingStatusMoveIndex; // The position of the move in the Pokémon's moveset that triggered the status. + u8 fillC3; + /* 0xC4 */ u8 protectionStatus; + /* 0xC5 */ u8 protectionStatusTurnsLeft; + u8 fillC6[0xC8 - 0xC6]; + /* 0xC8 */ u8 waitingStatus; + /* 0xC9 */ bool8 enemyDecoy; // True if the Pokémon is a decoy and a wild Pokémon (i.e., not an allied Pokémon). + u8 fillCA; + /* 0xCB */ u8 waitingStatusTurnsLeft; + /* 0xCC */ u8 cursedDamageTimer; + u8 fillCD[0xD0 - 0xCD]; + /* 0xD0 */ u8 linkedStatus; + u8 fillD1[0xD9 - 0xD1]; + /* 0xD9 */ u8 linkedStatusTurnsLeft; + /* 0xDA */ u8 linkedStatusDamageTimer; + u8 fillDB; + /* 0xDC */ u8 moveStatus; + /* 0xDD */ u8 moveStatusTurnsLeft; + u8 fillDE[0xE0 - 0xDE]; + /* 0xE0 */ u8 itemStatus; + u8 fillE1[0xE4 - 0xE1]; + /* 0xE4 */ u8 transformStatus; + /* 0xE5 */ u8 transformStatusTurnsLeft; + u8 fillE6[0xE8 - 0xE6]; + /* 0xE8 */ u8 eyesightStatus; + u8 fillE9; + /* 0xEA */ u8 eyesightStatusTurnsLeft; + u8 fillEB; + /* 0xEC */ bool8 muzzledStatus; + /* 0xED */ u8 muzzledTurnsLeft; + u8 fillEE[0xF0 - 0xEE]; + /* 0xF0 */ bool8 radarStatus; + /* 0xF1 */ bool8 scanningStatus; + /* 0xF2 */ bool8 stairSpotterStatus; + u8 fillF3; + /* 0xF4 */ bool8 grudgeStatus; + /* 0xF5 */ bool8 exposedStatus; + u8 fillF7; /* 0xF7 */ bool8 isBoss; - u8 fillF8[0xFB - 0xF8]; + u8 fillF8[0xFA - 0xF8]; + /* 0xFA */ u8 terrifiedTurnsLeft; // Doubles as a bool for whether the Pokémon is terrified. u8 unkFB; - u8 fillFC[0x112 - 0xFC]; + /* 0xFC */ bool8 forceUseItem; // If true, an AI Pokémon is forced to try using their held item next turn. Unknown when this is set in regular gameplay. + /* 0xFD */ u8 perishSongTimer; // When this reaches 0, the Pokémon faints from Perish Song. Doubles as a bool for whether the Pokémon is afflicted by Perish Song. + u8 fillFE[0x100 - 0xFE]; + /* 0x100 */ u8 targetingDecoy; // If the Pokémon is targeting a decoy, this indicates whether the decoy target is a team or wild Pokémon. + u8 fill101[0x104 - 0x101]; + /* 0x104 */ u8 movementSpeed; + u8 fill105[0x108 - 0x105]; + // The turn counter for movement speed up/down is split into five timers each. Multiple timers are used if the Pokémon is affected by multiple + // speed-up/slow effects at once, like using Agility twice. + /* 0x108 */ u8 speedUpTurnsLeft[5]; + /* 0x10D */ u8 slowTurnsLeft[5]; /* 0x112 */ u8 stockpileCount; - u8 fill113[0x13C - 0x113]; + u8 fill113; + // When true, an AI Pokémon will move in a random direction every turn. + // Unclear where this is set in-game; it is not set by statuses (e.g., confusion) or mission clients. + /* 0x114 */ bool8 moveRandomly; + u8 fill115[0x118 - 0x115]; + /* 0x118 */ struct PokemonMove moves[4]; + /* 0x138 */ u8 struggleMoveFlags; + u8 fill139[0x13C - 0x139]; /* 0x13C */ u32 belly; - u8 fill140[0x15C - 0x140]; + /* 0x140 */ u32 maxBelly; + /* 0x144 */ bool8 movingIntoTarget; // True if an AI Pokémon is following another Pokémon and is already adjacent to them. + /* 0x145 */ bool8 recalculateFollow; // Used by the AI to defer a movement decision until after all other Pokémon have moved. + u8 fill146; + /* 0x147 */ bool8 waiting; // True if an AI Pokémon decided to do nothing this turn. + /* 0x148 */ bool8 attacking; + u8 fill149[0x14E - 0x149]; + /* 0x14E */ u16 visualFlags; + /* 0x150 */ u16 previousVisualFlags; + u8 fill152[0x15C - 0x152]; u8 unk15C; u8 unk15D; u8 unk15E; u8 unk15F; - u8 fill160[0x174 - 0x160]; + u8 fill160[0x16C - 0x160]; + /* 0x16C */ s16 targetPositionX; + /* 0x16E */ s16 targetPositionY; + /* 0x170 */ s16 posPixelX; + /* 0x172 */ s16 posPixelY; u32 unk174; + u8 fill178[0x184 - 0x178]; + // Previous value of targetPosition for movement, 1 and 2 moves ago. + /* 0x184 */ s16 previousTargetMovePosition1X; + /* 0x186 */ s16 previousTargetMovePosition1Y; + /* 0x188 */ s32 previousTargetMovePosition2X; + /* 0x18C */ s32 previousTargetMovePosition2Y; + /* 0x190 */ u8 lastMoveDirection; // The last direction that the Pokémon moved in. + u8 fill191[0x194 - 0x191]; + // Number of tiles that the Pokémon moved last, multiplied by 0x100. + /* 0x194 */ s32 lastMoveIncrementX; + /* 0x198 */ s32 lastMoveIncrementY; + /* 0x19C */ u8 walkAnimationCounter; // Set when the Pokémon starts moving, and counts down until the Pokémon's walk animation stops. + u8 fill19D[0x1F4 - 0x19D]; + /* 0x1F4 */ u8 numMoveTiles; // Number of tiles to move in a turn. Can be greater than 1 if the user's movement speed is boosted. + u8 fill1F5; + /* 0x1F6 */ bool8 notMoving; + u8 fill1F7[0x1FA - 0x1F7]; + /* 0x1FA */ u8 mobileTurnTimer; // When a Pokémon can pass through walls in a hallway, this counts up to 200 before the Pokémon turns in a random direction. + u8 fill1FB; + /* 0x1FC */ u16 expGainedInTurn; // Used to accumulate experience when multiple enemies are defeated in one turn. + u8 fill1FE[0x208 - 0x1FE]; }; // Used for Pokémon, items, and traps. @@ -57,7 +240,7 @@ struct DungeonEntity /* 0x14 */ s32 prevPosPixelX; /* 0x18 */ s32 prevPosPixelY; u8 fill1C[0x20 - 0x1C]; - /* 0x20 */ bool8 active; // Turned off when a Pokémon faints. + /* 0x20 */ bool8 visible; // Turned off when a Pokémon faints. u8 fill21[0x25 - 0x21]; /* 0x25 */ u8 roomIndex; // The global spawn index counter starts at 10. Each Pokémon that spawns increments the counter and @@ -89,10 +272,10 @@ struct DungeonEntity u8 fill52[0x54 - 0x52]; /* 0x54 */ u16 spriteGlobalIndex; u8 fill56[0x6C - 0x56]; - /* 0x6C */ u8 facingDirection; - /* 0x6D */ u8 facingDirection2; // Duplicate of 0x6C? + /* 0x6C */ u8 facingDir; + /* 0x6D */ u8 facingDir2; // Duplicate of 0x6C? u8 fill6D[0x70 - 0x6D]; - struct subStruct_8048524 *unk70; + /* 0x70 */ struct DungeonEntityData *entityData; }; enum EntityType @@ -102,16 +285,42 @@ enum EntityType ENTITY_TRAP = 3 }; -enum FacingDirection +enum MovementFlag +{ + MOVEMENT_FLAG_SWAPPED_PLACES = 1 << 5, + MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED = 1 << 15 // Set if the Pokémon is petrified and the leader cures them by swapping places. +}; + +enum ShopkeeperMode +{ + SHOPKEEPER_FRIENDLY = 1, + // These two modes trigger if an explosion damages the shopkeeper. The shopkeeper attacks the side that damaged it. + SHOPKEEPER_AGGRESSIVE_TO_WILD = 2, + SHOPKEEPER_AGGRESSIVE_TO_PLAYER = 3 +}; + +enum MovementAction +{ + MOVEMENT_ACTION_FOLLOW = 1, + MOVEMENT_ACTION_WANDER = 2, + MOVEMENT_ACTION_RUN_AWAY_WANDER = 3, + MOVEMENT_ACTION_EXIT_ROOM = 4, + MOVEMENT_ACTION_RUN_AWAY_FROM_ENEMY = 5, + MOVEMENT_ACTION_FACE_RANDOM_DIRECTION = 6, + MOVEMENT_ACTION_TAKE_ITEM = 7 +}; + +enum ClientFlag +{ + CLIENT_FLAGS_CLIENT = 1, // Used for mission clients that need rescuing. + CLIENT_FLAGS_DONT_MOVE = 3 // Used for Diglett in the Skarmory boss fight. +}; + +enum VisualFlag { - SOUTH, - SOUTHEAST, - EAST, - NORTHEAST, - NORTH, - NORTHWEST, - WEST, - SOUTHWEST + // Set if Run Away's visual effect (green smoke cloud) has been triggered on this floor. + // Prevents the effect from showing again if the Pokémon stops running away and then starts running away again. + VISUAL_FLAG_RUN_AWAY = 2 }; #endif diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h new file mode 100644 index 0000000..17f4b3a --- /dev/null +++ b/include/dungeon_global_data.h @@ -0,0 +1,93 @@ +#ifndef GUARD_DUNGEON_DATA_H +#define GUARD_DUNGEON_DATA_H + +#define DUNGEON_MAX_SIZE_X 55 +#define DUNGEON_MAX_SIZE_Y 31 + +#include "constants/species.h" +#include "dungeon_entity.h" +#include "map.h" + +struct DungeonGlobalData +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 fill5[0x7 - 0x5]; + u8 unk7; + u8 fill8[0xF - 0x8]; + /* 0xF */ bool8 inputAllowed; // Whether the game is currently accepting input. Set to false while action animations play. + u8 fill10; + u8 unk11; + u8 fill12[0x16D - 0x12]; + u8 unk16D; + u8 fill16E[0x179 - 0x16E]; + /* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status. + u8 fill17A[0x645 - 0x17A]; + /* 0x645 */ u8 floorNumber; + u8 fill646[0x65C - 0x646]; + u8 unk65C; + u8 fill65D[0x660 - 0x65D]; + /* 0x660 */ u8 speedTurnCounter; // Handles turn order when Pokémon have different movement speeds. + u8 fill661[0x666 - 0x661]; + /* 0x666 */ u16 turnsLeft; // Turns remaining before getting swept out of the dungeon. + u8 fill668[0x66A - 0x668]; + u16 unk66A; + u8 fill66C[0x671 - 0x66C]; + /* 0x671 */ bool8 monsterHouseActive; + u8 fill672[0x363C - 0x672]; + /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; + u8 fill37E3[0x37FC - 0x37D9]; + /* 0x37FC */ bool8 decoyActive; + u8 fill37FD[0x3A0E - 0x37FD]; + /* 0x3A0E */ s16 tileset; + u8 fill3A10[0x3A14 - 0x3A10]; + /* 0x3A14 */ s16 bossBattleIndex; + u8 fill3A16[0x3A18 - 0x3A16]; + /* 0x3A18 */ struct MapTile mapTiles[DUNGEON_MAX_SIZE_X * DUNGEON_MAX_SIZE_Y]; + u8 fill54BC[0xE23C - 0xD9F0]; + s16 unkE23C; + s16 unkE23E; + u8 fillE240[0xE264 - 0xE240]; + /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. + u8 unkE265; + /* 0xE266 */ u8 weatherDamageTimer; // Timer for applying sandstorm/hail damage periodically. + u8 fillE266[0xE26B - 0xE267]; + u8 unkE26B; + u8 weatherTurnsLeft; + u8 fillE26D[0xE270 - 0xE26D]; + /* 0xE270 */ u8 startingWeather; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. + u8 fillE271[0xE277 - 0xE271]; + /* 0xE277 */ u8 mudSportTurnsLeft; + /* 0xE278 */ u8 waterSportTurnsLeft; + u8 fillE279[0xE8C0 - 0xE279]; + /* 0xE8C0 */ u32 mapEntityPointers[DUNGEON_MAX_SIZE_X * DUNGEON_MAX_SIZE_Y]; + u8 fill10364[0x10844 - 0x10364]; + /* 0x10844 */ u16 numRoomExits[MAX_ROOM_COUNT]; + u8 fill10874[0x10884 - 0x10874]; + /* 0x10884 */ struct RoomExit roomExits[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room. + u8 fill11444[0x1356C - 0x11484]; + u8 unk1356C; + u8 fill1356D[0x1357C - 0x1356D]; + /* 0x1357C */ struct DungeonEntity *teamPokemon[4]; + /* 0x1358C */ struct DungeonEntity *wildPokemon[0x10]; + /* 0x135CC */ struct DungeonEntity *allPokemon[0x14]; // Contains both team and wild Pokémon + /* 0x1361C */ struct DungeonEntity *clientPokemon[2]; // Not sure how large this array is. + u8 fill13624[0x181F8 - 0x13624]; + /* 0x181F8 */ struct DungeonEntity *leader; // Pointer to the team leader. + u32 unk181FC; + u32 unk18200; + u32 unk18204; + u8 unk18208; + /* 0x18209 */ u8 visibility; // Dungeon light level. + /* 0x1820A */ bool8 displayBlinker; // Blacks out the screen when the player has the Blinker status. + u8 unk1820B; + u32 unk1820C; + /* 0x18210 */ bool8 displayCrossEyed; // Displays Subsitute and flower sprites when the player has the Cross-Eyed status. + u8 fill18211[0x18217 - 0x18211]; + u8 unk18217; +}; + +#endif diff --git a/include/gUnknown_203B418.h b/include/gUnknown_203B418.h deleted file mode 100644 index e022b4b..0000000 --- a/include/gUnknown_203B418.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef GUARD_GUNKNOWN_203B418_H -#define GUARD_GUNKNOWN_203B418_H - -#include "dungeon_entity.h" - -struct unkStruct_203B418 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 fill5[2]; - u8 unk7; - u8 fill8[0x11 - 8]; - u8 unk11; - u8 fill12[0x16D - 0x12]; - u8 unk16D; - u8 fill16E[0x65C - 0x16E]; - u8 unk65C; - u8 fill65D[0x66A - 0x65D]; - u16 unk66A; - u8 fill66B[0xE23C - 0x66C]; - s16 unkE23C; - s16 unkE23E; - u8 fillE240[0xE265 - 0xE240]; - u8 unkE265; - u8 fillE266[0xE26B - 0xE266]; - u8 unkE26B; - u8 unkE26C; - u8 fillE26D[0x1356C - 0xE26D]; - u8 unk1356C; - u8 fill1356D[0x1358C - 0x1356D]; - struct DungeonEntity *unk1358C[0x10]; - u8 fill135CC[0x181FC - 0x135CC]; - u32 unk181FC; - u32 unk18200; - u32 unk18204; - u8 unk18208[3]; - u8 unk1820B; - u32 unk1820C; - u32 unk18210; - u8 padding2[3]; - u8 unk18217; -}; - -#endif diff --git a/include/item.h b/include/item.h index 84f9de2..1d81116 100644 --- a/include/item.h +++ b/include/item.h @@ -12,8 +12,11 @@ struct Item /* 0xD */ u8 icon; /* 0xE */ u16 fill; /* 0x10 */ u8 *descriptionPointer; - /* 0x14 */ bool8 unkFood1[2]; - /* 0x16 */ u8 throwDmg; + // Determines how the AI can use the item. + // Index 0: Item can be used on self. + // Index 1: Item can be thrown at allies. + // Index 2: Item can be thrown at enemies. + /* 0x14 */ bool8 aiFlags[3]; /* 0x17 */ u8 fill2; /* 0x18 */ s16 move; /* 0x1A */ u8 order; // Numbered order they are in storage @@ -25,7 +28,7 @@ struct Item struct ItemSlot { - u8 unk0; // some sort of flags, bit 0 seems to indicate an empty slot + u8 itemFlags; u8 numItems; u8 itemIndex; }; @@ -84,6 +87,14 @@ enum ItemCategory ITEM_CATEGORY_ORBS }; +enum ItemFlag +{ + ITEM_FLAG_EXISTS = 1 << 0, + ITEM_FLAG_FOR_SALE = 1 << 1, + ITEM_FLAG_STICKY = 1 << 3, + ITEM_FLAG_SET = 1 << 4 // This item can be thrown by pressing L+R instead of having to go to the bag menu. +}; + // see https://bulbapedia.bulbagarden.net/wiki/List_of_items_by_index_number_(Rescue_Team) enum ItemID { ITEM_ID_NOTHING, @@ -343,7 +354,7 @@ u8 GetItemPalette(u8 itemIndex); u8 GetItemCategory(u8 itemIndex); u32 GetItemUnkThrow(u8 itemIndex, u32 r1); u8 *GetItemDescription(u8 itemIndex); -u32 GetItemUnkFood(u8 itemIndex, u32 r1); +u32 GetItemAIFlags(u8 itemIndex, u32 r1); s32 GetNumberOfFilledInventorySlots(void); bool8 IsThrowableItem(u8 itemIndex); void xxx_init_itemslot_8090A8C(struct ItemSlot *param_1,u8 itemIndex,u8 param_3); diff --git a/include/map.h b/include/map.h new file mode 100644 index 0000000..d3d1ed9 --- /dev/null +++ b/include/map.h @@ -0,0 +1,61 @@ +#ifndef GUARD_MAP_H +#define GUARD_MAP_H + +#include "dungeon_entity.h" + +#define MAX_ROOM_COUNT 24 // Empirical max, not sure if the code supports any more. + +struct MapTile +{ + /* 0x0 */ u8 tileFlags; + /* 0x1 */ bool8 stairs; + u8 fill2[0x9 - 0x2]; + /* 0x9 */ u8 roomIndex; + // Bitwise flags for whether Pokémon can move to an adjacent tile. Bits correspond to directions in direction.h. + // Different sets of flags are used for Pokémon that can cross special terrain. + /* 0xA */ u8 canMoveAdjacent; + /* 0xB */ u8 canMoveAdjacentLiquid; + /* 0xC */ u8 canMoveAdjacentCrevice; + /* 0xD */ u8 canMoveAdjacentWall; + u8 fillE[0x10 - 0xE]; + /* 0x10 */ struct DungeonEntity *pokemon; // Pokémon on the tile. + /* 0x14 */ struct DungeonEntity *mapObject; // Item or trap on the tile. +}; + +struct MapRoom +{ + u8 fill0[0x2 - 0x0]; + // All coordinates are inclusive. + /* 0x2 */ s16 startX; + /* 0x4 */ s16 startY; + /* 0x6 */ s16 endX; + /* 0x8 */ s16 endY; + u8 fillA[0x1C - 0xA]; +}; + +struct RoomExit +{ + s16 x; + s16 y; +}; + +enum TileFlag +{ + TILE_TYPE_FLOOR = 1 << 0, + TILE_TYPE_LIQUID = 1 << 2, // Water or lava depending on the dungeon. + TILE_TYPE_ROOM_EXIT = 1 << 3, + TILE_TYPE_MAP_EDGE = 1 << 4, + TILE_TYPE_SHOP = 1 << 5, + TILE_TYPE_MONSTER_HOUSE = 1 << 6, + TILE_TYPE_STAIRS = 1 << 9 +}; + +enum CrossableTerrain +{ + CROSSABLE_TERRAIN_REGULAR = 0, + CROSSABLE_TERRAIN_LIQUID = 1, + CROSSABLE_TERRAIN_CREVICE = 2, + CROSSABLE_TERRAIN_WALL = 3, +}; + +#endif diff --git a/include/pokemon.h b/include/pokemon.h index 874aa93..3df33b6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -24,7 +24,7 @@ struct unkPokeSubStruct_4 { u16 fill6; }; -struct unkPokeSubStruct_2C +struct unkPokeSubStruct_2C { u8 unk0; u8 fill1; @@ -138,13 +138,13 @@ struct gPokemon /* 0x10 */ u16 dialogue_sprites; /* 0x12 */ u8 unk12; /* 0x13 */ u8 types[2]; - /* 0x15 */ u8 walkable_tiles; + /* 0x15 */ u8 walkable_tiles; // Uses the CrossableTerrain enum in map.h. /* 0x16 */ u8 friend_area; /* 0x17 */ u8 abilities[2]; /* 0x19 */ u8 shadow_size; /* 0x1A */ u8 unk1A; /* 0x1B */ u8 unk1B; - /* 0x1C */ bool8 isMoving; + /* 0x1C */ bool8 isMoving; // Set to false for Pokémon who don't move unless they're the leader, like Kakuna. /* 0x1D */ u8 unk1D; /* 0x1E */ u16 base_hp; /* 0x20 */ s32 base_exp; @@ -155,7 +155,7 @@ struct gPokemon /* 0x30 */ u8 unk30; /* 0x31 */ u8 unk31; /* 0x32 */ u8 unk32; - /* 0x33 */ bool8 unk33; + /* 0x33 */ bool8 toolboxEnabled; // If false, the AI can't use items. Doesn't seem to be used, as it's true for all Pokémon. /* 0x34 */ struct EvolveStruct1 pre; /* 0x38 */ struct EvolveNeeds need; /* 0x3C */ s16 dexInternal[2]; // dexNo and internalNo @@ -165,7 +165,7 @@ struct gPokemon // https://www.pokecommunity.com/showthread.php?t=407371 -struct LevelData +struct LevelData { s32 expRequired; u8 gainHP; @@ -177,19 +177,18 @@ struct LevelData u16 fillA; }; -struct unkStruct_808E218_arg +struct unkStruct_808E218_arg { u16 unk0[NUM_SPECIES]; u32 count; }; -struct unkStruct_808E218 +struct unkStruct_808E218 { // leveldata? (same size) struct unkStruct_808E6F4 unk0[3]; }; - void LoadMonsterParameters(void); struct unkStruct_203B45C *GetRecruitedPokemon(void); void InitializeRecruitedPokemon(void); @@ -212,7 +211,7 @@ u16 GetLowKickDmg(s16 index); u16 GetSizeOrbDmg(s16 index); u8 GetFriendArea(s16 index); u16 GetBaseHP(s16 index); -bool8 GetUnk33(s16 index); +bool8 IsToolboxEnabled(s16 index); u8 GetUnk12(s16 index); s16 GetPokemonEvolveFrom(s16 index); u16 GetPokemonAttSpatt(s16 index, u32 r1); @@ -237,4 +236,4 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem void RestorePokemonStruct(struct unkStruct_8094924*, struct PokemonStruct*); -#endif // GUARD_POKEMON_H +#endif // GUARD_POKEMON_H |