summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-11-01 01:42:02 -0400
committerGriffinR <griffin.g.richards@gmail.com>2021-11-01 01:42:02 -0400
commitef2971d8dcc0768265d9b8c0eec40ea55251db8b (patch)
tree6d7ff64d528aa8241a28ee0a99247a8a28e6f487 /src
parentdac4192fd3b875706a7f1ce8bfb97c813ea503de (diff)
Convert GF ROM header to C
Diffstat (limited to 'src')
-rw-r--r--src/crt0.s1
-rw-r--r--src/rom_header.s21
-rw-r--r--src/rom_header_gf.c162
-rw-r--r--src/rom_header_gf.s89
4 files changed, 184 insertions, 89 deletions
diff --git a/src/crt0.s b/src/crt0.s
index 6e3b86a72..7c679c13b 100644
--- a/src/crt0.s
+++ b/src/crt0.s
@@ -3,6 +3,7 @@
.syntax unified
.arm
+
.align 2, 0
.global Init
Init: @ 8000204
diff --git a/src/rom_header.s b/src/rom_header.s
index 596fd379f..5ed45124d 100644
--- a/src/rom_header.s
+++ b/src/rom_header.s
@@ -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
diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c
new file mode 100644
index 000000000..dc61fa1e3
--- /dev/null
+++ b/src/rom_header_gf.c
@@ -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,
+};
+
diff --git a/src/rom_header_gf.s b/src/rom_header_gf.s
deleted file mode 100644
index b021158f5..000000000
--- a/src/rom_header_gf.s
+++ /dev/null
@@ -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