From b9dec717dad61bcbc5a1a7e3bdc8dddad85a699f Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sun, 12 May 2024 14:34:43 +0100 Subject: [PATCH 1/7] Spring cleaning --- README.md | 9 +- include/constants/songs.h | 180 +++++++++++++++++++------------------- 2 files changed, 92 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index 28767e8c0..0dc5dee72 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,8 @@ # Pokémon FireRed and LeafGreen -[![Build Status][travis-badge]][travis] +This is a decompilation of English Pokémon FireRed and LeafGreen. -[travis]: https://travis-ci.org/pret/pokefirered -[travis-badge]: https://travis-ci.org/pret/pokefirered.svg?branch=master - -This is a disassembly of Pokémon FireRed and LeafGreen. - -It builds the following ROMs: +It builds the following ROM images: * [**pokefirered.gba**](https://datomatic.no-intro.org/?page=show_record&s=23&n=1616) `sha1: 41cb23d8dccc8ebd7c649cd8fbb58eeace6e2fdc` * [**pokeleafgreen.gba**](https://datomatic.no-intro.org/?page=show_record&s=23&n=1617) `sha1: 574fa542ffebb14be69902d1d36f1ec0a4afd71e` diff --git a/include/constants/songs.h b/include/constants/songs.h index 7addf89ec..4f5fc3cc6 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -244,21 +244,21 @@ #define SE_M_HAZE 239 // SE_W114 #define SE_M_HYPER_BEAM2 240 // SE_W063B // New FRLG SFX -#define SE_DOOR 241 // SE_RG_W_DOOR -#define SE_CARD_FLIP 242 // SE_RG_CARD1 -#define SE_CARD_FLIPPING 243 // SE_RG_CARD2 -#define SE_CARD_OPEN 244 // SE_RG_CARD3 -#define SE_BAG_CURSOR 245 // SE_RG_BAG1 -#define SE_BAG_POCKET 246 // SE_RG_BAG2 -#define SE_BALL_CLICK 247 // SE_RG_GETTING -#define SE_SHOP 248 // SE_RG_SHOP -#define SE_SS_ANNE_HORN 249 // SE_RG_KITEKI -#define SE_HELP_OPEN 250 // SE_RG_HELP_OP -#define SE_HELP_CLOSE 251 // SE_RG_HELP_CL -#define SE_HELP_ERROR 252 // SE_RG_HELP_NG -#define SE_DEOXYS_MOVE 253 // SE_RG_DEOMOV -#define SE_POKE_JUMP_SUCCESS 254 // SE_RG_EXCELLENT -#define SE_POKE_JUMP_FAILURE 255 // SE_RG_NAWAMISS +#define SE_DOOR 241 // SE_W_DOOR +#define SE_CARD_FLIP 242 // SE_CARD1 +#define SE_CARD_FLIPPING 243 // SE_CARD2 +#define SE_CARD_OPEN 244 // SE_CARD3 +#define SE_BAG_CURSOR 245 // SE_BAG1 +#define SE_BAG_POCKET 246 // SE_BAG2 +#define SE_BALL_CLICK 247 // SE_GETTING +#define SE_SHOP 248 // SE_SHOP +#define SE_SS_ANNE_HORN 249 // SE_KITEKI +#define SE_HELP_OPEN 250 // SE_HELP_OP +#define SE_HELP_CLOSE 251 // SE_HELP_CL +#define SE_HELP_ERROR 252 // SE_HELP_NG +#define SE_DEOXYS_MOVE 253 // SE_DEOMOV +#define SE_POKE_JUMP_SUCCESS 254 // SE_EXCELLENT +#define SE_POKE_JUMP_FAILURE 255 // SE_NAWAMISS // Music kept from RS #define MUS_HEAL 256 // MUS_ME_ASA #define MUS_LEVEL_UP 257 // MUS_FANFA1 @@ -277,81 +277,81 @@ #define MUS_MOVE_DELETED 270 // MUS_ME_WASURE #define MUS_TOO_BAD 271 // MUS_ME_ZANNEN // New FRLG Music -#define MUS_FOLLOW_ME 272 // MUS_RG_ANNAI -#define MUS_GAME_CORNER 273 // MUS_RG_SLOT -#define MUS_ROCKET_HIDEOUT 274 // MUS_RG_AJITO -#define MUS_GYM 275 // MUS_RG_GYM -#define MUS_JIGGLYPUFF 276 // MUS_RG_PURIN -#define MUS_INTRO_FIGHT 277 // MUS_RG_DEMO -#define MUS_TITLE 278 // MUS_RG_TITLE -#define MUS_CINNABAR 279 // MUS_RG_GUREN -#define MUS_LAVENDER 280 // MUS_RG_SHION -#define MUS_HEAL_UNUSED 281 // MUS_RG_KAIHUKU -#define MUS_CYCLING 282 // MUS_RG_CYCLING -#define MUS_ENCOUNTER_ROCKET 283 // MUS_RG_ROCKET -#define MUS_ENCOUNTER_GIRL 284 // MUS_RG_SHOUJO -#define MUS_ENCOUNTER_BOY 285 // MUS_RG_SHOUNEN -#define MUS_HALL_OF_FAME 286 // MUS_RG_DENDOU -#define MUS_VIRIDIAN_FOREST 287 // MUS_RG_T_MORI -#define MUS_MT_MOON 288 // MUS_RG_OTSUKIMI -#define MUS_POKE_MANSION 289 // MUS_RG_POKEYASHI -#define MUS_CREDITS 290 // MUS_RG_ENDING -#define MUS_ROUTE1 291 // MUS_RG_LOAD01 -#define MUS_ROUTE24 292 // MUS_RG_OPENING -#define MUS_ROUTE3 293 // MUS_RG_LOAD02 -#define MUS_ROUTE11 294 // MUS_RG_LOAD03 -#define MUS_VICTORY_ROAD 295 // MUS_RG_CHAMP_R -#define MUS_VS_GYM_LEADER 296 // MUS_RG_VS_GYM -#define MUS_VS_TRAINER 297 // MUS_RG_VS_TORE -#define MUS_VS_WILD 298 // MUS_RG_VS_YASEI -#define MUS_VS_CHAMPION 299 // MUS_RG_VS_LAST -#define MUS_PALLET 300 // MUS_RG_MASARA -#define MUS_OAK_LAB 301 // MUS_RG_KENKYU -#define MUS_OAK 302 // MUS_RG_OHKIDO -#define MUS_POKE_CENTER 303 // MUS_RG_POKECEN -#define MUS_SS_ANNE 304 // MUS_RG_SANTOAN -#define MUS_SURF 305 // MUS_RG_NAMINORI -#define MUS_POKE_TOWER 306 // MUS_RG_P_TOWER -#define MUS_SILPH 307 // MUS_RG_SHIRUHU -#define MUS_FUCHSIA 308 // MUS_RG_HANADA -#define MUS_CELADON 309 // MUS_RG_TAMAMUSI -#define MUS_VICTORY_TRAINER 310 // MUS_RG_WIN_TRE -#define MUS_VICTORY_WILD 311 // MUS_RG_WIN_YASEI -#define MUS_VICTORY_GYM_LEADER 312 // MUS_RG_WIN_GYM -#define MUS_VERMILLION 313 // MUS_RG_KUCHIBA -#define MUS_PEWTER 314 // MUS_RG_NIBI -#define MUS_ENCOUNTER_RIVAL 315 // MUS_RG_RIVAL1 -#define MUS_RIVAL_EXIT 316 // MUS_RG_RIVAL2 -#define MUS_DEX_RATING 317 // MUS_RG_FAN2 -#define MUS_OBTAIN_KEY_ITEM 318 // MUS_RG_FAN5 -#define MUS_CAUGHT_INTRO 319 // MUS_RG_FAN6 -#define MUS_PHOTO 320 // MUS_ME_RG_PHOTO -#define MUS_GAME_FREAK 321 // MUS_RG_TITLEROG -#define MUS_CAUGHT 322 // MUS_RG_GET_YASEI -#define MUS_NEW_GAME_INSTRUCT 323 // MUS_RG_SOUSA -#define MUS_NEW_GAME_INTRO 324 // MUS_RG_SEKAIKAN -#define MUS_NEW_GAME_EXIT 325 // MUS_RG_SEIBETU -#define MUS_POKE_JUMP 326 // MUS_RG_JUMP -#define MUS_UNION_ROOM 327 // MUS_RG_UNION -#define MUS_NET_CENTER 328 // MUS_RG_NETWORK -#define MUS_MYSTERY_GIFT 329 // MUS_RG_OKURIMONO -#define MUS_BERRY_PICK 330 // MUS_RG_KINOMIKUI -#define MUS_SEVII_CAVE 331 // MUS_RG_NANADUNGEON -#define MUS_TEACHY_TV_SHOW 332 // MUS_RG_OSHIE_TV -#define MUS_SEVII_ROUTE 333 // MUS_RG_NANASHIMA -#define MUS_SEVII_DUNGEON 334 // MUS_RG_NANAISEKI -#define MUS_SEVII_123 335 // MUS_RG_NANA123 -#define MUS_SEVII_45 336 // MUS_RG_NANA45 -#define MUS_SEVII_67 337 // MUS_RG_NANA67 -#define MUS_POKE_FLUTE 338 // MUS_RG_POKEFUE -#define MUS_VS_DEOXYS 339 // MUS_RG_VS_DEO -#define MUS_VS_MEWTWO 340 // MUS_RG_VS_MYU2 -#define MUS_VS_LEGEND 341 // MUS_RG_VS_DEN -#define MUS_ENCOUNTER_GYM_LEADER 342 // MUS_RG_EXEYE -#define MUS_ENCOUNTER_DEOXYS 343 // MUS_RG_DEOEYE -#define MUS_TRAINER_TOWER 344 // MUS_RG_T_TOWER -#define MUS_SLOW_PALLET 345 // MUS_RG_SLOWMASARA -#define MUS_TEACHY_TV_MENU 346 // MUS_RG_TVNOIZE +#define MUS_FOLLOW_ME 272 // MUS_ANNAI +#define MUS_GAME_CORNER 273 // MUS_SLOT +#define MUS_ROCKET_HIDEOUT 274 // MUS_AJITO +#define MUS_GYM 275 // MUS_GYM +#define MUS_JIGGLYPUFF 276 // MUS_PURIN +#define MUS_INTRO_FIGHT 277 // MUS_DEMO +#define MUS_TITLE 278 // MUS_TITLE +#define MUS_CINNABAR 279 // MUS_GUREN +#define MUS_LAVENDER 280 // MUS_SHION +#define MUS_HEAL_UNUSED 281 // MUS_KAIHUKU +#define MUS_CYCLING 282 // MUS_CYCLING +#define MUS_ENCOUNTER_ROCKET 283 // MUS_ROCKET +#define MUS_ENCOUNTER_GIRL 284 // MUS_SHOUJO +#define MUS_ENCOUNTER_BOY 285 // MUS_SHOUNEN +#define MUS_HALL_OF_FAME 286 // MUS_DENDOU +#define MUS_VIRIDIAN_FOREST 287 // MUS_T_MORI +#define MUS_MT_MOON 288 // MUS_OTSUKIMI +#define MUS_POKE_MANSION 289 // MUS_POKEYASHI +#define MUS_CREDITS 290 // MUS_ENDING +#define MUS_ROUTE1 291 // MUS_LOAD01 +#define MUS_ROUTE24 292 // MUS_OPENING +#define MUS_ROUTE3 293 // MUS_LOAD02 +#define MUS_ROUTE11 294 // MUS_LOAD03 +#define MUS_VICTORY_ROAD 295 // MUS_CHAMP_R +#define MUS_VS_GYM_LEADER 296 // MUS_VS_GYM +#define MUS_VS_TRAINER 297 // MUS_VS_TORE +#define MUS_VS_WILD 298 // MUS_VS_YASEI +#define MUS_VS_CHAMPION 299 // MUS_VS_LAST +#define MUS_PALLET 300 // MUS_MASARA +#define MUS_OAK_LAB 301 // MUS_KENKYU +#define MUS_OAK 302 // MUS_OHKIDO +#define MUS_POKE_CENTER 303 // MUS_POKECEN +#define MUS_SS_ANNE 304 // MUS_SANTOAN +#define MUS_SURF 305 // MUS_NAMINORI +#define MUS_POKE_TOWER 306 // MUS_P_TOWER +#define MUS_SILPH 307 // MUS_SHIRUHU +#define MUS_FUCHSIA 308 // MUS_HANADA +#define MUS_CELADON 309 // MUS_TAMAMUSI +#define MUS_VICTORY_TRAINER 310 // MUS_WIN_TRE +#define MUS_VICTORY_WILD 311 // MUS_WIN_YASEI +#define MUS_VICTORY_GYM_LEADER 312 // MUS_WIN_GYM +#define MUS_VERMILLION 313 // MUS_KUCHIBA +#define MUS_PEWTER 314 // MUS_NIBI +#define MUS_ENCOUNTER_RIVAL 315 // MUS_RIVAL1 +#define MUS_RIVAL_EXIT 316 // MUS_RIVAL2 +#define MUS_DEX_RATING 317 // MUS_FAN2 +#define MUS_OBTAIN_KEY_ITEM 318 // MUS_FAN5 +#define MUS_CAUGHT_INTRO 319 // MUS_FAN6 +#define MUS_PHOTO 320 // MUS_ME_PHOTO +#define MUS_GAME_FREAK 321 // MUS_TITLEROG +#define MUS_CAUGHT 322 // MUS_GET_YASEI +#define MUS_NEW_GAME_INSTRUCT 323 // MUS_SOUSA +#define MUS_NEW_GAME_INTRO 324 // MUS_SEKAIKAN +#define MUS_NEW_GAME_EXIT 325 // MUS_SEIBETU +#define MUS_POKE_JUMP 326 // MUS_JUMP +#define MUS_UNION_ROOM 327 // MUS_UNION +#define MUS_NET_CENTER 328 // MUS_NETWORK +#define MUS_MYSTERY_GIFT 329 // MUS_OKURIMONO +#define MUS_BERRY_PICK 330 // MUS_KINOMIKUI +#define MUS_SEVII_CAVE 331 // MUS_NANADUNGEON +#define MUS_TEACHY_TV_SHOW 332 // MUS_OSHIE_TV +#define MUS_SEVII_ROUTE 333 // MUS_NANASHIMA +#define MUS_SEVII_DUNGEON 334 // MUS_NANAISEKI +#define MUS_SEVII_123 335 // MUS_NANA123 +#define MUS_SEVII_45 336 // MUS_NANA45 +#define MUS_SEVII_67 337 // MUS_NANA67 +#define MUS_POKE_FLUTE 338 // MUS_POKEFUE +#define MUS_VS_DEOXYS 339 // MUS_VS_DEO +#define MUS_VS_MEWTWO 340 // MUS_VS_MYU2 +#define MUS_VS_LEGEND 341 // MUS_VS_DEN +#define MUS_ENCOUNTER_GYM_LEADER 342 // MUS_EXEYE +#define MUS_ENCOUNTER_DEOXYS 343 // MUS_DEOEYE +#define MUS_TRAINER_TOWER 344 // MUS_T_TOWER +#define MUS_SLOW_PALLET 345 // MUS_SLOWMASARA +#define MUS_TEACHY_TV_MENU 346 // MUS_TVNOIZE #define MUS_NONE 0xFFFF From bc7654118980ba787fdf7d0c10a991f934b4f5f2 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Mon, 13 May 2024 21:55:08 -0400 Subject: [PATCH 2/7] feat: Linkerscript now tracks RAM/ROM usage Based on https://github.com/pret/pokeemerald/pull/1952 --- Makefile | 4 ++-- include/gba/defines.h | 4 +++- ld_script.ld | 48 ++++++++++++++++++++++--------------------- ld_script_modern.ld | 33 ++++++++++++++--------------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/Makefile b/Makefile index 259e19113..ef82f139e 100644 --- a/Makefile +++ b/Makefile @@ -324,7 +324,7 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt - $(RAMSCRGEN) ewram_data $< ENGLISH > $@ + $(RAMSCRGEN) .sbss $< ENGLISH > $@ ifeq ($(MODERN),0) LD_SCRIPT := ld_script.ld @@ -335,7 +335,7 @@ LD_SCRIPT_DEPS := endif $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< -o ../../$@ $(OBJS_REL) $(LIB) + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent $(ROM): $(ELF) diff --git a/include/gba/defines.h b/include/gba/defines.h index f7566278b..590494d08 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -11,7 +11,7 @@ #define EWRAM_DATA __attribute__((section("__DATA,ewram_data"))) #else #define IWRAM_DATA __attribute__((section("iwram_data"))) -#define EWRAM_DATA __attribute__((section("ewram_data"))) +#define EWRAM_DATA __attribute__((section(".sbss"))) #endif #if MODERN @@ -72,6 +72,8 @@ #define TILE_SIZE_4BPP 32 #define TILE_SIZE_8BPP 64 +#define BG_TILE_ADDR_4BPP(n) (void *)(BG_VRAM + (TILE_SIZE_4BPP * (n))) + #define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) #define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) diff --git a/ld_script.ld b/ld_script.ld index e68c4a7b3..381ed1ca9 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -1,10 +1,16 @@ gNumMusicPlayers = 4; gMaxLines = 0; -SECTIONS { - . = 0x2000000; +MEMORY +{ + EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K + IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M +} - ewram (NOLOAD) : +SECTIONS { + + .ewram.sbss 0x2000000 (NOLOAD) : ALIGN(4) { gHeap = .; @@ -12,17 +18,14 @@ SECTIONS { . = 0x1C000; INCLUDE "sym_ewram.ld" - src/*.o(ewram_data); + src/*.o(.sbss); *libc.a:impure.o(.data); *libc.a:locale.o(.data); *libc.a:mallocr.o(.data); - . = 0x40000; - } + } > EWRAM - . = 0x3000000; - - iwram (NOLOAD) : + iwram 0x3000000 (NOLOAD) : ALIGN(4) { /* .bss starts at 0x3000000 */ @@ -38,10 +41,9 @@ SECTIONS { *libc.a:sbrkr.o(COMMON); end = .; + } > IWRAM - . = 0x8000; - } - + /* BEGIN ROM DATA */ . = 0x8000000; .text : @@ -307,7 +309,7 @@ SECTIONS { src/berry_powder.o(.text); src/minigame_countdown.o(.text); src/berry_fix_program.o(.text); - } =0 + } > ROM =0 script_data : ALIGN(4) @@ -319,7 +321,7 @@ SECTIONS { data/battle_scripts_2.o(script_data); data/battle_ai_scripts.o(script_data); data/mystery_event_script_cmd_table.o(script_data); - } =0 + } > ROM =0 lib_text : ALIGN(4) @@ -388,7 +390,7 @@ SECTIONS { *libc.a:libcfunc.o(.text); *libc.a:lseekr.o(.text); *libc.a:readr.o(.text); - } =0 + } > ROM =0 .rodata : SUBALIGN(4) @@ -608,7 +610,7 @@ SECTIONS { data/mystery_event_msg.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); - } =0 + } > ROM =0 song_data : ALIGN(4) @@ -960,7 +962,7 @@ SECTIONS { sound/songs/midi/mus_trainer_tower.o(.rodata); sound/songs/midi/mus_slow_pallet.o(.rodata); sound/songs/midi/mus_teachy_tv_menu.o(.rodata); - } + } > ROM =0 lib_rodata : SUBALIGN(4) @@ -1013,7 +1015,7 @@ SECTIONS { *libc.a:readr.o(.rodata); . = ALIGN(4); - } =0 + } > ROM =0 multiboot_data : ALIGN(4) @@ -1021,14 +1023,13 @@ SECTIONS { data/multiboot_ereader.o(.rodata); data/multiboot_berry_glitch_fix.o(.rodata); data/multiboot_pokemon_colosseum.o(.rodata); - } =0 + } > ROM =0 - . = 0x08D00000; - gfx_data : + gfx_data 0x08D00000 : ALIGN(4) { src/graphics.o(.rodata); - } =0 + } > ROM =0 extra : ALIGN(4) @@ -1036,7 +1037,8 @@ SECTIONS { src/*.o(.text); src/*.o(.rodata); data/*.o(.rodata); - } = 0 + } > ROM =0 + /* DWARF 2 sections */ .debug_aranges 0 : { *(.debug_aranges) } diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 6a874f84a..c33a8bfb5 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -1,24 +1,26 @@ gNumMusicPlayers = 4; gMaxLines = 0; -SECTIONS { - . = 0x2000000; +MEMORY +{ + EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K + IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M +} - ewram (NOLOAD) : +SECTIONS { + + .ewram.sbss 0x2000000 (NOLOAD) : ALIGN(4) { gHeap = .; . = 0x1C000; - *(ewram_data); + *(.sbss); + } > EWRAM - . = 0x40000; - } - - . = 0x3000000; - - iwram (NOLOAD) : + iwram 0x3000000 (NOLOAD) : ALIGN(4) { /* .bss starts at 0x3000000 */ @@ -30,8 +32,7 @@ SECTIONS { *(COMMON); end = .; __end__ = .; - . = 0x8000; - } + } > IWRAM . = 0x8000000; @@ -43,25 +44,25 @@ SECTIONS { src/crt0.o(.text); src/main.o(.text); *(.text*); - } =0 + } > ROM =0 script_data : ALIGN(4) { *(script_data); - } =0 + } > ROM =0 .data : ALIGN(4) { *(.data*); - } =0 + } > ROM =0 .rodata : ALIGN(4) { *(.rodata*); - } =0 + } > ROM =0 /* DWARF 2 sections */ .debug_aranges 0 : { *(.debug_aranges) } From fb0c7dc3f2516a61ce4cb73c891338f8f90d48be Mon Sep 17 00:00:00 2001 From: Deokishisu <6993375+Deokishisu@users.noreply.github.com> Date: Fri, 24 May 2024 21:58:35 -0400 Subject: [PATCH 3/7] Fix Typo in Nurse Script EventScript_PkmnCenterNurse_PlayerWaitingInUionRoom => EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom --- data/scripts/pkmn_center_nurse.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index f92ff3183..507c8a498 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -34,7 +34,7 @@ EventScript_PkmnCenterNurse_CheckTrainerTowerAndUnionRoom:: specialvar VAR_RESULT, BufferUnionRoomPlayerName copyvar VAR_0x8008, VAR_RESULT goto_if_eq VAR_0x8008, 0, EventScript_PkmnCenterNurse_ReturnPkmn - goto_if_eq VAR_0x8008, 1, EventScript_PkmnCenterNurse_PlayerWaitingInUionRoom + goto_if_eq VAR_0x8008, 1, EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom end EventScript_PkmnCenterNurse_ReturnPkmn:: @@ -45,7 +45,7 @@ EventScript_PkmnCenterNurse_ReturnPkmn:: msgbox Text_WeHopeToSeeYouAgain return -EventScript_PkmnCenterNurse_PlayerWaitingInUionRoom:: +EventScript_PkmnCenterNurse_PlayerWaitingInUnionRoom:: goto_if_set FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER, EventScript_PkmnCenterNurse_ReturnPkmn msgbox Text_RestoredPkmnToFullHealth setflag FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER From 4578a59673ce7cbc24d599393478902d7524cbc5 Mon Sep 17 00:00:00 2001 From: Deokishisu <6993375+Deokishisu@users.noreply.github.com> Date: Fri, 24 May 2024 22:09:31 -0400 Subject: [PATCH 4/7] Fix Localization Oversight in Daisy's Text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on the FONT_NORMAL and FONT_FEMALE control codes in Daisy's text when finishing her grooming of a Pokémon, it seems the original intention was for the first part of this text to be NPC_TEXT_COLOR_NEUTRAL and for Daisy's dialogue to be NPC_TEXT_COLOR_FEMALE. If the localizers had caught it, they would've replaced FONT_NORMAL with COLOR DARK_GRAY and FONT_FEMALE with COLOR RED. This commit creates a .ifdef BUGFIX for this oversight. --- data/maps/PalletTown_RivalsHouse/text.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/maps/PalletTown_RivalsHouse/text.inc b/data/maps/PalletTown_RivalsHouse/text.inc index 38172688c..0cd7b0005 100644 --- a/data/maps/PalletTown_RivalsHouse/text.inc +++ b/data/maps/PalletTown_RivalsHouse/text.inc @@ -62,8 +62,13 @@ PalletTown_RivalsHouse_Text_LookingNiceInNoTime:: .string "nice in no time.$" PalletTown_RivalsHouse_Text_ThereYouGoAllDone:: +.ifdef BUGFIX @ The localizers missed what should be a textcolor change in the localizations. + .string "{COLOR DARK_GRAY}{STR_VAR_1} looks dreamily content…\p" + .string "{COLOR RED}DAISY: There you go! All done.\n" +.else @ In the JP games, gender-based text used a different font instead of different colors. .string "{FONT_NORMAL}{STR_VAR_1} looks dreamily content…\p" .string "{FONT_FEMALE}DAISY: There you go! All done.\n" +.endif .string "See? Doesn't it look nice?\p" .string "Giggle…\n" .string "It's such a cute POKéMON.$" From 6bd758f45d93a1f37e1b4354b8123989005e9924 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 6 Jun 2024 23:22:37 -0400 Subject: [PATCH 5/7] fix compilation on gcc 14 --- include/util.h | 4 ++-- src/field_effect.c | 8 ++++---- src/trainer_see.c | 2 +- src/util.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/util.h b/include/util.h index 8dc5e9bb6..ef1c15faa 100644 --- a/include/util.h +++ b/include/util.h @@ -9,8 +9,8 @@ extern const u8 gMiscBlank_Gfx[]; // unused in Emerald extern const u32 gBitTable[]; u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *)); -void StoreWordInTwoHalfwords(u16 *, unsigned); -void LoadWordFromTwoHalfwords(u16 *, unsigned *); +void StoreWordInTwoHalfwords(u16 *, u32); +void LoadWordFromTwoHalfwords(u16 *, u32 *); int CountTrailingZeroBits(u32 value); u16 CalcCRC16(const u8 *data, u32 length); u16 CalcCRC16WithTable(const u8 *data, u32 length); diff --git a/src/field_effect.c b/src/field_effect.c index 84a4cff88..1707cbd4a 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2711,7 +2711,7 @@ static void ShowMonEffect_Outdoors_6(struct Task *task) static void ShowMonEffect_Outdoors_7(struct Task *task) { IntrCallback callback; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); SetVBlankCallback(callback); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -2725,7 +2725,7 @@ static void VBlankCB_ShowMonEffect_Outdoors(void) { IntrCallback callback; struct Task *task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Outdoors)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); callback(); SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); @@ -2830,7 +2830,7 @@ static void ShowMonEffect_Indoors_7(struct Task *task) u16 charbase; charbase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; CpuFill32(0, (void *)VRAM + charbase, 0x800); - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); SetVBlankCallback(intrCallback); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -2845,7 +2845,7 @@ static void VBlankCB_ShowMonEffect_Indoors(void) IntrCallback intrCallback; struct Task *task; task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Indoors)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); intrCallback(); SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); diff --git a/src/trainer_see.c b/src/trainer_see.c index b66409c18..5d234adfd 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -518,7 +518,7 @@ static void Task_RevealTrainer_RunTrainerSeeFuncList(u8 taskId) struct ObjectEvent * trainerObj; // another objEvent loaded into by loadword? - LoadWordFromTwoHalfwords((u16 *)&task->data[1], (uintptr_t *)&trainerObj); + LoadWordFromTwoHalfwords((u16 *)&task->data[1], (u32 *)&trainerObj); if (!task->data[7]) { ObjectEventClearHeldMovement(trainerObj); diff --git a/src/util.c b/src/util.c index 5423e0a2d..b32799584 100644 --- a/src/util.c +++ b/src/util.c @@ -120,13 +120,13 @@ u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) return sprite; } -void StoreWordInTwoHalfwords(u16 *h, unsigned w) +void StoreWordInTwoHalfwords(u16 *h, u32 w) { h[0] = (u16)(w); h[1] = (u16)(w >> 16); } -void LoadWordFromTwoHalfwords(u16 *h, unsigned *w) +void LoadWordFromTwoHalfwords(u16 *h, u32 *w) { *w = h[0] | (s16)h[1] << 16; } From b2e2648d154f0b551075d6e0079f7d8f307c4217 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 22 Jun 2024 11:51:16 -0400 Subject: [PATCH 6/7] Use C preprocessor directives --- data/maps/PalletTown_RivalsHouse/text.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/maps/PalletTown_RivalsHouse/text.inc b/data/maps/PalletTown_RivalsHouse/text.inc index 0cd7b0005..bde0f854c 100644 --- a/data/maps/PalletTown_RivalsHouse/text.inc +++ b/data/maps/PalletTown_RivalsHouse/text.inc @@ -62,13 +62,13 @@ PalletTown_RivalsHouse_Text_LookingNiceInNoTime:: .string "nice in no time.$" PalletTown_RivalsHouse_Text_ThereYouGoAllDone:: -.ifdef BUGFIX @ The localizers missed what should be a textcolor change in the localizations. +#ifdef BUGFIX @ The localizers missed what should be a textcolor change in the localizations. .string "{COLOR DARK_GRAY}{STR_VAR_1} looks dreamily content…\p" .string "{COLOR RED}DAISY: There you go! All done.\n" -.else @ In the JP games, gender-based text used a different font instead of different colors. +#else @ In the JP games, gender-based text used a different font instead of different colors. .string "{FONT_NORMAL}{STR_VAR_1} looks dreamily content…\p" .string "{FONT_FEMALE}DAISY: There you go! All done.\n" -.endif +#endif .string "See? Doesn't it look nice?\p" .string "Giggle…\n" .string "It's such a cute POKéMON.$" From 21e8a142db50709b05603b553eff01f045b00b4c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 22 Jun 2024 11:58:39 -0400 Subject: [PATCH 7/7] Revert section rename --- Makefile | 2 +- include/gba/defines.h | 2 +- ld_script.ld | 4 ++-- ld_script_modern.ld | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index ef82f139e..c53664579 100644 --- a/Makefile +++ b/Makefile @@ -324,7 +324,7 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt - $(RAMSCRGEN) .sbss $< ENGLISH > $@ + $(RAMSCRGEN) ewram_data $< ENGLISH > $@ ifeq ($(MODERN),0) LD_SCRIPT := ld_script.ld diff --git a/include/gba/defines.h b/include/gba/defines.h index 590494d08..46c722a1a 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -11,7 +11,7 @@ #define EWRAM_DATA __attribute__((section("__DATA,ewram_data"))) #else #define IWRAM_DATA __attribute__((section("iwram_data"))) -#define EWRAM_DATA __attribute__((section(".sbss"))) +#define EWRAM_DATA __attribute__((section("ewram_data"))) #endif #if MODERN diff --git a/ld_script.ld b/ld_script.ld index 381ed1ca9..1d2bbf29d 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -10,7 +10,7 @@ MEMORY SECTIONS { - .ewram.sbss 0x2000000 (NOLOAD) : + ewram 0x2000000 (NOLOAD) : ALIGN(4) { gHeap = .; @@ -18,7 +18,7 @@ SECTIONS { . = 0x1C000; INCLUDE "sym_ewram.ld" - src/*.o(.sbss); + src/*.o(ewram_data); *libc.a:impure.o(.data); *libc.a:locale.o(.data); diff --git a/ld_script_modern.ld b/ld_script_modern.ld index c33a8bfb5..76f4536fb 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -10,14 +10,14 @@ MEMORY SECTIONS { - .ewram.sbss 0x2000000 (NOLOAD) : + ewram 0x2000000 (NOLOAD) : ALIGN(4) { gHeap = .; . = 0x1C000; - *(.sbss); + *(ewram_data); } > EWRAM iwram 0x3000000 (NOLOAD) :