* Added SpeciesInfo fields # Conflicts: # include/pokemon.h * Added missing comments * Renamed gigantamax to isGigantamax * Converted species flags to agbcc bit flags * Added padding after flags * Pikachu form config * Dex text * Reordered Paradox flag * Missing Pikachu ifdef comments * Moved P_GEN_x_POKEMON settings to the species_families file * Gen 1 Dex entries * Renamed file to species_enabled.h * Prevent Pokémon from evolving if their evolution is disabled * Prevent Pokémon from being affected by Eviolite if their evolution is disabled * Prevent Pokémon offspring if they're disabled * Corrected imprementation of evolution prevention It could potentially overwrite items by accident * Cross-evo configs * Gen 2 dex entries * Changed cry table to use assignable IDs # Conflicts: # include/pokemon.h * Form table pointers * Beginning support for moving data to gSpeciesInfo * Pokédexes reads text from gSpeciesInfo * Reading species names from gSpeciesInfo * Fixed erroneous copy-paste * Moved Bulbasaur to Raichu Family data do gSpeciesinfo * Added female pic sizes * Macros for Front, Back, Palette and Learnsets * Sandshrew to Dugtrio Families * Obtains Height/Weight from gSpeciesInfo * Read category from gSpeciesInfo * Removed unused data from pokedex_entries.h * Moved Gen 1 data to gSpeciesInfo * Moved Gen 2 data to gSpeciesInfo + fixed Ursaluna Bloodmoon not producing Teddiursa eggs * Moved Gen 3 data to gSpeciesInfo * Moved Gen 4 data to gSpeciesInfo * HGSS dex properly shows form sprites * Fixed data type for GetSpeciesHeight/Weight * Reading Pokédex Size data from gSpeciesInfo * Cleaned up mon graphic decompression function * Reading Front Pics gSpeciesInfo * Reading Back Pics gSpeciesInfo * Updated uses of GetMonSpritePalStruct to allow loading the data directly instead of reading the struct * Reading palettes from gSpeciesInfo * Reading animation delay from gSpeciesInfo * Fixed Pokémon Debug Menu not reading animation delay * Reading front anim Id from gSpeciesInfo * Reading back anim Id from gSpeciesInfo * Reading Animation Frames from gSpeciesInfo * Reading Icon Sprites from gSpeciesInfo * Reading Icon Palette IDs from gSpeciesInfo * Reading Footprints from gSpeciesInfo * Reading Mon Pic sizes from gSpeciesInfo * Separate mon pic sizes for female mon * Reading Level Up Learnsets from gSpeciesInfo * Reading Teachable Learnsets from gSpeciesInfo * Reading National Dex Number from gSpeciesInfo * Reading Enemy Mon Elevation from gSpeciesInfo * Reading Evolutions from gSpeciesInfo * Reading form table from gSpeciesInfo * Fixed button label inconsistency in pokémon debug menu * Reading form change table from gSpeciesInfo * Removed need to define mon graphics in include/graphics.h * Reordered mon graphics by family * Fixed National dex number offset * gFrontierBannedSpecies now checks IsSpeciesEnabled * Added 3 more toggles for Fusions, Primal Reversions and Ultra Burst * Gen 3 & 4 family toggles for dex entries * Fixed missing Mr. Rime data * Gen 1 dex descriptions as compound strings * Gen 2 dex descriptions as compound strings * Gen 3 dex descriptions as compound strings * Gen 4 dex descriptions as compound strings * Fixed compile in agbcc * Moved Gen 5 data to gSpeciesInfo * Using PLACEHOLDER_ANIM_SINGLE_FRAME when needed (same hash) * Renamed PLACEHOLDER_TWO_FRAME_ANIMATION to PLACEHOLDER_ANIM_TWO_FRAMES * Fixed capitalization for front pic anims * Fixed `CanEvolve` * Moved Gen 6 data to gSpeciesInfo * Gen 7 without macros * Gen 8 without macros * Gen 9 without macros * Fixed Gen 9 sound data * Finished moving Gen 7 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Ultra Necrozma is now included in the fusion forms define * Cries are now properly excluded from the rom when disabling species * Removed P_GEN_x_POKEMON from form_change_tables.h * Fixed Yanmega's cry ignoring the P_GEN_4_CROSS_EVOS setting * Added P_NEW_EVOS_IN_REGIONAL_DEX setting * Automatic ASSUMPTION_FAIL when used species are disabled * Finished moving Gen 8 data in macros (by Alex) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Expanded Alcremie macro * Finished moving Gen 9 data in macros (by Alex) * Fixed missing data for Komala and Marshadow * Form species id tables use family toggles + added missing Ursaluna form species id table * Fixed Genesect palettes * Fixed Flabébé family graphics * Fixed Minior Graphics * Fixed missing Calyrex data * Family toggles in mon graphcis (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed missing Ogerpon data * Ordered Level Up Learnsets (missing toggles) Also added White Basculin learnset * Added more Minior synonyms * Fixed enamorus order * Reordered teachable learnsets * Removed sSpeciesXXX level up learnsets + reordered * Removed unneeded assumes * Removed unused extra animations * Family toggles in mon level up learnsets (By Jasper/Bassoonian) Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed Phione graphics inclusion * Family toggles for Teachable Learnsets Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Ordered Front Pic Anims * Family toggles for front pic animations Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS dex incorrectly showing the wrong mon when catching it * Family toggles for Egg Moves + reodered Co-authored-by: Bassoonian <iasperbassoonian@gmail.com> * Fixed HGSS not checking for null footprints * Review changes * Fixed Female difference mon not using their macros * Fixed Alcremie Macro * Fixed compile error when disabling the Bulbasaur family * Fixed Turtwig and Chimchar family + Houndour and Mareep cries not being excluded properly * Re-added missing Egg graphical data * Fixed crash during the Birch Intro when Lotad is disabled * Renamed PALLETE to PALETTES * Removed extra spacing for YOffsets * Fixed compile when only disabling cross-gen evolutions * Added Tera Forms define (Ogerpon and Terapagos) * Fixed Necrozma macro * Removed .noFlip = FALSE * Fixed dex number in summary screen for forms when nat dex is disabled * Fixed Paldean form paths --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
176 lines
6.3 KiB
C
176 lines
6.3 KiB
C
#include "global.h"
|
|
#include "data.h"
|
|
#include "pokemon_icon.h"
|
|
#include "decoration.h"
|
|
#include "battle_main.h"
|
|
#include "item.h"
|
|
#include "pokeball.h"
|
|
|
|
// The purpose of this struct is for outside applications to be
|
|
// able to access parts of the ROM or its save file, like a public API.
|
|
// In vanilla, it was used by Colosseum and XD to access pokemon graphics.
|
|
//
|
|
// If this struct is rearranged in any way, it defeats the purpose of
|
|
// having it at all. Applications like PKHex or streaming HUDs may find
|
|
// these values useful, so there's some potential benefit to keeping it.
|
|
// If there's a compilation problem below, just comment out the assignment
|
|
// instead of changing this struct.
|
|
struct GFRomHeader
|
|
{
|
|
u32 version;
|
|
u32 language;
|
|
u8 gameName[32];
|
|
const struct CompressedSpriteSheet * monFrontPics;
|
|
const struct CompressedSpriteSheet * monBackPics;
|
|
const struct CompressedSpritePalette * monNormalPalettes;
|
|
const struct CompressedSpritePalette * monShinyPalettes;
|
|
const u8 *const * monIcons;
|
|
const u8 *monIconPaletteIds;
|
|
const struct SpritePalette * monIconPalettes;
|
|
const u8 (* monSpeciesNames)[];
|
|
const u8 (* moveNames)[];
|
|
const struct Decoration * decorations;
|
|
u32 flagsOffset;
|
|
u32 varsOffset;
|
|
u32 pokedexOffset;
|
|
u32 seen1Offset;
|
|
u32 seen2Offset;
|
|
u32 pokedexVar;
|
|
u32 pokedexFlag;
|
|
u32 mysteryEventFlag;
|
|
u32 pokedexCount;
|
|
u8 playerNameLength;
|
|
u8 trainerNameLength;
|
|
u8 pokemonNameLength1;
|
|
u8 pokemonNameLength2;
|
|
u8 unk5;
|
|
u8 unk6;
|
|
u8 unk7;
|
|
u8 unk8;
|
|
u8 unk9;
|
|
u8 unk10;
|
|
u8 unk11;
|
|
u8 unk12;
|
|
u8 unk13;
|
|
u8 unk14;
|
|
u8 unk15;
|
|
u8 unk16;
|
|
u8 unk17;
|
|
u32 saveBlock2Size;
|
|
u32 saveBlock1Size;
|
|
u32 partyCountOffset;
|
|
u32 partyOffset;
|
|
u32 warpFlagsOffset;
|
|
u32 trainerIdOffset;
|
|
u32 playerNameOffset;
|
|
u32 playerGenderOffset;
|
|
u32 frontierStatusOffset;
|
|
u32 frontierStatusOffset2;
|
|
u32 externalEventFlagsOffset;
|
|
u32 externalEventDataOffset;
|
|
u32 unk18;
|
|
const struct SpeciesInfo * speciesInfo;
|
|
const u8 (* abilityNames)[];
|
|
const u8 *const * abilityDescriptions;
|
|
const struct Item * items;
|
|
const struct BattleMove * moves;
|
|
const struct CompressedSpriteSheet * ballGfx;
|
|
const struct CompressedSpritePalette * ballPalettes;
|
|
u32 gcnLinkFlagsOffset;
|
|
u32 gameClearFlag;
|
|
u32 ribbonFlag;
|
|
u8 bagCountItems;
|
|
u8 bagCountKeyItems;
|
|
u8 bagCountPokeballs;
|
|
u8 bagCountTMHMs;
|
|
u8 bagCountBerries;
|
|
u8 pcItemsCount;
|
|
u32 pcItemsOffset;
|
|
u32 giftRibbonsOffset;
|
|
u32 enigmaBerryOffset;
|
|
u32 enigmaBerrySize;
|
|
const u8 *moveDescriptions;
|
|
u32 unk20;
|
|
};
|
|
|
|
// This seems to need to be in the text section for some reason.
|
|
// To avoid a changed section attributes warning it's put in a special .text.consts section.
|
|
__attribute__((section(".text.consts")))
|
|
static const struct GFRomHeader sGFRomHeader = {
|
|
.version = GAME_VERSION,
|
|
.language = GAME_LANGUAGE,
|
|
.gameName = "pokemon emerald version",
|
|
//.monFrontPics = gMonFrontPicTable, // Handled in gSpeciesInfo
|
|
//.monBackPics = gMonBackPicTable, // Handled in gSpeciesInfo
|
|
//.monNormalPalettes = gMonPaletteTable, // Handled in gSpeciesInfo
|
|
//.monShinyPalettes = gMonShinyPaletteTable, // Handled in gSpeciesInfo
|
|
//.monIcons = gMonIconTable,
|
|
//.monIconPaletteIds = gMonIconPaletteIndices,
|
|
.monIconPalettes = gMonIconPaletteTable,
|
|
//.monSpeciesNames = gSpeciesNames, // Handled in gSpeciesInfo
|
|
.moveNames = gMoveNames,
|
|
.decorations = gDecorations,
|
|
.flagsOffset = offsetof(struct SaveBlock1, flags),
|
|
.varsOffset = offsetof(struct SaveBlock1, vars),
|
|
.pokedexOffset = offsetof(struct SaveBlock2, pokedex),
|
|
.seen1Offset = offsetof(struct SaveBlock1, dexSeen),
|
|
.seen2Offset = offsetof(struct SaveBlock1, dexSeen), // dex flags are combined, just provide the same pointer
|
|
.pokedexVar = VAR_NATIONAL_DEX - VARS_START,
|
|
.pokedexFlag = FLAG_RECEIVED_POKEDEX_FROM_BIRCH,
|
|
.mysteryEventFlag = FLAG_SYS_MYSTERY_EVENT_ENABLE,
|
|
.pokedexCount = NATIONAL_DEX_COUNT,
|
|
.playerNameLength = PLAYER_NAME_LENGTH,
|
|
.trainerNameLength = TRAINER_NAME_LENGTH,
|
|
.pokemonNameLength1 = POKEMON_NAME_LENGTH,
|
|
.pokemonNameLength2 = POKEMON_NAME_LENGTH,
|
|
// Two of the below 12s are likely move/ability name length, given their presence in this header
|
|
.unk5 = 12,
|
|
.unk6 = 12,
|
|
.unk7 = 6,
|
|
.unk8 = 12,
|
|
.unk9 = 6,
|
|
.unk10 = 16,
|
|
.unk11 = 18,
|
|
.unk12 = 12,
|
|
.unk13 = 15,
|
|
.unk14 = 11,
|
|
.unk15 = 1,
|
|
.unk16 = 8,
|
|
.unk17 = 12,
|
|
.saveBlock2Size = sizeof(struct SaveBlock2),
|
|
.saveBlock1Size = sizeof(struct SaveBlock1),
|
|
.partyCountOffset = offsetof(struct SaveBlock1, playerPartyCount),
|
|
.partyOffset = offsetof(struct SaveBlock1, playerParty),
|
|
.warpFlagsOffset = offsetof(struct SaveBlock2, specialSaveWarpFlags),
|
|
.trainerIdOffset = offsetof(struct SaveBlock2, playerTrainerId),
|
|
.playerNameOffset = offsetof(struct SaveBlock2, playerName),
|
|
.playerGenderOffset = offsetof(struct SaveBlock2, playerGender),
|
|
.frontierStatusOffset = offsetof(struct SaveBlock2, frontier.challengeStatus),
|
|
.frontierStatusOffset2 = offsetof(struct SaveBlock2, frontier.challengeStatus),
|
|
.externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags),
|
|
.externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData),
|
|
.unk18 = 0x00000000,
|
|
.speciesInfo = gSpeciesInfo,
|
|
.abilityNames = gAbilityNames,
|
|
.abilityDescriptions = gAbilityDescriptionPointers,
|
|
.items = gItems,
|
|
.moves = gBattleMoves,
|
|
.ballGfx = gBallSpriteSheets,
|
|
.ballPalettes = gBallSpritePalettes,
|
|
.gcnLinkFlagsOffset = offsetof(struct SaveBlock2, gcnLinkFlags),
|
|
.gameClearFlag = FLAG_SYS_GAME_CLEAR,
|
|
.ribbonFlag = FLAG_SYS_RIBBON_GET,
|
|
.bagCountItems = BAG_ITEMS_COUNT,
|
|
.bagCountKeyItems = BAG_KEYITEMS_COUNT,
|
|
.bagCountPokeballs = BAG_POKEBALLS_COUNT,
|
|
.bagCountTMHMs = BAG_TMHM_COUNT,
|
|
.bagCountBerries = BAG_BERRIES_COUNT,
|
|
.pcItemsCount = PC_ITEMS_COUNT,
|
|
.pcItemsOffset = offsetof(struct SaveBlock1, pcItems),
|
|
.giftRibbonsOffset = offsetof(struct SaveBlock1, giftRibbons),
|
|
.enigmaBerryOffset = offsetof(struct SaveBlock1, enigmaBerry),
|
|
.enigmaBerrySize = sizeof(struct EnigmaBerry),
|
|
.moveDescriptions = NULL,
|
|
.unk20 = 0x00000000, // 0xFFFFFFFF in FRLG
|
|
};
|