From 67aa92710814dc504529a886957499d953cec47b Mon Sep 17 00:00:00 2001 From: The Gears of Progress Date: Tue, 24 Feb 2026 00:04:47 -0500 Subject: [PATCH] Revert "Release candidate" --- Makefile | 23 +- README.md | 16 +- audio/main_menu.xm | Bin 29137 -> 0 bytes docs/EZ_Flash_Omega_DE.md | 4 +- include/sound.h | 94 ------ source/custom_malloc.cpp | 5 - source/main.cpp | 39 ++- source/sound.c | 68 ----- .../include/gb_rom_values/gb_rom_values.h | 6 - .../src/gb_rom_values/gb_rom_values_fre.cpp | 2 +- .../src/gb_rom_values/gb_rom_values_ger.cpp | 282 ------------------ .../src/gb_rom_values/gb_rom_values_ita.cpp | 282 ------------------ .../src/gb_rom_values/gb_rom_values_spa.cpp | 282 ------------------ tools/payload-generator/src/main.cpp | 28 +- 14 files changed, 58 insertions(+), 1073 deletions(-) delete mode 100644 audio/main_menu.xm delete mode 100644 include/sound.h delete mode 100644 source/sound.c delete mode 100644 tools/payload-generator/src/gb_rom_values/gb_rom_values_ger.cpp delete mode 100644 tools/payload-generator/src/gb_rom_values/gb_rom_values_ita.cpp delete mode 100644 tools/payload-generator/src/gb_rom_values/gb_rom_values_spa.cpp diff --git a/Makefile b/Makefile index f5484be..52d2814 100644 --- a/Makefile +++ b/Makefile @@ -59,7 +59,6 @@ LIBPCCS := $(CURDIR)/PCCS # #--------------------------------------------------------------------------------- TARGET := $(notdir $(CURDIR))_mb -LOADERNAME := $(notdir $(CURDIR))_standalone BUILD := build GENERATED_DIR := $(BUILD)/generated SOURCES := source @@ -138,6 +137,11 @@ CPPFILES := $(sort $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) +#ifneq ($(strip $(MUSIC)),) +# export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) +# BINFILES += soundbank.bin +#endif + #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C #--------------------------------------------------------------------------------- @@ -158,13 +162,9 @@ export OFILES_GRAPHICS := $(PNGFILES:.png=.o) export OFILES := $(OFILES_SOURCES) $(OFILES_GRAPHICS) -ifneq ($(strip $(MUSIC)),) - export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) - BINFILES += soundbank.bin - OFILES += soundbank.bin.o -endif - -export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) $(PNGFILES:.png=.h) +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) $(PNGFILES:.png=.h) \ + $(CURDIR)/$(GENERATED_DIR)/translated_text.h \ + $(CURDIR)/$(GENERATED_DIR)/fonts.h export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ @@ -238,7 +238,6 @@ $(BUILD_STAMP): generate_data | $(BUILD) @mkdir -p loader/data @cp $(TARGET).gba loader/data/multiboot_rom.bin @$(MAKE) -C loader - @cp loader/loader.gba $(LOADERNAME).gba @touch $@ $(BUILD): @@ -250,8 +249,6 @@ clean: @$(MAKE) -C tools/payload-generator clean @$(MAKE) -C loader clean @$(MAKE) -C PCCS clean - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba $(LOADERNAME).gba data/ to_compress/ - @rm -f text_helper/output.json @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba data/ to_compress/ @rm -fr tools/text_helper/build @rm -fr $(GENERATED_DIR) @@ -283,9 +280,9 @@ $(OFILES_SOURCES) : $(HFILES) #--------------------------------------------------------------------------------- # rule to build soundbank from music files #--------------------------------------------------------------------------------- -soundbank.bin soundbank.h : $(AUDIOFILES) +#soundbank.bin soundbank.h : $(AUDIOFILES) #--------------------------------------------------------------------------------- - @mmutil $^ -osoundbank.bin -hsoundbank.h +# @mmutil $^ -osoundbank.bin -hsoundbank.h #--------------------------------------------------------------------------------- # This rule links in binary data with the .bin extension diff --git a/README.md b/README.md index f7efdf5..f680140 100644 --- a/README.md +++ b/README.md @@ -19,24 +19,14 @@ Poke Transporter GB supports original gen III cartridges AND the gen III games i Poké Transporter GB is a Multiboot program for the Game Boy Advance. There are 3 main ways to run the Poké Transporter GB ROM on a Game Boy Advance: -- Use a program such as FIX94's [GBA Link Cable ROM Sender](https://github.com/FIX94/gba-link-cable-rom-sender) on a GameCube or Wii running Homebrew along with a GBA GameCube Link Cable to send the Multiboot rom (Poke_Transporter_GB_mb.gba) to the gba over the link cable. - -- Upload the Multiboot ROM (Poke_Transporter_GB_mb.gba) to a GBA Flash Cart, launch the game in Multiboot mode (often by holding L when selecting the ROM), and swap the Game Pak after the program loads. - -- Copy the Loader ROM (Poke_Transporter_GB_standalone.gba) to a GBA Flash Cart and swap the Game Pak after the program loads. This is useful for flashcarts that don't support launching multiboot roms directly (SuperCard SD for example), although it should work on any flashcart. +- Use a program such as FIX94's [GBA Link Cable ROM Sender](https://github.com/FIX94/gba-link-cable-rom-sender) on a GameCube or Wii running Homebrew along with a GBA GameCube Link Cable +- Upload the Multiboot ROM to a GBA Flash Cart, launch the game in Multiboot mode (often by holding L when selecting the ROM), and swap the Game Pak after the program loads. +- Copy the loader.gba file to a GBA Flash Cart and swap the Game Pak after the program loads. This is useful for flashcarts that don't support launching multiboot roms directly (SuperCard SD for example), although it should work on any flashcart. EZ Flash Omega DE users, read [this](docs/EZ_Flash_Omega_DE.md)! Please note that transfering Pokémon will only work with a Game Boy Color Link Cable. Game Boy Advance Link Cables will not work. -NOTE: If you're using the Loader ROM (Poke_Transporter_GB_standalone.gba) instead of the Multiboot ROM (Poke_Transporter_GB_mb.gba), -you could run into trouble when swapping in the gen3 cartridge: Some cartridges cause the GBA to reset when inserted. - -If you have this problem, you could: -- Use the Multiboot ROM (Poke_Transporter_GB_mb.gba) instead (as described above) - -- Use the 2 GBA method as described [here](docs/EZ_Flash_Omega_DE.md#method-2-2-gbas) - ## Modifications to Transfered Pokémon Poké Transporter GB utilizes the Pokémon Community Conversion Standard for converting Pokémon from Generation 1 and 2 to Generation 3. You can view the documentation for the PCCS [here](https://github.com/GearsProgress/Pokemon-Community-Conversion-Standard)! diff --git a/audio/main_menu.xm b/audio/main_menu.xm deleted file mode 100644 index 5ca0021cd5caa4df089c4301e1adf763f690c242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29137 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 L5-0pOGKc>cXDLQ& diff --git a/docs/EZ_Flash_Omega_DE.md b/docs/EZ_Flash_Omega_DE.md index 18de35a..a865902 100644 --- a/docs/EZ_Flash_Omega_DE.md +++ b/docs/EZ_Flash_Omega_DE.md @@ -43,10 +43,10 @@ Requirements: - Gameboy Color link cable Steps: -- Make sure the Poke_Transporter_GB_standalone.gba is stored on the microSD card of the EZ Flash Omega DE +- Make sure the loader.gba is stored on the microSD card of the EZ Flash Omega DE - Make sure the pokémon game is stored on your EZ Flash' NOR flash. - Make sure the physical switch on the EZ Flash is set to mode A (the menu should show) -- Insert the EZ Flash in GBA 1 and launch Poke_Transporter_GB_standalone.gba +- Insert the EZ Flash in GBA 1 and launch loader.gba. - Press START on the splash screen. This popup should show: ![multiboot popup 1](images/multiboot_popup_1.png) - Press SELECT. This popup should show: diff --git a/include/sound.h b/include/sound.h deleted file mode 100644 index d94c2fd..0000000 --- a/include/sound.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _SOUND_H -#define _SOUND_H - -#include - -#include "soundbank.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* PTGBSFXHandle; - -/** - * @brief The API's defined here are a thin abstraction layer over the sound engine functions. - * This allows the underlying sound engine to be swapped out without affecting the rest of the codebase. - */ - -/** - * @brief This function initializes the sound engine and sets up a VBLANK handler - * to process audio every frame. It should be called during the initialization phase of the program. - */ -bool sound_init(void); - -/** - * @brief This function starts playing the song at the given index. - * If loop is true, the song will loop indefinitely until stopped or another song is played. - * - * @param song_index The index of the song to play. - * @param loop Whether the song should loop indefinitely. - */ -void play_song(u32 song_index, bool loop); - -/** - * @brief This function checks if a song is currently playing. - * - * @return true if a song is playing, false otherwise. - */ -bool is_song_playing(void); - -/** - * @brief This function stops the currently playing song. - */ -void stop_song(void); - -/** - * @brief This function plays the sound effect at the given index. - * Sound effects are typically short audio clips that play in response to specific events in the game, - * such as button presses or character actions. - * These are usually raw PCM samples (e.g., WAV files) - * - * To play a MOD- S3M- XM- or IT format based sound effect, - * use the play_jingle function instead. - */ -PTGBSFXHandle play_sound_effect(u32 sound_effect_index); - -/** - * @brief This function stops the given sound effect from playing and invalidates the handle - */ -void stop_sound_effect(PTGBSFXHandle handle); - -/** - * @brief This function stops all currently playing sound effects and resets - */ -void stop_all_sound_effects(void); - -/** - * @brief This function marks the sound effect as unimportant, - * allowing the sound engine to stop it if it needs to free up channels for new sound effects. - * - * It also invalidates the handle, so it should not be used after calling this function. - */ -void release_sound_effect(PTGBSFXHandle handle); - -/** - * @brief This function plays a jingle at the given index. - * A jingle is a sound effect that is based on a tracker format like MOD, S3M, XM, or IT. - * They can be played simultaneously with songs. - * If you want to play PCM-based sound effects (e.g., WAV files), use the play_sound_effect function instead. - * - * Note that jingles must be limited to 4 channels only. (https://blocksds.skylyrac.net/maxmod/group__gba__jingle__playback.html) - */ -void play_jingle(u32 jingle_index); - -/** - * @brief Checks if a jingle is actively playing. - */ -bool is_jingle_playing(void); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/source/custom_malloc.cpp b/source/custom_malloc.cpp index 2c5079a..e521f8c 100644 --- a/source/custom_malloc.cpp +++ b/source/custom_malloc.cpp @@ -201,9 +201,6 @@ void malloc_init_default_pool(void) memset(g_alloc_map, 0, sizeof(g_alloc_map)); // Clear bitmap } -extern "C" -{ - /// @brief The custom implementation of the bitmap allocator described at the top of this module. void* malloc(size_t size) { @@ -336,8 +333,6 @@ void _free_r(struct _reent *r, void* ptr) { return free(ptr); } -} - #else void malloc_init_default_pool(void) diff --git a/source/main.cpp b/source/main.cpp index 25fb047..9c69ab7 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,5 +1,6 @@ #include #include +// #include //Music #include "libstd_replacements.h" #include "flash_mem.h" #include "interrupt.h" @@ -29,7 +30,6 @@ #include "libraries/Pokemon-Gen3-to-Gen-X/include/save.h" #include "text_data_table.h" #include "custom_malloc.h" -#include "sound.h" /* @@ -53,6 +53,36 @@ bool skip = true; rom_data curr_GBA_rom; Button_Menu yes_no_menu(1, 2, 40, 24, false); +/* +int test_main(void) Music +{ + + irq_init(NULL); + // Initialize maxmod with default settings + // pass soundbank address, and allocate 8 channels. + + irq_set(II_VBLANK, mmVBlank, 0); + irq_enable(II_VBLANK); + + mmInitDefault((mm_addr)soundbank_bin, 8); + + mmStart(MOD_FLATOUTLIES, MM_PLAY_LOOP); + // Song is playing now (well... almost) + while (1) + { + // ..process game logic.. + + // Update Maxmod + mmFrame(); + + // Wait for new frame (SWI 5) + VBlankIntrWait(); + + // ..update graphical data.. + } +} +*/ + // (R + G*32 + B*1024) #define RGB(r, g, b) (r + (g * 32) + (b * 1024)) @@ -76,6 +106,8 @@ void initalization_script(void) { // Initalizations REG_DISPCNT = DCNT_BLANK | DCNT_MODE0 | DCNT_BG0 | DCNT_BG1 | DCNT_BG2 | DCNT_BG3 | DCNT_OBJ | DCNT_OBJ_1D; + irq_init(NULL); + irq_enable(II_VBLANK); // Disable for save data read/write REG_IME = 0; @@ -84,7 +116,9 @@ void initalization_script(void) // Sound bank init irq_init(NULL); irq_enable(II_VBLANK); - sound_init(); + // irq_set(II_VBLANK, mmVBlank, 0); //Music + // mmInitDefault((mm_addr)soundbank_bin, 8); //Music + // mmStart(MOD_FLATOUTLIES, MM_PLAY_LOOP); //Music // Graphics init oam_init(obj_buffer, 128); @@ -303,7 +337,6 @@ int main_menu_loop() general_text.decompress(get_compressed_text_table(GENERAL_INDEX)); - play_song(MOD_MAIN_MENU, true); while (true) { if (update) diff --git a/source/sound.c b/source/sound.c deleted file mode 100644 index 29bf420..0000000 --- a/source/sound.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include "sound.h" -#include "soundbank_bin.h" - -static void sound_irq_handler(void) -{ - mmVBlank(); - mmFrame(); -} - -bool sound_init(void) -{ - irq_add(II_VBLANK, sound_irq_handler); - - mm_addr soundbank = (mm_addr)soundbank_bin; - if (!soundbank) - { - return false; - } - - mmInitDefault(soundbank, 16); - return true; -} - -void play_song(u32 song_index, bool loop) -{ - mmStart(song_index, loop ? MM_PLAY_LOOP : MM_PLAY_ONCE); -} - -bool is_song_playing(void) -{ - return mmActive(); -} - -void stop_song(void) -{ - mmStop(); -} - -PTGBSFXHandle play_sound_effect(u32 sound_effect_index) -{ - return (PTGBSFXHandle)mmEffect(sound_effect_index); -} - -void stop_sound_effect(PTGBSFXHandle handle) -{ - mmEffectCancel((mm_sfxhand)handle); -} - -void stop_all_sound_effects(void) -{ - mmEffectCancelAll(); -} - -void release_sound_effect(PTGBSFXHandle handle) -{ - mmEffectRelease((mm_sfxhand)handle); -} - -void play_jingle(u32 jingle_index) -{ - mmJingle(jingle_index); -} - -bool is_jingle_playing(void) -{ - return mmActiveSub(); -} \ No newline at end of file diff --git a/tools/payload-generator/include/gb_rom_values/gb_rom_values.h b/tools/payload-generator/include/gb_rom_values/gb_rom_values.h index c2266aa..40a4886 100644 --- a/tools/payload-generator/include/gb_rom_values/gb_rom_values.h +++ b/tools/payload-generator/include/gb_rom_values/gb_rom_values.h @@ -7,11 +7,5 @@ extern const struct GB_ROM gb_rom_values_eng[]; extern const u16 gb_rom_values_eng_size; extern const struct GB_ROM gb_rom_values_fre[]; extern const u16 gb_rom_values_fre_size; -extern const struct GB_ROM gb_rom_values_ger[]; -extern const u16 gb_rom_values_ger_size; -extern const struct GB_ROM gb_rom_values_ita[]; -extern const u16 gb_rom_values_ita_size; -extern const struct GB_ROM gb_rom_values_spa[]; -extern const u16 gb_rom_values_spa_size; #endif \ No newline at end of file diff --git a/tools/payload-generator/src/gb_rom_values/gb_rom_values_fre.cpp b/tools/payload-generator/src/gb_rom_values/gb_rom_values_fre.cpp index a188f17..6ded699 100644 --- a/tools/payload-generator/src/gb_rom_values/gb_rom_values_fre.cpp +++ b/tools/payload-generator/src/gb_rom_values/gb_rom_values_fre.cpp @@ -231,7 +231,7 @@ const struct GB_ROM gb_rom_values_fre[] = { .textBorderHeight = 1, .padding_2 = 0 }, - { // FRE_CRYSTAL + { .language = FRE_ID, .version = CRYSTAL_ID, .generation = 2, diff --git a/tools/payload-generator/src/gb_rom_values/gb_rom_values_ger.cpp b/tools/payload-generator/src/gb_rom_values/gb_rom_values_ger.cpp deleted file mode 100644 index c325239..0000000 --- a/tools/payload-generator/src/gb_rom_values/gb_rom_values_ger.cpp +++ /dev/null @@ -1,282 +0,0 @@ -#include "gb_rom_values/gb_rom_values.h" - -const struct GB_ROM gb_rom_values_ger[] = { - { // GER_RED - .language = GER_ID, - .version = RED_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190F, - .CableClub_TextBoxBorder = 0x5ACD, - .placeString = 0x1955, - .Serial_ExchangeBytes = 0x216F, - ._RemovePokemon = 0x7B66, - .SaveSAVtoSRAM1 = 0x1C77BB, - .SaveSAVtoSRAM2 = 0x1C77E8, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35F0, - .SoftReset = 0x1F49, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // GER_BLUE - .language = GER_ID, - .version = BLUE_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190C, - .CableClub_TextBoxBorder = 0x5B41, - .placeString = 0x1952, - .Serial_ExchangeBytes = 0x216B, - ._RemovePokemon = 0x7BD9, - .SaveSAVtoSRAM1 = 0x1C77B3, - .SaveSAVtoSRAM2 = 0x1C77E0, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35F3, - .SoftReset = 0x1F45, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // GER_YELLOW - .language = GER_ID, - .version = YELLOW_ID, - .generation = 1, - .method = METHOD_MEW, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0x15, - .pointer_pkmn_name = 0xE3, - .padding_1 = 0, - - .clearScreen = 0x16DA, - .CableClub_TextBoxBorder = 0x5BE3, // TextBoxBoarder, since the Cable Club isn't loaded - .placeString = 0x1720, - .Serial_ExchangeBytes = 0x1FC7, - ._RemovePokemon = 0x7A69, - .SaveSAVtoSRAM1 = 0x1C7B03, - .SaveSAVtoSRAM2 = 0x1C7B27, - .OpenSRAM = 0x3E9C, - .SaveBox = 0, - .Bankswitch = 0x3E81, // BankswitchCommon - .SoftReset = 0x1D01, - .CloseSRAM = 0x3EAC, - .garbageDataLocation = 0x0161, - - .wRemoveMonFromBox = 0xCF94, - .wBoxCount = 0xDA7F, - .wWhichPokemon = 0xCF91, - .wBoxDataStart = 0xDA7F, - .wBoxDataEnd = 0xDEE1, - .wSerialEnemyDataBlock = 0xD892, - .wEnemyMonSpecies = 0xCFE4, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // GER_GOLD - .language = GER_ID, - .version = GOLD_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603F, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // GER_SILVER - .language = GER_ID, - .version = SILVER_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603D, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // GER_CRYSTAL - .language = GER_ID, - .version = CRYSTAL_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC544, - .stack_overwrite_location = 0xE0BB, // Found by seeing where 7622 is stored in the stack, 7622 is the code that calls PlaceString (PlaceTradePartnerNamesAndParty) - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000FDB, - .CableClub_TextBoxBorder = 0x0A4EEF, // LinkTextboxAtHL - .placeString = 0x001078, - .Serial_ExchangeBytes = 0x075F, - ._RemovePokemon = 0x036039, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x002FCB, - .SaveBox = 0x054E0C, - .Bankswitch = 0, - .SoftReset = 0x0150, // Reset - .CloseSRAM = 0, - .garbageDataLocation = 0x0770, - - .wRemoveMonFromBox = 0x01D10B, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD10, // sBoxCount - .wWhichPokemon = 0x01D109, // wCurPartyMon - .wBoxDataStart = 0x01AD10, // sBox - .wBoxDataEnd = 0x01B15E, // sBoxEnd - .wSerialEnemyDataBlock = 0xD26B, // wOTPartyData - .wEnemyMonSpecies = 0x01D206, - - .wSerialEnemyMonsPatchList = 0xC6D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD206, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCB, - - .transferStringLocation = 0xC544, - .textBorderUppLeft = 0xC52F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - } -}; - -const u16 gb_rom_values_ger_size = static_cast(sizeof(gb_rom_values_ger) / sizeof(struct GB_ROM)); \ No newline at end of file diff --git a/tools/payload-generator/src/gb_rom_values/gb_rom_values_ita.cpp b/tools/payload-generator/src/gb_rom_values/gb_rom_values_ita.cpp deleted file mode 100644 index 5688413..0000000 --- a/tools/payload-generator/src/gb_rom_values/gb_rom_values_ita.cpp +++ /dev/null @@ -1,282 +0,0 @@ -#include "gb_rom_values/gb_rom_values.h" - -const struct GB_ROM gb_rom_values_ita[] = { - { // ITA_RED - .language = ITA_ID, - .version = RED_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190F, - .CableClub_TextBoxBorder = 0x5B0E, - .placeString = 0x1955, - .Serial_ExchangeBytes = 0x216F, - ._RemovePokemon = 0x7B7E, - .SaveSAVtoSRAM1 = 0x1C7823, - .SaveSAVtoSRAM2 = 0x1C7850, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35EE, - .SoftReset = 0x1F49, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // ITA_BLUE - .language = ITA_ID, - .version = BLUE_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190C, - .CableClub_TextBoxBorder = 0x5B41, - .placeString = 0x1952, - .Serial_ExchangeBytes = 0x216B, - ._RemovePokemon = 0x7BD9, - .SaveSAVtoSRAM1 = 0x1C77B3, - .SaveSAVtoSRAM2 = 0x1C77E0, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35F3, - .SoftReset = 0x1F45, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // ITA_YELLOW - .language = ITA_ID, - .version = YELLOW_ID, - .generation = 1, - .method = METHOD_MEW, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0x15, - .pointer_pkmn_name = 0xE3, - .padding_1 = 0, - - .clearScreen = 0x16DA, - .CableClub_TextBoxBorder = 0x5BE3, // TextBoxBoarder, since the Cable Club isn't loaded - .placeString = 0x1720, - .Serial_ExchangeBytes = 0x1FC7, - ._RemovePokemon = 0x7A69, - .SaveSAVtoSRAM1 = 0x1C7B03, - .SaveSAVtoSRAM2 = 0x1C7B27, - .OpenSRAM = 0x3E9C, - .SaveBox = 0, - .Bankswitch = 0x3E81, // BankswitchCommon - .SoftReset = 0x1D01, - .CloseSRAM = 0x3EAC, - .garbageDataLocation = 0x0161, - - .wRemoveMonFromBox = 0xCF94, - .wBoxCount = 0xDA7F, - .wWhichPokemon = 0xCF91, - .wBoxDataStart = 0xDA7F, - .wBoxDataEnd = 0xDEE1, - .wSerialEnemyDataBlock = 0xD892, - .wEnemyMonSpecies = 0xCFE4, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // ITA_GOLD - .language = ITA_ID, - .version = GOLD_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603F, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // ITA_SILVER - .language = ITA_ID, - .version = SILVER_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603D, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // ITA_CRYSTAL - .language = ITA_ID, - .version = CRYSTAL_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC544, - .stack_overwrite_location = 0xE0BB, // Found by seeing where 7622 is stored in the stack, 7622 is the code that calls PlaceString (PlaceTradePartnerNamesAndParty) - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000FDB, - .CableClub_TextBoxBorder = 0x0A4EEF, // LinkTextboxAtHL - .placeString = 0x001078, - .Serial_ExchangeBytes = 0x075F, - ._RemovePokemon = 0x036039, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x002FCB, - .SaveBox = 0x054E0C, - .Bankswitch = 0, - .SoftReset = 0x0150, // Reset - .CloseSRAM = 0, - .garbageDataLocation = 0x0770, - - .wRemoveMonFromBox = 0x01D10B, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD10, // sBoxCount - .wWhichPokemon = 0x01D109, // wCurPartyMon - .wBoxDataStart = 0x01AD10, // sBox - .wBoxDataEnd = 0x01B15E, // sBoxEnd - .wSerialEnemyDataBlock = 0xD26B, // wOTPartyData - .wEnemyMonSpecies = 0x01D206, - - .wSerialEnemyMonsPatchList = 0xC6D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD206, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCB, - - .transferStringLocation = 0xC544, - .textBorderUppLeft = 0xC52F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - } -}; - -const u16 gb_rom_values_ita_size = static_cast(sizeof(gb_rom_values_ita) / sizeof(struct GB_ROM)); \ No newline at end of file diff --git a/tools/payload-generator/src/gb_rom_values/gb_rom_values_spa.cpp b/tools/payload-generator/src/gb_rom_values/gb_rom_values_spa.cpp deleted file mode 100644 index 7d21742..0000000 --- a/tools/payload-generator/src/gb_rom_values/gb_rom_values_spa.cpp +++ /dev/null @@ -1,282 +0,0 @@ -#include "gb_rom_values/gb_rom_values.h" - -const struct GB_ROM gb_rom_values_spa[] = { - { // SPA_RED - .language = SPA_ID, - .version = RED_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190F, - .CableClub_TextBoxBorder = 0x5B00, - .placeString = 0x1955, - .Serial_ExchangeBytes = 0x216E, - ._RemovePokemon = 0x7BBB, - .SaveSAVtoSRAM1 = 0x1C77D0, - .SaveSAVtoSRAM2 = 0x1C77FD, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35F5, - .SoftReset = 0x1F48, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // SPA_BLUE - .language = SPA_ID, - .version = BLUE_ID, - .generation = 1, - .method = METHOD_NEWLINE, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0xE3, - .pointer_pkmn_name = 0xFC, - .padding_1 = 0, - - .clearScreen = 0x190C, - .CableClub_TextBoxBorder = 0x5B41, - .placeString = 0x1952, - .Serial_ExchangeBytes = 0x216B, - ._RemovePokemon = 0x7BD9, - .SaveSAVtoSRAM1 = 0x1C77B3, - .SaveSAVtoSRAM2 = 0x1C77E0, - .OpenSRAM = 0, - .SaveBox = 0, - .Bankswitch = 0x35F3, - .SoftReset = 0x1F45, - .CloseSRAM = 0, - .garbageDataLocation = 0x1F8E, - - .wRemoveMonFromBox = 0xCF9A, - .wBoxCount = 0xDA85, - .wWhichPokemon = 0xCF95, - .wBoxDataStart = 0xDA85, - .wBoxDataEnd = 0xDEE7, - .wSerialEnemyDataBlock = 0xD898, - .wEnemyMonSpecies = 0xCFEA, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // SPA_YELLOW - .language = SPA_ID, - .version = YELLOW_ID, - .generation = 1, - .method = METHOD_MEW, - .payload_size = 637, - .box_data_size = 0x462, - - .print_string_start = 0xC456, - .stack_overwrite_location = 0xDFDD, - .short_pkmn_name = 0x15, - .pointer_pkmn_name = 0xE3, - .padding_1 = 0, - - .clearScreen = 0x16DA, - .CableClub_TextBoxBorder = 0x5BE3, // TextBoxBoarder, since the Cable Club isn't loaded - .placeString = 0x1720, - .Serial_ExchangeBytes = 0x1FC7, - ._RemovePokemon = 0x7A69, - .SaveSAVtoSRAM1 = 0x1C7B03, - .SaveSAVtoSRAM2 = 0x1C7B27, - .OpenSRAM = 0x3E9C, - .SaveBox = 0, - .Bankswitch = 0x3E81, // BankswitchCommon - .SoftReset = 0x1D01, - .CloseSRAM = 0x3EAC, - .garbageDataLocation = 0x0161, - - .wRemoveMonFromBox = 0xCF94, - .wBoxCount = 0xDA7F, - .wWhichPokemon = 0xCF91, - .wBoxDataStart = 0xDA7F, - .wBoxDataEnd = 0xDEE1, - .wSerialEnemyDataBlock = 0xD892, - .wEnemyMonSpecies = 0xCFE4, - - .wSerialEnemyMonsPatchList = 0xC5D0, - .wSerialOtherGameboyRandomNumberListBlock = 0xCD81, - .hSerialConnectionStatus = 0xFFAA, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // SPA_GOLD - .language = SPA_ID, - .version = GOLD_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603F, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // SPA_SILVER - .language = SPA_ID, - .version = SILVER_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC442, - .stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000EE2, - .CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL - .placeString = 0x000F74, - .Serial_ExchangeBytes = 0x0710, - ._RemovePokemon = 0x03603D, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x0030E1, - .SaveBox = 0x054DF6, - .Bankswitch = 0, - .SoftReset = 0x05B0, - .CloseSRAM = 0, - .garbageDataLocation = 0x0654, - - .wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD6C, // sBoxCount - .wWhichPokemon = 0x01D005, // wCurPartyMon - .wBoxDataStart = 0xAD6C, // sBoxStart - .wBoxDataEnd = 0xB1BA, // sBoxEnd - .wSerialEnemyDataBlock = 0xDD40, // wOTPartyData - .wEnemyMonSpecies = 0x01D0EF, - - .wSerialEnemyMonsPatchList = 0xC5D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD0EF, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCD, - - .transferStringLocation = 0xC444, - .textBorderUppLeft = 0xC42F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - }, - { // SPA_CRYSTAL - .language = SPA_ID, - .version = CRYSTAL_ID, - .generation = 2, - .method = METHOD_GEN2, - .payload_size = 672, - .box_data_size = 0x44E, - - .print_string_start = 0xC544, - .stack_overwrite_location = 0xE0BB, // Found by seeing where 7622 is stored in the stack, 7622 is the code that calls PlaceString (PlaceTradePartnerNamesAndParty) - .short_pkmn_name = 0x4E, - .pointer_pkmn_name = 0, - .padding_1 = 0, - - .clearScreen = 0x000FDB, - .CableClub_TextBoxBorder = 0x0A4EEF, // LinkTextboxAtHL - .placeString = 0x001078, - .Serial_ExchangeBytes = 0x075F, - ._RemovePokemon = 0x036039, // RemoveMonFromPartyOrBox - .SaveSAVtoSRAM1 = 0, - .SaveSAVtoSRAM2 = 0, - .OpenSRAM = 0x002FCB, - .SaveBox = 0x054E0C, - .Bankswitch = 0, - .SoftReset = 0x0150, // Reset - .CloseSRAM = 0, - .garbageDataLocation = 0x0770, - - .wRemoveMonFromBox = 0x01D10B, // wPokemonWithdrawDepositParameter - .wBoxCount = 0x01AD10, // sBoxCount - .wWhichPokemon = 0x01D109, // wCurPartyMon - .wBoxDataStart = 0x01AD10, // sBox - .wBoxDataEnd = 0x01B15E, // sBoxEnd - .wSerialEnemyDataBlock = 0xD26B, // wOTPartyData - .wEnemyMonSpecies = 0x01D206, - - .wSerialEnemyMonsPatchList = 0xC6D0, // wOTPatchLists - .wSerialOtherGameboyRandomNumberListBlock = 0xD206, // wOTLinkBattleRNData - .hSerialConnectionStatus = 0xFFCB, - - .transferStringLocation = 0xC544, - .textBorderUppLeft = 0xC52F, - .textBorderWidth = 12, - .textBorderHeight = 1, - .padding_2 = 0 - } -}; - -const u16 gb_rom_values_spa_size = static_cast(sizeof(gb_rom_values_spa) / sizeof(struct GB_ROM)); \ No newline at end of file diff --git a/tools/payload-generator/src/main.cpp b/tools/payload-generator/src/main.cpp index 1234c19..fe447ec 100644 --- a/tools/payload-generator/src/main.cpp +++ b/tools/payload-generator/src/main.cpp @@ -26,19 +26,11 @@ void generate_payloads_for(uint8_t generation, bool yellow_version, const char * const struct GB_ROM *rom_value_sets[] = { gb_rom_values_eng, - gb_rom_values_fre, - gb_rom_values_ger, - gb_rom_values_ita, - gb_rom_values_spa, - }; + gb_rom_values_fre}; const u16 rom_value_sizes[] = { gb_rom_values_eng_size, - gb_rom_values_fre_size, - gb_rom_values_ger_size, - gb_rom_values_ita_size, - gb_rom_values_spa_size, - }; + gb_rom_values_fre_size}; const u8 num_elements = sizeof(rom_value_sizes) / sizeof(u16); @@ -91,7 +83,7 @@ void generate_payloads_for(uint8_t generation, bool yellow_version, const char * void test_payloads(const char *full_path) { - uint8_t buffer[4096]; // 4096 bytes is enough for the payloads + uint8_t buffer[2048]; // 2048 bytes is enough for the payloads uint8_t reference_payload_buffer[PAYLOAD_SIZE]; uint8_t reconstructed_payload_buffer[PAYLOAD_SIZE]; FILE *file; @@ -108,19 +100,11 @@ void test_payloads(const char *full_path) const struct GB_ROM *rom_value_sets[] = { gb_rom_values_eng, - gb_rom_values_fre, - gb_rom_values_ger, - gb_rom_values_ita, - gb_rom_values_spa, - }; + gb_rom_values_fre}; const u16 rom_value_sizes[] = { gb_rom_values_eng_size, - gb_rom_values_fre_size, - gb_rom_values_ger_size, - gb_rom_values_ita_size, - gb_rom_values_spa_size, - }; + gb_rom_values_fre_size}; const u8 num_elements = sizeof(rom_value_sizes) / sizeof(u16); @@ -204,7 +188,7 @@ int main(int argc, char **argv) { printf("Converting data into bin files!\n["); const char *output_path = (argc > 1) ? argv[1] : ""; - + generate_and_test_payloads_for(1, false, output_path, "gb_gen1_payloads_RB.bin"); generate_and_test_payloads_for(1, true, output_path, "gb_gen1_payloads_Y.bin"); generate_and_test_payloads_for(2, false, output_path, "gb_gen2_payloads.bin");