Convert GF ROM header to C

This commit is contained in:
GriffinR 2021-11-01 01:42:02 -04:00
parent dac4192fd3
commit ef2971d8dc
7 changed files with 189 additions and 89 deletions

View file

@ -29,6 +29,7 @@ struct BagPocket
u8 capacity;
};
extern const struct Item gItems[];
extern struct BagPocket gBagPockets[];
void ApplyNewEncryptionKeyToBagItems(u32 newKey);

View file

@ -26,6 +26,8 @@ enum {
BALL_AFFINE_ANIM_4
};
extern const struct CompressedSpriteSheet gBallSpriteSheets[];
extern const struct CompressedSpritePalette gBallSpritePalettes[];
extern const struct SpriteTemplate gBallSpriteTemplates[];
#define POKEBALL_PLAYER_SENDOUT 0xFF

View file

@ -2,6 +2,8 @@
#define GUARD_POKEMON_ICON_H
extern const u8 gMonIconPaletteIndices[];
extern const u8 *const gMonIconTable[];
extern const struct SpritePalette gMonIconPaletteTable[];
const u8 *GetMonIconTiles(u16 species, bool32);
void TryLoadAllMonIconPalettesAtOffset(u16 offset);

View file

@ -3,6 +3,7 @@
.syntax unified
.arm
.align 2, 0
.global Init
Init: @ 8000204

View file

@ -40,3 +40,24 @@ RomHeaderChecksum:
RomHeaderReserved2:
.space 2
@ 80000C0
.word 0
.global GPIOPortData
GPIOPortData: @ 80000C4
.2byte 0
.global GPIOPortDirection
GPIOPortDirection: @ 80000C6
.2byte 0
.global GPIOPortReadEnable
GPIOPortReadEnable: @ 80000C8
.2byte 0
@ 80000CA
.2byte 0
@ 80000CC
.space 0x34

162
src/rom_header_gf.c Normal file
View file

@ -0,0 +1,162 @@
#include "global.h"
#include "data.h"
#include "pokemon_icon.h"
#include "decoration.h"
#include "battle_main.h"
#include "item.h"
#include "pokeball.h"
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 unk_01;
u32 unk_02;
u32 unk_03;
u32 dexCount;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
u8 unk_08;
u8 unk_09;
u8 unk_0A;
u8 unk_0B;
u8 unk_0C;
u8 unk_0D;
u8 unk_0E;
u8 unk_0F;
u8 unk_10;
u8 unk_11;
u8 unk_12;
u8 unk_13;
u8 unk_14;
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 unk_15;
const struct BaseStats * baseStats;
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 unk_16;
u32 unk_17;
u8 unk_18;
u8 unk_19;
u8 unk_1A;
u8 unk_1B;
u32 unk_1C;
u32 pcItemsOffset;
u32 giftRibbonsOffset;
u32 enigmaBerryOffset;
u32 mapViewOffset;
u32 unk_1D;
u32 unk_1E;
};
__attribute__((section(".text")))
static const struct GFRomHeader sGFRomHeader = {
.version = GAME_VERSION,
.language = GAME_LANGUAGE,
.gameName = "pokemon emerald version",
.monFrontPics = gMonFrontPicTable,
.monBackPics = gMonBackPicTable,
.monNormalPalettes = gMonPaletteTable,
.monShinyPalettes = gMonShinyPaletteTable,
.monIcons = gMonIconTable,
.monIconPaletteIds = gMonIconPaletteIndices,
.monIconPalettes = gMonIconPaletteTable,
.monSpeciesNames = gSpeciesNames,
.moveNames = gMoveNames,
.decorations = gDecorations,
.flagsOffset = offsetof(struct SaveBlock1, flags),
.varsOffset = offsetof(struct SaveBlock1, vars),
.pokedexOffset = offsetof(struct SaveBlock2, pokedex),
.seen1Offset = offsetof(struct SaveBlock1, seen1),
.seen2Offset = offsetof(struct SaveBlock1, seen2),
.unk_01 = 0x00000046,
.unk_02 = 0x000008e4,
.unk_03 = 0x000008ac,
.dexCount = NATIONAL_DEX_COUNT,
.unk_04 = 0x07,
.unk_05 = 0x0a,
.unk_06 = 0x0a,
.unk_07 = 0x0a,
.unk_08 = 0x0c,
.unk_09 = 0x0c,
.unk_0A = 0x06,
.unk_0B = 0x0c,
.unk_0C = 0x06,
.unk_0D = 0x10,
.unk_0E = 0x12,
.unk_0F = 0x0c,
.unk_10 = 0x0f,
.unk_11 = 0x0b,
.unk_12 = 0x01,
.unk_13 = 0x08,
.unk_14 = 0x0c,
.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),
.unk_15 = 0x00000000,
.baseStats = gBaseStats,
.abilityNames = gAbilityNames,
.abilityDescriptions = gAbilityDescriptionPointers,
.items = gItems,
.moves = gBattleMoves,
.ballGfx = gBallSpriteSheets,
.ballPalettes = gBallSpritePalettes,
.gcnLinkFlagsOffset = offsetof(struct SaveBlock2, gcnLinkFlags),
.unk_16 = 0x00000864,
.unk_17 = 0x0000089b,
.unk_18 = 0x1e,
.unk_19 = 0x1e,
.unk_1A = 0x10,
.unk_1B = 0x40,
.unk_1C = 0x0000322e, // offsetof(struct SaveBlock1, ? part-way into mysteryGift)
.pcItemsOffset = offsetof(struct SaveBlock1, pcItems),
.giftRibbonsOffset = offsetof(struct SaveBlock1, giftRibbons),
.enigmaBerryOffset = offsetof(struct SaveBlock1, enigmaBerry),
.mapViewOffset = offsetof(struct SaveBlock1, mapView),
.unk_1D = 0x00000000,
.unk_1E = 0x00000000,
};

View file

@ -1,89 +0,0 @@
#include "constants/global.h"
@ 80000C0
.word 0
.global GPIOPortData
GPIOPortData: @ 80000C4
.2byte 0
.global GPIOPortDirection
GPIOPortDirection: @ 80000C6
.2byte 0
.global GPIOPortReadEnable
GPIOPortReadEnable: @ 80000C8
.2byte 0
@ 80000CA
.2byte 0
@ 80000CC
.space 0x34
.4byte GAME_VERSION
.4byte GAME_LANGUAGE
.ascii "pokemon emerald version"
.space 9
.4byte gMonFrontPicTable
.4byte gMonBackPicTable
.4byte gMonPaletteTable
.4byte gMonShinyPaletteTable
.4byte gMonIconTable
.4byte gMonIconPaletteIndices
.4byte gMonIconPaletteTable
.4byte gSpeciesNames
.4byte gMoveNames
.4byte gDecorations
.4byte 0x00001270 @ offsetof(struct SaveBlock1, flags)
.4byte 0x0000139c @ offsetof(struct SaveBlock1, vars)
.4byte 0x00000018 @ offsetof(struct SaveBlock2, pokedex)
.4byte 0x00000988 @ offsetof(struct SaveBlock1, seen1)
.4byte 0x00003b24 @ offsetof(struct SaveBlock1, seen2)
.4byte 0x00000046 @ ?
.4byte 0x000008e4 @ ?
.4byte 0x000008ac @ ?
.4byte 0x00000182 @ NATIONAL_DEX_COUNT?
.byte 0x07, 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x06, 0x0c
.byte 0x06, 0x10, 0x12, 0x0c, 0x0f, 0x0b, 0x01, 0x08
.4byte 0x0000000c @ ?
.4byte 0x00000f2c @ sizeof(struct SaveBlock2)
.4byte 0x00003d88 @ sizeof(struct SaveBlock1)
.4byte 0x00000234 @ offsetof(struct SaveBlock1, playerPartyCount)
.4byte 0x00000238 @ offsetof(struct SaveBlock1, playerParty)
.4byte 0x00000009 @ offsetof(struct SaveBlock2, specialSaveWarpFlags)
.4byte 0x0000000a @ offsetof(struct SaveBlock2, playerTrainerId)
.4byte 0x00000000 @ offsetof(struct SaveBlock2, playerName)
.4byte 0x00000008 @ offsetof(struct SaveBlock2, playerGender)
.4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus)
.4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus)
.4byte 0x000031c7 @ offsetof(struct SaveBlock1, externalEventFlags)
.4byte 0x000031b3 @ offsetof(struct SaveBlock1, externalEventData)
.4byte 0x00000000
.4byte gBaseStats
.4byte gAbilityNames
.4byte gAbilityDescriptionPointers
.4byte gItems
.4byte gBattleMoves
.4byte gBallSpriteSheets
.4byte gBallSpritePalettes
.4byte 0x000000a8 @ offsetof(struct SaveBlock2, gcnLinkFlags)
.4byte 0x00000864 @ ?
.4byte 0x0000089b @ ?
.byte 0x1e, 0x1e, 0x10, 0x40
.4byte 0x0000322e @ offsetof(struct SaveBlock1, ? part-way into mysteryGift)
.4byte 0x00000498 @ offsetof(struct SaveBlock1, pcItems)
.4byte 0x000031a8 @ offsetof(struct SaveBlock1, giftRibbons)
.4byte 0x000031f8 @ offsetof(struct SaveBlock1, enigmaBerry)
.4byte 0x00000034 @ offsetof(struct SaveBlock1, mapView)
.4byte 0x00000000
.4byte 0x00000000