diff --git a/.gitattributes b/.gitattributes index 5607075..c200040 100755 --- a/.gitattributes +++ b/.gitattributes @@ -9,6 +9,7 @@ Makefile text eol=lf *.inc text eol=lf *.sha1 text eol=lf *.sed text eol=lf +*.sh text eol=lf *.png binary *.bin binary diff --git a/.gitignore b/.gitignore index 908206f..f912c2f 100755 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ baserom.* build-cmake-*/ compile_commands.json CMakeLists.txt +graphics_rules_generated.mk # clangd .cache/ diff --git a/Makefile b/Makefile index 3aca21c..af1a229 100644 --- a/Makefile +++ b/Makefile @@ -72,7 +72,7 @@ FIX := tools/gbafix/gbafix$(EXE) SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c TOOLS_DIR = tools -TOOLDIRS = $(filter-out $(TOOLS_DIR)/agbcc $(TOOLS_DIR)/m2ctx.py,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/agbcc $(TOOLS_DIR)/m2ctx.py $(TOOLS_DIR)/scripts,$(wildcard $(TOOLS_DIR)/*)) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -125,6 +125,7 @@ compare: rom clean: tidy clean-tools find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + + rm -f graphics_rules_generated.mk find sound -iname '*.bin' -exec rm {} + tidy: diff --git a/data/graphics/mon_catch_sprites.inc b/data/graphics/mon_catch_sprites.inc new file mode 100644 index 0000000..6c5136e --- /dev/null +++ b/data/graphics/mon_catch_sprites.inc @@ -0,0 +1,85 @@ +gMonCatchSprite_Gfx:: @ 0x08400C8C + .incbin "graphics/mon_catch_sprites/catch_mon_01_treecko.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_02_torchic.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_03_mudkip.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_04_poochyena.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_05_zigzagoon.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_06_silcoon.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_07_cascoon.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_08_lombre.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_09_nuzleaf.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_10_tailow.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_11_wingull.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_12_slakoth.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_13_abra.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_14_nincada.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_15_loudred.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_16_makuhita.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_17_goldeen.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_18_magikarp.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_19_marill.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_20_geodude.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_21_nosepass.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_22_tentacool.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_23_sableye.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_24_mawile.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_25_machop.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_26_meditite.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_27_electrike.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_28_magnemite.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_29_voltorb.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_30_volbeat.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_31_illumise.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_32_doduo.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_33_roselia.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_34_carvanha.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_35_wailmer.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_36_numel.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_37_slugma.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_38_torkoal.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_39_grimer.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_40_koffing.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_41_skarmory.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_42_vibrava.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_43_cacnea.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_44_swablu.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_45_zangoose.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_46_seviper.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_47_lunatone.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_48_solrock.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_49_barboach.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_50_corphish.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_51_baltoy.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_52_lileep.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_53_anorith.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_54_jigglypuff.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_55_febas.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_56_castform.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_57_staryu.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_58_kecleon.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_59_duskull.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_60_tropius.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_61_absol.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_62_vulpix.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_63_pikachu.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_64_psyduck.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_65_wobbuffet.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_66_girafarig.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_67_pinsir.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_68_heracross.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_69_rhyhorn.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_70_clamperl.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_71_relicanth.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_72_luvdisc.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_73_shelgon.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_74_beldum.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_75_regirock.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_76_regice.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_77_registeel.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_78_latias.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_79_latios.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_80_jirachi.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_81_chikorita.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_82_cyndaquil.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_83_totodile.4bpp" + .incbin "graphics/mon_catch_sprites/catch_mon_84_aerodactyl.4bpp" diff --git a/data/graphics/mon_catch_sprites_pals.inc b/data/graphics/mon_catch_sprites_pals.inc new file mode 100644 index 0000000..85464b7 --- /dev/null +++ b/data/graphics/mon_catch_sprites_pals.inc @@ -0,0 +1,133 @@ +gMonCatchSprite_Pal:: @ 0x081AEBE4 + .incbin "graphics/mon_catch_sprites/catch_mon_01_treecko.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_02_torchic.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_03_mudkip.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_04_poochyena.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_05_zigzagoon.gbapal" + + .incbin "baserom.gba", 0x1AEC84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_06_silcoon.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_07_cascoon.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_08_lombre.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_09_nuzleaf.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_10_tailow.gbapal" + + .incbin "baserom.gba", 0x1AEE84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_11_wingull.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_12_slakoth.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_13_abra.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_14_nincada.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_15_loudred.gbapal" + + .incbin "baserom.gba", 0x1AF084, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_16_makuhita.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_17_goldeen.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_18_magikarp.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_19_marill.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_20_geodude.gbapal" + + .incbin "baserom.gba", 0x1AF284, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_21_nosepass.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_22_tentacool.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_23_sableye.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_24_mawile.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_25_machop.gbapal" + + .incbin "baserom.gba", 0x1AF484, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_26_meditite.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_27_electrike.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_28_magnemite.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_29_voltorb.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_30_volbeat.gbapal" + + .incbin "baserom.gba", 0x1AF684, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_31_illumise.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_32_doduo.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_33_roselia.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_34_carvanha.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_35_wailmer.gbapal" + + .incbin "baserom.gba", 0x1AF884, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_36_numel.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_37_slugma.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_38_torkoal.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_39_grimer.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_40_koffing.gbapal" + + .incbin "baserom.gba", 0x1AFA84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_41_skarmory.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_42_vibrava.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_43_cacnea.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_44_swablu.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_45_zangoose.gbapal" + + .incbin "baserom.gba", 0x1AFC84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_46_seviper.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_47_lunatone.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_48_solrock.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_49_barboach.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_50_corphish.gbapal" + + .incbin "baserom.gba", 0x1AFE84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_51_baltoy.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_52_lileep.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_53_anorith.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_54_jigglypuff.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_55_febas.gbapal" + + .incbin "baserom.gba", 0x1B0084, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_56_castform.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_57_staryu.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_58_kecleon.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_59_duskull.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_60_tropius.gbapal" + + .incbin "baserom.gba", 0x1B0284, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_61_absol.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_62_vulpix.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_63_pikachu.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_64_psyduck.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_65_wobbuffet.gbapal" + + .incbin "baserom.gba", 0x1B0484, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_66_girafarig.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_67_pinsir.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_68_heracross.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_69_rhyhorn.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_70_clamperl.gbapal" + + .incbin "baserom.gba", 0x1B0684, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_71_relicanth.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_72_luvdisc.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_73_shelgon.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_74_beldum.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_75_regirock.gbapal" + + .incbin "baserom.gba", 0x1B0884, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_76_regice.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_77_registeel.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_78_latias.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_79_latios.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_80_jirachi.gbapal" + + .incbin "baserom.gba", 0x1B0A84, 0x160 + + .incbin "graphics/mon_catch_sprites/catch_mon_81_chikorita.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_82_cyndaquil.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_83_totodile.gbapal" + .incbin "graphics/mon_catch_sprites/catch_mon_84_aerodactyl.gbapal" diff --git a/data/rom_1.s b/data/rom_1.s index 314a8d4..950c6b5 100644 --- a/data/rom_1.s +++ b/data/rom_1.s @@ -1362,7 +1362,10 @@ gUnknown_0816A7C4:: @ 0x0816A7C4 .incbin "baserom.gba", 0x16A7C4, 0x1C20 gUnknown_0816C3E4:: @ 0x0816C3E4 - .incbin "baserom.gba", 0x16C3E4, 0x44A00 + .incbin "baserom.gba", 0x16C3E4, 0x42800 + .include "data/graphics/mon_catch_sprites_pals.inc" +@ .incbin "baserom.gba", 0x1AEBE4, 0xA80 + .incbin "baserom.gba", 0x1B0C64, 0x180 gUnknown_081B0DE4:: @ 0x081B0DE4 .incbin "baserom.gba", 0x1B0DE4, 0x200 @@ -1719,7 +1722,9 @@ gUnknown_083FFD4C:: @ 0x083FFD4C .incbin "baserom.gba", 0x3FFD4C, 0x40 gUnknown_083FFD8C:: @ 0x083FFD8C - .incbin "baserom.gba", 0x3FFD8C, 0x47D00 + .incbin "baserom.gba", 0x3FFD8C, 0xF00 @ 0x47D00 + + .include "data/graphics/mon_catch_sprites.inc" gUnknown_08447A8C:: @ 0x08447A8C .incbin "baserom.gba", 0x447A8C, 0x900 @@ -1891,43 +1896,43 @@ gUnknown_084C4B6C:: @ 0x084C4B6C .incbin "baserom.gba", 0x4ECF6C, 0x160 @ 0x4ED0CC - 0x4ECF6C gUnknown_084ED0CC:: @ 0x084ED0CC - .incbin "baserom.gba", 0x4ED0CC, 0x600 + .incbin "graphics/stage/ruby/shop_door.4bpp"; gUnknown_084ED6CC:: @ 0x084ED6CC - .incbin "baserom.gba", 0x4ED6CC, 0x400 - + .incbin "graphics/stage/gunk_084ED6CC.4bpp"; + gUnknown_084EDACC:: @ 0x084EDACC .incbin "graphics/stage/dusclops/dusclops.4bpp"; gUnknown_084F5ACC:: @ 0x084F5ACC - .incbin "baserom.gba", 0x4F5ACC, 0x720 + .incbin "graphics/stage/ruby/sharpedo.4bpp"; gUnknown_084F61EC:: @ 0x084F61EC - .incbin "baserom.gba", 0x4F61EC, 0x920 + .incbin "graphics/stage/main/gunk_084F61EC.4bpp"; gUnknown_084F6B0C:: @ 0x084F6B0C - .incbin "baserom.gba", 0x4F6B0C, 0x3700 + .incbin "graphics/stage/ruby/shop.4bpp"; gUnknown_084FA20C:: @ 0x084FA20C - .incbin "baserom.gba", 0x4FA20C, 0x280 + .incbin "graphics/stage/misc/gunk_084FA20C.4bpp"; gUnknown_084FA48C:: @ 0x084FA48C - .incbin "baserom.gba", 0x4FA48C, 0x1200 + .incbin "graphics/stage/main/pika_spinner.4bpp"; gUnknown_084FB68C:: @ 0x084FB68C - .incbin "baserom.gba", 0x4FB68C, 0x1B00 + .incbin "graphics/stage/ruby/hatch_cave.4bpp"; gUnknown_084FD18C:: @ 0x084FD18C .incbin "baserom.gba", 0x4FD18C, 0xE00 gUnknown_084FDF8C:: @ 0x084FDF8C - .incbin "baserom.gba", 0x4FDF8C, 0xA80 + .incbin "graphics/stage/sapphire/seedot.4bpp"; gUnknown_084FEA0C:: @ 0x084FEA0C - .incbin "baserom.gba", 0x4FEA0C, 0x500 + .incbin "graphics/stage/sapphire/shop_shock_wall.4bpp"; gUnknown_084FEF0C:: @ 0x084FEF0C - .incbin "baserom.gba", 0x4FEF0C, 0x400 + .incbin "graphics/stage/ruby/ramp_prize.4bpp"; gUnknown_084FF30C:: @ 0x084FF30C .incbin "graphics/stage/dusclops/dusclops_ball_grab.4bpp"; @@ -1936,43 +1941,43 @@ gUnknown_084FF90C:: @ 0x084FF90C .incbin "baserom.gba", 0x4FF90C, 0x1700 gUnknown_0850100C:: @ 0x0850100C - .incbin "baserom.gba", 0x50100C, 0x18C0 - + .incbin "graphics/stage/main/ball_save.4bpp"; + gUnknown_085028CC:: @ 0x085028CC - .incbin "baserom.gba", 0x5028CC, 0x1000 - + .incbin "graphics/stage/main/latios.4bpp"; + gUnknown_085038CC:: @ 0x085038CC - .incbin "baserom.gba", 0x5038CC, 0xC0 + .incbin "graphics/stage/main/latios_arm.4bpp"; gUnknown_0850398C:: @ 0x0850398C - .incbin "baserom.gba", 0x50398C, 0x1C00 + .incbin "graphics/stage/main/end_of_ball.4bpp"; gUnknown_0850558C:: @ 0x0850558C - .incbin "baserom.gba", 0x50558C, 0x600 + .incbin "graphics/stage/misc/gunk_0850558C.4bpp"; gUnknown_08505B8C:: @ 0x08505B8C .incbin "baserom.gba", 0x505B8C, 0x40 gUnknown_08505BCC:: @ 0x08505BCC - .incbin "baserom.gba", 0x505BCC, 0x4380 + .incbin "graphics/stage/main/evo_banner.4bpp"; gUnknown_08509F4C:: @ 0x08509F4C - .incbin "baserom.gba", 0x509F4C, 0x400 + .incbin "graphics/stage/main/game_over_text.4bpp"; gUnknown_0850A34C:: @ 0x0850A34C - .incbin "baserom.gba", 0x50A34C, 0x4380 + .incbin "graphics/stage/main/jirachi_banner.4bpp"; gUnknown_0850E6CC:: @ 0x0850E6CC - .incbin "baserom.gba", 0x50E6CC, 0x25E0 + .incbin "graphics/stage/main/travel.4bpp"; gUnknown_08510CAC:: @ 0x08510CAC - .incbin "baserom.gba", 0x510CAC, 0x1A0 + .incbin "graphics/stage/main/pause_menu_text.4bpp"; gUnknown_08510E4C:: @ 0x08510E4C .incbin "graphics/stage/dusclops/duskull.4bpp"; gUnknown_08512C4C:: @ 0x08512C4C - .incbin "baserom.gba", 0x512C4C, 0x2300 + .incbin "graphics/stage/sapphire/zigzagoon.4bpp"; gUnknown_08514F4C:: @ 0x08514F4C .incbin "baserom.gba", 0x514F4C, 0x20 @@ -1999,7 +2004,9 @@ gUnknown_085223AC:: @ 0x085223AC .incbin "baserom.gba", 0x5223AC, 0x4A20 gUnknown_08526DCC:: @ 0x08526DCC - .incbin "baserom.gba", 0x526DCC, 0xF56 + .incbin "graphics/stage/sapphire/zigzagoon_fx.4bpp"; + + .incbin "baserom.gba", 0x5279CC, 0x356 gOptionsBGMList:: @ 0x08527D22 diff --git a/graphics/mon_catch_sprites/catch_mon_01_treecko.png b/graphics/mon_catch_sprites/catch_mon_01_treecko.png new file mode 100644 index 0000000..8ee9189 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_01_treecko.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_02_torchic.png b/graphics/mon_catch_sprites/catch_mon_02_torchic.png new file mode 100644 index 0000000..4c599d9 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_02_torchic.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_03_mudkip.png b/graphics/mon_catch_sprites/catch_mon_03_mudkip.png new file mode 100644 index 0000000..5ad9469 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_03_mudkip.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_04_poochyena.png b/graphics/mon_catch_sprites/catch_mon_04_poochyena.png new file mode 100644 index 0000000..34b058b Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_04_poochyena.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_05_zigzagoon.png b/graphics/mon_catch_sprites/catch_mon_05_zigzagoon.png new file mode 100644 index 0000000..16c8c16 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_05_zigzagoon.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_06_silcoon.png b/graphics/mon_catch_sprites/catch_mon_06_silcoon.png new file mode 100644 index 0000000..022f90a Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_06_silcoon.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_07_cascoon.png b/graphics/mon_catch_sprites/catch_mon_07_cascoon.png new file mode 100644 index 0000000..b14e796 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_07_cascoon.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_08_lombre.png b/graphics/mon_catch_sprites/catch_mon_08_lombre.png new file mode 100644 index 0000000..ece0f1c Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_08_lombre.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_09_nuzleaf.png b/graphics/mon_catch_sprites/catch_mon_09_nuzleaf.png new file mode 100644 index 0000000..9eb523b Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_09_nuzleaf.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_10_tailow.png b/graphics/mon_catch_sprites/catch_mon_10_tailow.png new file mode 100644 index 0000000..e2e89eb Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_10_tailow.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_11_wingull.png b/graphics/mon_catch_sprites/catch_mon_11_wingull.png new file mode 100644 index 0000000..1acac29 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_11_wingull.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_12_slakoth.png b/graphics/mon_catch_sprites/catch_mon_12_slakoth.png new file mode 100644 index 0000000..c487dae Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_12_slakoth.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_13_abra.png b/graphics/mon_catch_sprites/catch_mon_13_abra.png new file mode 100644 index 0000000..50b2691 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_13_abra.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_14_nincada.png b/graphics/mon_catch_sprites/catch_mon_14_nincada.png new file mode 100644 index 0000000..bd2b840 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_14_nincada.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_15_loudred.png b/graphics/mon_catch_sprites/catch_mon_15_loudred.png new file mode 100644 index 0000000..80cdc91 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_15_loudred.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_16_makuhita.png b/graphics/mon_catch_sprites/catch_mon_16_makuhita.png new file mode 100644 index 0000000..0c0d761 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_16_makuhita.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_17_goldeen.png b/graphics/mon_catch_sprites/catch_mon_17_goldeen.png new file mode 100644 index 0000000..fc7f060 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_17_goldeen.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_18_magikarp.png b/graphics/mon_catch_sprites/catch_mon_18_magikarp.png new file mode 100644 index 0000000..f11a26f Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_18_magikarp.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_19_marill.png b/graphics/mon_catch_sprites/catch_mon_19_marill.png new file mode 100644 index 0000000..ecba062 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_19_marill.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_20_geodude.png b/graphics/mon_catch_sprites/catch_mon_20_geodude.png new file mode 100644 index 0000000..4953bbd Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_20_geodude.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_21_nosepass.png b/graphics/mon_catch_sprites/catch_mon_21_nosepass.png new file mode 100644 index 0000000..70a3a54 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_21_nosepass.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_22_tentacool.png b/graphics/mon_catch_sprites/catch_mon_22_tentacool.png new file mode 100644 index 0000000..b2e7ad3 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_22_tentacool.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_23_sableye.png b/graphics/mon_catch_sprites/catch_mon_23_sableye.png new file mode 100644 index 0000000..b406c5a Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_23_sableye.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_24_mawile.png b/graphics/mon_catch_sprites/catch_mon_24_mawile.png new file mode 100644 index 0000000..c74a06c Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_24_mawile.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_25_machop.png b/graphics/mon_catch_sprites/catch_mon_25_machop.png new file mode 100644 index 0000000..b4a137a Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_25_machop.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_26_meditite.png b/graphics/mon_catch_sprites/catch_mon_26_meditite.png new file mode 100644 index 0000000..ac992a8 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_26_meditite.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_27_electrike.png b/graphics/mon_catch_sprites/catch_mon_27_electrike.png new file mode 100644 index 0000000..ba1392d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_27_electrike.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_28_magnemite.png b/graphics/mon_catch_sprites/catch_mon_28_magnemite.png new file mode 100644 index 0000000..0602dd5 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_28_magnemite.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_29_voltorb.png b/graphics/mon_catch_sprites/catch_mon_29_voltorb.png new file mode 100644 index 0000000..a66e84d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_29_voltorb.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_30_volbeat.png b/graphics/mon_catch_sprites/catch_mon_30_volbeat.png new file mode 100644 index 0000000..25bdaa8 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_30_volbeat.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_31_illumise.png b/graphics/mon_catch_sprites/catch_mon_31_illumise.png new file mode 100644 index 0000000..198ed1e Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_31_illumise.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_32_doduo.png b/graphics/mon_catch_sprites/catch_mon_32_doduo.png new file mode 100644 index 0000000..aec0ace Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_32_doduo.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_33_roselia.png b/graphics/mon_catch_sprites/catch_mon_33_roselia.png new file mode 100644 index 0000000..f9fb0c7 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_33_roselia.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_34_carvanha.png b/graphics/mon_catch_sprites/catch_mon_34_carvanha.png new file mode 100644 index 0000000..add7341 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_34_carvanha.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_35_wailmer.png b/graphics/mon_catch_sprites/catch_mon_35_wailmer.png new file mode 100644 index 0000000..8b74611 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_35_wailmer.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_36_numel.png b/graphics/mon_catch_sprites/catch_mon_36_numel.png new file mode 100644 index 0000000..3963810 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_36_numel.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_37_slugma.png b/graphics/mon_catch_sprites/catch_mon_37_slugma.png new file mode 100644 index 0000000..40cfe59 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_37_slugma.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_38_torkoal.png b/graphics/mon_catch_sprites/catch_mon_38_torkoal.png new file mode 100644 index 0000000..b672838 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_38_torkoal.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_39_grimer.png b/graphics/mon_catch_sprites/catch_mon_39_grimer.png new file mode 100644 index 0000000..a7d5cfb Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_39_grimer.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_40_koffing.png b/graphics/mon_catch_sprites/catch_mon_40_koffing.png new file mode 100644 index 0000000..3043400 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_40_koffing.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_41_skarmory.png b/graphics/mon_catch_sprites/catch_mon_41_skarmory.png new file mode 100644 index 0000000..0937ef9 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_41_skarmory.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_42_vibrava.png b/graphics/mon_catch_sprites/catch_mon_42_vibrava.png new file mode 100644 index 0000000..bcf0b7f Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_42_vibrava.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_43_cacnea.png b/graphics/mon_catch_sprites/catch_mon_43_cacnea.png new file mode 100644 index 0000000..68f61fa Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_43_cacnea.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_44_swablu.png b/graphics/mon_catch_sprites/catch_mon_44_swablu.png new file mode 100644 index 0000000..f50cbe0 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_44_swablu.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_45_zangoose.png b/graphics/mon_catch_sprites/catch_mon_45_zangoose.png new file mode 100644 index 0000000..dc8bbd1 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_45_zangoose.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_46_seviper.png b/graphics/mon_catch_sprites/catch_mon_46_seviper.png new file mode 100644 index 0000000..4505f29 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_46_seviper.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_47_lunatone.png b/graphics/mon_catch_sprites/catch_mon_47_lunatone.png new file mode 100644 index 0000000..b6ffa4a Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_47_lunatone.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_48_solrock.png b/graphics/mon_catch_sprites/catch_mon_48_solrock.png new file mode 100644 index 0000000..a1df842 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_48_solrock.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_49_barboach.png b/graphics/mon_catch_sprites/catch_mon_49_barboach.png new file mode 100644 index 0000000..9bbfe89 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_49_barboach.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_50_corphish.png b/graphics/mon_catch_sprites/catch_mon_50_corphish.png new file mode 100644 index 0000000..dbb3e09 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_50_corphish.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_51_baltoy.png b/graphics/mon_catch_sprites/catch_mon_51_baltoy.png new file mode 100644 index 0000000..5700ee0 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_51_baltoy.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_52_lileep.png b/graphics/mon_catch_sprites/catch_mon_52_lileep.png new file mode 100644 index 0000000..b960a43 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_52_lileep.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_53_anorith.png b/graphics/mon_catch_sprites/catch_mon_53_anorith.png new file mode 100644 index 0000000..bf79964 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_53_anorith.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_54_jigglypuff.png b/graphics/mon_catch_sprites/catch_mon_54_jigglypuff.png new file mode 100644 index 0000000..33b0344 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_54_jigglypuff.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_55_febas.png b/graphics/mon_catch_sprites/catch_mon_55_febas.png new file mode 100644 index 0000000..3ce4a89 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_55_febas.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_56_castform.png b/graphics/mon_catch_sprites/catch_mon_56_castform.png new file mode 100644 index 0000000..dfc507c Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_56_castform.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_57_staryu.png b/graphics/mon_catch_sprites/catch_mon_57_staryu.png new file mode 100644 index 0000000..a35326a Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_57_staryu.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_58_kecleon.png b/graphics/mon_catch_sprites/catch_mon_58_kecleon.png new file mode 100644 index 0000000..c1575aa Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_58_kecleon.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_59_duskull.png b/graphics/mon_catch_sprites/catch_mon_59_duskull.png new file mode 100644 index 0000000..0c49c15 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_59_duskull.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_60_tropius.png b/graphics/mon_catch_sprites/catch_mon_60_tropius.png new file mode 100644 index 0000000..736d200 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_60_tropius.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_61_absol.png b/graphics/mon_catch_sprites/catch_mon_61_absol.png new file mode 100644 index 0000000..c77d2ea Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_61_absol.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_62_vulpix.png b/graphics/mon_catch_sprites/catch_mon_62_vulpix.png new file mode 100644 index 0000000..defdde1 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_62_vulpix.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_63_pikachu.png b/graphics/mon_catch_sprites/catch_mon_63_pikachu.png new file mode 100644 index 0000000..399c490 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_63_pikachu.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_64_psyduck.png b/graphics/mon_catch_sprites/catch_mon_64_psyduck.png new file mode 100644 index 0000000..609a174 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_64_psyduck.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_65_wobbuffet.png b/graphics/mon_catch_sprites/catch_mon_65_wobbuffet.png new file mode 100644 index 0000000..8eb019f Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_65_wobbuffet.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_66_girafarig.png b/graphics/mon_catch_sprites/catch_mon_66_girafarig.png new file mode 100644 index 0000000..86aa615 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_66_girafarig.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_67_pinsir.png b/graphics/mon_catch_sprites/catch_mon_67_pinsir.png new file mode 100644 index 0000000..9b5a056 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_67_pinsir.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_68_heracross.png b/graphics/mon_catch_sprites/catch_mon_68_heracross.png new file mode 100644 index 0000000..8d43262 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_68_heracross.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_69_rhyhorn.png b/graphics/mon_catch_sprites/catch_mon_69_rhyhorn.png new file mode 100644 index 0000000..f0e7efd Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_69_rhyhorn.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_70_clamperl.png b/graphics/mon_catch_sprites/catch_mon_70_clamperl.png new file mode 100644 index 0000000..1e2b57d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_70_clamperl.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_71_relicanth.png b/graphics/mon_catch_sprites/catch_mon_71_relicanth.png new file mode 100644 index 0000000..fc5006e Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_71_relicanth.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_72_luvdisc.png b/graphics/mon_catch_sprites/catch_mon_72_luvdisc.png new file mode 100644 index 0000000..4ecc80d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_72_luvdisc.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_73_shelgon.png b/graphics/mon_catch_sprites/catch_mon_73_shelgon.png new file mode 100644 index 0000000..72b220d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_73_shelgon.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_74_beldum.png b/graphics/mon_catch_sprites/catch_mon_74_beldum.png new file mode 100644 index 0000000..557b33f Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_74_beldum.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_75_regirock.png b/graphics/mon_catch_sprites/catch_mon_75_regirock.png new file mode 100644 index 0000000..4f91a05 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_75_regirock.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_76_regice.png b/graphics/mon_catch_sprites/catch_mon_76_regice.png new file mode 100644 index 0000000..06fe208 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_76_regice.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_77_registeel.png b/graphics/mon_catch_sprites/catch_mon_77_registeel.png new file mode 100644 index 0000000..22f90bc Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_77_registeel.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_78_latias.png b/graphics/mon_catch_sprites/catch_mon_78_latias.png new file mode 100644 index 0000000..ac56a52 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_78_latias.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_79_latios.png b/graphics/mon_catch_sprites/catch_mon_79_latios.png new file mode 100644 index 0000000..7a11657 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_79_latios.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_80_jirachi.png b/graphics/mon_catch_sprites/catch_mon_80_jirachi.png new file mode 100644 index 0000000..b6be7b4 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_80_jirachi.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_81_chikorita.png b/graphics/mon_catch_sprites/catch_mon_81_chikorita.png new file mode 100644 index 0000000..870ab0d Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_81_chikorita.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_82_cyndaquil.png b/graphics/mon_catch_sprites/catch_mon_82_cyndaquil.png new file mode 100644 index 0000000..1907056 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_82_cyndaquil.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_83_totodile.png b/graphics/mon_catch_sprites/catch_mon_83_totodile.png new file mode 100644 index 0000000..2e1d3b3 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_83_totodile.png differ diff --git a/graphics/mon_catch_sprites/catch_mon_84_aerodactyl.png b/graphics/mon_catch_sprites/catch_mon_84_aerodactyl.png new file mode 100644 index 0000000..ff30379 Binary files /dev/null and b/graphics/mon_catch_sprites/catch_mon_84_aerodactyl.png differ diff --git a/graphics/mon_catch_sprites/catch_sprites_gfx.json b/graphics/mon_catch_sprites/catch_sprites_gfx.json new file mode 100644 index 0000000..db62c4f --- /dev/null +++ b/graphics/mon_catch_sprites/catch_sprites_gfx.json @@ -0,0 +1,349 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 6, + "mheight": 6, + "oam": true, + "width": 18, + "palette": "" + }, + "files": [ + { + "gfx_filename": "catch_mon_01_treecko", + "palette": "catch_mon_01_treecko.gbapal" + }, + { + "gfx_filename": "catch_mon_02_torchic", + "palette": "catch_mon_02_torchic.gbapal" + }, + { + "gfx_filename": "catch_mon_03_mudkip", + "palette": "catch_mon_03_mudkip.gbapal" + }, + { + "gfx_filename": "catch_mon_04_poochyena", + "palette": "catch_mon_04_poochyena.gbapal" + }, + { + "gfx_filename": "catch_mon_05_zigzagoon", + "palette": "catch_mon_05_zigzagoon.gbapal" + }, + { + "gfx_filename": "catch_mon_06_silcoon", + "palette": "catch_mon_06_silcoon.gbapal" + }, + { + "gfx_filename": "catch_mon_07_cascoon", + "palette": "catch_mon_07_cascoon.gbapal" + }, + { + "gfx_filename": "catch_mon_08_lombre", + "palette": "catch_mon_08_lombre.gbapal" + }, + { + "gfx_filename": "catch_mon_09_nuzleaf", + "palette": "catch_mon_09_nuzleaf.gbapal" + }, + { + "gfx_filename": "catch_mon_10_tailow", + "palette": "catch_mon_10_tailow.gbapal" + }, + { + "gfx_filename": "catch_mon_11_wingull", + "palette": "catch_mon_11_wingull.gbapal" + }, + { + "gfx_filename": "catch_mon_12_slakoth", + "palette": "catch_mon_12_slakoth.gbapal" + }, + { + "gfx_filename": "catch_mon_13_abra", + "palette": "catch_mon_13_abra.gbapal" + }, + { + "gfx_filename": "catch_mon_14_nincada", + "palette": "catch_mon_14_nincada.gbapal" + }, + { + "gfx_filename": "catch_mon_15_loudred", + "palette": "catch_mon_15_loudred.gbapal" + }, + { + "gfx_filename": "catch_mon_16_makuhita", + "palette": "catch_mon_16_makuhita.gbapal" + }, + { + "gfx_filename": "catch_mon_17_goldeen", + "palette": "catch_mon_17_goldeen.gbapal" + }, + { + "gfx_filename": "catch_mon_18_magikarp", + "palette": "catch_mon_18_magikarp.gbapal" + }, + { + "gfx_filename": "catch_mon_19_marill", + "palette": "catch_mon_19_marill.gbapal" + }, + { + "gfx_filename": "catch_mon_20_geodude", + "palette": "catch_mon_20_geodude.gbapal" + }, + { + "gfx_filename": "catch_mon_21_nosepass", + "palette": "catch_mon_21_nosepass.gbapal" + }, + { + "gfx_filename": "catch_mon_22_tentacool", + "palette": "catch_mon_22_tentacool.gbapal" + }, + { + "gfx_filename": "catch_mon_23_sableye", + "palette": "catch_mon_23_sableye.gbapal" + }, + { + "gfx_filename": "catch_mon_24_mawile", + "palette": "catch_mon_24_mawile.gbapal" + }, + { + "gfx_filename": "catch_mon_25_machop", + "palette": "catch_mon_25_machop.gbapal" + }, + { + "gfx_filename": "catch_mon_26_meditite", + "palette": "catch_mon_26_meditite.gbapal" + }, + { + "gfx_filename": "catch_mon_27_electrike", + "palette": "catch_mon_27_electrike.gbapal" + }, + { + "gfx_filename": "catch_mon_28_magnemite", + "palette": "catch_mon_28_magnemite.gbapal" + }, + { + "gfx_filename": "catch_mon_29_voltorb", + "palette": "catch_mon_29_voltorb.gbapal" + }, + { + "gfx_filename": "catch_mon_30_volbeat", + "palette": "catch_mon_30_volbeat.gbapal" + }, + { + "gfx_filename": "catch_mon_31_illumise", + "palette": "catch_mon_31_illumise.gbapal" + }, + { + "gfx_filename": "catch_mon_32_doduo", + "palette": "catch_mon_32_doduo.gbapal" + }, + { + "gfx_filename": "catch_mon_33_roselia", + "palette": "catch_mon_33_roselia.gbapal" + }, + { + "gfx_filename": "catch_mon_34_carvanha", + "palette": "catch_mon_34_carvanha.gbapal" + }, + { + "gfx_filename": "catch_mon_35_wailmer", + "palette": "catch_mon_35_wailmer.gbapal" + }, + { + "gfx_filename": "catch_mon_36_numel", + "palette": "catch_mon_36_numel.gbapal" + }, + { + "gfx_filename": "catch_mon_37_slugma", + "palette": "catch_mon_37_slugma.gbapal" + }, + { + "gfx_filename": "catch_mon_38_torkoal", + "palette": "catch_mon_38_torkoal.gbapal" + }, + { + "gfx_filename": "catch_mon_39_grimer", + "palette": "catch_mon_39_grimer.gbapal" + }, + { + "gfx_filename": "catch_mon_40_koffing", + "palette": "catch_mon_40_koffing.gbapal" + }, + { + "gfx_filename": "catch_mon_41_skarmory", + "palette": "catch_mon_41_skarmory.gbapal" + }, + { + "gfx_filename": "catch_mon_42_vibrava", + "palette": "catch_mon_42_vibrava.gbapal" + }, + { + "gfx_filename": "catch_mon_43_cacnea", + "palette": "catch_mon_43_cacnea.gbapal" + }, + { + "gfx_filename": "catch_mon_44_swablu", + "palette": "catch_mon_44_swablu.gbapal" + }, + { + "gfx_filename": "catch_mon_45_zangoose", + "palette": "catch_mon_45_zangoose.gbapal" + }, + { + "gfx_filename": "catch_mon_46_seviper", + "palette": "catch_mon_46_seviper.gbapal" + }, + { + "gfx_filename": "catch_mon_47_lunatone", + "palette": "catch_mon_47_lunatone.gbapal" + }, + { + "gfx_filename": "catch_mon_48_solrock", + "palette": "catch_mon_48_solrock.gbapal" + }, + { + "gfx_filename": "catch_mon_49_barboach", + "palette": "catch_mon_49_barboach.gbapal" + }, + { + "gfx_filename": "catch_mon_50_corphish", + "palette": "catch_mon_50_corphish.gbapal" + }, + { + "gfx_filename": "catch_mon_51_baltoy", + "palette": "catch_mon_51_baltoy.gbapal" + }, + { + "gfx_filename": "catch_mon_52_lileep", + "palette": "catch_mon_52_lileep.gbapal" + }, + { + "gfx_filename": "catch_mon_53_anorith", + "palette": "catch_mon_53_anorith.gbapal" + }, + { + "gfx_filename": "catch_mon_54_jigglypuff", + "palette": "catch_mon_54_jigglypuff.gbapal" + }, + { + "gfx_filename": "catch_mon_55_febas", + "palette": "catch_mon_55_febas.gbapal" + }, + { + "gfx_filename": "catch_mon_56_castform", + "palette": "catch_mon_56_castform.gbapal" + }, + { + "gfx_filename": "catch_mon_57_staryu", + "palette": "catch_mon_57_staryu.gbapal" + }, + { + "gfx_filename": "catch_mon_58_kecleon", + "palette": "catch_mon_58_kecleon.gbapal" + }, + { + "gfx_filename": "catch_mon_59_duskull", + "palette": "catch_mon_59_duskull.gbapal" + }, + { + "gfx_filename": "catch_mon_60_tropius", + "palette": "catch_mon_60_tropius.gbapal" + }, + { + "gfx_filename": "catch_mon_61_absol", + "palette": "catch_mon_61_absol.gbapal" + }, + { + "gfx_filename": "catch_mon_62_vulpix", + "palette": "catch_mon_62_vulpix.gbapal" + }, + { + "gfx_filename": "catch_mon_63_pikachu", + "palette": "catch_mon_63_pikachu.gbapal" + }, + { + "gfx_filename": "catch_mon_64_psyduck", + "palette": "catch_mon_64_psyduck.gbapal" + }, + { + "gfx_filename": "catch_mon_65_wobbuffet", + "palette": "catch_mon_65_wobbuffet.gbapal" + }, + { + "gfx_filename": "catch_mon_66_girafarig", + "palette": "catch_mon_66_girafarig.gbapal" + }, + { + "gfx_filename": "catch_mon_67_pinsir", + "palette": "catch_mon_67_pinsir.gbapal" + }, + { + "gfx_filename": "catch_mon_68_heracross", + "palette": "catch_mon_68_heracross.gbapal" + }, + { + "gfx_filename": "catch_mon_69_rhyhorn", + "palette": "catch_mon_69_rhyhorn.gbapal" + }, + { + "gfx_filename": "catch_mon_70_clamperl", + "palette": "catch_mon_70_clamperl.gbapal" + }, + { + "gfx_filename": "catch_mon_71_relicanth", + "palette": "catch_mon_71_relicanth.gbapal" + }, + { + "gfx_filename": "catch_mon_72_luvdisc", + "palette": "catch_mon_72_luvdisc.gbapal" + }, + { + "gfx_filename": "catch_mon_73_shelgon", + "palette": "catch_mon_73_shelgon.gbapal" + }, + { + "gfx_filename": "catch_mon_74_beldum", + "palette": "catch_mon_74_beldum.gbapal" + }, + { + "gfx_filename": "catch_mon_75_regirock", + "palette": "catch_mon_75_regirock.gbapal" + }, + { + "gfx_filename": "catch_mon_76_regice", + "palette": "catch_mon_76_regice.gbapal" + }, + { + "gfx_filename": "catch_mon_77_registeel", + "palette": "catch_mon_77_registeel.gbapal" + }, + { + "gfx_filename": "catch_mon_78_latias", + "palette": "catch_mon_78_latias.gbapal" + }, + { + "gfx_filename": "catch_mon_79_latios", + "palette": "catch_mon_79_latios.gbapal" + }, + { + "gfx_filename": "catch_mon_80_jirachi", + "palette": "catch_mon_80_jirachi.gbapal" + }, + { + "gfx_filename": "catch_mon_81_chikorita", + "palette": "catch_mon_81_chikorita.gbapal" + }, + { + "gfx_filename": "catch_mon_82_cyndaquil", + "palette": "catch_mon_82_cyndaquil.gbapal" + }, + { + "gfx_filename": "catch_mon_83_totodile", + "palette": "catch_mon_83_totodile.gbapal" + }, + { + "gfx_filename": "catch_mon_84_aerodactyl", + "palette": "catch_mon_84_aerodactyl.gbapal" + } + ] +} diff --git a/graphics/mon_hatch_sprites/aron_hatch.png b/graphics/mon_hatch_sprites/aron_hatch.png index 0766ea8..692e23d 100644 Binary files a/graphics/mon_hatch_sprites/aron_hatch.png and b/graphics/mon_hatch_sprites/aron_hatch.png differ diff --git a/graphics/mon_hatch_sprites/azurill_hatch.png b/graphics/mon_hatch_sprites/azurill_hatch.png index d9dc9f6..654a04e 100644 Binary files a/graphics/mon_hatch_sprites/azurill_hatch.png and b/graphics/mon_hatch_sprites/azurill_hatch.png differ diff --git a/graphics/mon_hatch_sprites/bagon_hatch.png b/graphics/mon_hatch_sprites/bagon_hatch.png index 347bfab..4d1af40 100644 Binary files a/graphics/mon_hatch_sprites/bagon_hatch.png and b/graphics/mon_hatch_sprites/bagon_hatch.png differ diff --git a/graphics/mon_hatch_sprites/chimecho_hatch.png b/graphics/mon_hatch_sprites/chimecho_hatch.png index 33865af..5586e9e 100644 Binary files a/graphics/mon_hatch_sprites/chimecho_hatch.png and b/graphics/mon_hatch_sprites/chimecho_hatch.png differ diff --git a/graphics/mon_hatch_sprites/chinchou_hatch.png b/graphics/mon_hatch_sprites/chinchou_hatch.png index fe69711..cac9b4c 100644 Binary files a/graphics/mon_hatch_sprites/chinchou_hatch.png and b/graphics/mon_hatch_sprites/chinchou_hatch.png differ diff --git a/graphics/mon_hatch_sprites/corsola_hatch.png b/graphics/mon_hatch_sprites/corsola_hatch.png index caaa738..c0870d8 100644 Binary files a/graphics/mon_hatch_sprites/corsola_hatch.png and b/graphics/mon_hatch_sprites/corsola_hatch.png differ diff --git a/graphics/mon_hatch_sprites/gulpin_hatch.png b/graphics/mon_hatch_sprites/gulpin_hatch.png index 911ae49..9f07271 100644 Binary files a/graphics/mon_hatch_sprites/gulpin_hatch.png and b/graphics/mon_hatch_sprites/gulpin_hatch.png differ diff --git a/graphics/mon_hatch_sprites/hatch.json b/graphics/mon_hatch_sprites/hatch.json new file mode 100644 index 0000000..3b0f9e8 --- /dev/null +++ b/graphics/mon_hatch_sprites/hatch.json @@ -0,0 +1,144 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 3, + "mheight": 3, + "width": 15, + "oam": true + }, + "files": [ + { + "gfx_filename": "aron_hatch", + "palette": "aron_hatch.gbapal" + }, + { + "gfx_filename": "azurill_hatch", + "palette": "azurill_hatch.gbapal" + }, + { + "gfx_filename": "bagon_hatch", + "palette": "bagon_hatch.gbapal" + }, + { + "gfx_filename": "chimecho_hatch", + "palette": "chimecho_hatch.gbapal" + }, + { + "gfx_filename": "chinchou_hatch", + "palette": "chinchou_hatch.gbapal" + }, + { + "gfx_filename": "corsola_hatch", + "palette": "corsola_hatch.gbapal" + }, + { + "gfx_filename": "gulpin_hatch", + "palette": "gulpin_hatch.gbapal" + }, + { + "gfx_filename": "horsea_hatch", + "palette": "horsea_hatch.gbapal" + }, + { + "gfx_filename": "igglybuff_hatch", + "palette": "igglybuff_hatch.gbapal" + }, + { + "gfx_filename": "lotad_hatch", + "palette": "lotad_hatch.gbapal" + }, + { + "gfx_filename": "minun_hatch", + "palette": "minun_hatch.gbapal" + }, + { + "gfx_filename": "natu_hatch", + "palette": "natu_hatch.gbapal" + }, + { + "gfx_filename": "oddish_hatch", + "palette": "oddish_hatch.gbapal" + }, + { + "gfx_filename": "phanpy_hatch", + "palette": "phanpy_hatch.gbapal" + }, + { + "gfx_filename": "pichu_2_hatch", + "palette": "pichu_2_hatch.gbapal" + }, + { + "gfx_filename": "pichu_hatch", + "palette": "pichu_hatch.gbapal" + }, + { + "gfx_filename": "plusle_hatch", + "palette": "plusle_hatch.gbapal" + }, + { + "gfx_filename": "ralts_hatch", + "palette": "ralts_hatch.gbapal" + }, + { + "gfx_filename": "sandshrew_hatch", + "palette": "sandshrew_hatch.gbapal" + }, + { + "gfx_filename": "seedot_hatch", + "palette": "seedot_hatch.gbapal" + }, + { + "gfx_filename": "shroomish_hatch", + "palette": "shroomish_hatch.gbapal" + }, + { + "gfx_filename": "shuppet_hatch", + "palette": "shuppet_hatch.gbapal" + }, + { + "gfx_filename": "skitty_hatch", + "palette": "skitty_hatch.gbapal" + }, + { + "gfx_filename": "snorunt_hatch", + "palette": "snorunt_hatch.gbapal" + }, + { + "gfx_filename": "spheal_hatch", + "palette": "spheal_hatch.gbapal" + }, + { + "gfx_filename": "spinda_hatch", + "palette": "spinda_hatch.gbapal" + }, + { + "gfx_filename": "spoink_hatch", + "palette": "spoink_hatch.gbapal" + }, + { + "gfx_filename": "surskit_hatch", + "palette": "surskit_hatch.gbapal" + }, + { + "gfx_filename": "trapinch_hatch", + "palette": "trapinch_hatch.gbapal" + }, + { + "gfx_filename": "whismur_hatch", + "palette": "whismur_hatch.gbapal" + }, + { + "gfx_filename": "wurmple_hatch", + "palette": "wurmple_hatch.gbapal" + }, + { + "gfx_filename": "wynaut_hatch", + "palette": "wynaut_hatch.gbapal" + }, + { + "gfx_filename": "zubat_hatch", + "palette": "zubat_hatch.gbapal" + } + ] +} diff --git a/graphics/mon_hatch_sprites/horsea_hatch.png b/graphics/mon_hatch_sprites/horsea_hatch.png index 59e3083..e4e9c0e 100644 Binary files a/graphics/mon_hatch_sprites/horsea_hatch.png and b/graphics/mon_hatch_sprites/horsea_hatch.png differ diff --git a/graphics/mon_hatch_sprites/igglybuff_hatch.png b/graphics/mon_hatch_sprites/igglybuff_hatch.png index f0ae71e..9f03989 100644 Binary files a/graphics/mon_hatch_sprites/igglybuff_hatch.png and b/graphics/mon_hatch_sprites/igglybuff_hatch.png differ diff --git a/graphics/mon_hatch_sprites/lotad_hatch.png b/graphics/mon_hatch_sprites/lotad_hatch.png index 2f92de0..0a5884c 100644 Binary files a/graphics/mon_hatch_sprites/lotad_hatch.png and b/graphics/mon_hatch_sprites/lotad_hatch.png differ diff --git a/graphics/mon_hatch_sprites/minun_hatch.png b/graphics/mon_hatch_sprites/minun_hatch.png index ab0acba..458396f 100644 Binary files a/graphics/mon_hatch_sprites/minun_hatch.png and b/graphics/mon_hatch_sprites/minun_hatch.png differ diff --git a/graphics/mon_hatch_sprites/natu_hatch.png b/graphics/mon_hatch_sprites/natu_hatch.png index 68aa520..fdaba68 100644 Binary files a/graphics/mon_hatch_sprites/natu_hatch.png and b/graphics/mon_hatch_sprites/natu_hatch.png differ diff --git a/graphics/mon_hatch_sprites/oddish_hatch.png b/graphics/mon_hatch_sprites/oddish_hatch.png index e5296b5..bc941c5 100644 Binary files a/graphics/mon_hatch_sprites/oddish_hatch.png and b/graphics/mon_hatch_sprites/oddish_hatch.png differ diff --git a/graphics/mon_hatch_sprites/phanpy_hatch.png b/graphics/mon_hatch_sprites/phanpy_hatch.png index 5913edc..375001e 100644 Binary files a/graphics/mon_hatch_sprites/phanpy_hatch.png and b/graphics/mon_hatch_sprites/phanpy_hatch.png differ diff --git a/graphics/mon_hatch_sprites/pichu_2_hatch.png b/graphics/mon_hatch_sprites/pichu_2_hatch.png index b186ad3..407598a 100644 Binary files a/graphics/mon_hatch_sprites/pichu_2_hatch.png and b/graphics/mon_hatch_sprites/pichu_2_hatch.png differ diff --git a/graphics/mon_hatch_sprites/pichu_hatch.png b/graphics/mon_hatch_sprites/pichu_hatch.png index c6d2534..59cd549 100644 Binary files a/graphics/mon_hatch_sprites/pichu_hatch.png and b/graphics/mon_hatch_sprites/pichu_hatch.png differ diff --git a/graphics/mon_hatch_sprites/plusle_hatch.png b/graphics/mon_hatch_sprites/plusle_hatch.png index c5715c8..dd16efb 100644 Binary files a/graphics/mon_hatch_sprites/plusle_hatch.png and b/graphics/mon_hatch_sprites/plusle_hatch.png differ diff --git a/graphics/mon_hatch_sprites/ralts_hatch.png b/graphics/mon_hatch_sprites/ralts_hatch.png index 3437560..fdc2537 100644 Binary files a/graphics/mon_hatch_sprites/ralts_hatch.png and b/graphics/mon_hatch_sprites/ralts_hatch.png differ diff --git a/graphics/mon_hatch_sprites/sandshrew_hatch.png b/graphics/mon_hatch_sprites/sandshrew_hatch.png index ce1d2dd..b50bbf7 100644 Binary files a/graphics/mon_hatch_sprites/sandshrew_hatch.png and b/graphics/mon_hatch_sprites/sandshrew_hatch.png differ diff --git a/graphics/mon_hatch_sprites/seedot_hatch.png b/graphics/mon_hatch_sprites/seedot_hatch.png index 427e28b..8eddf85 100644 Binary files a/graphics/mon_hatch_sprites/seedot_hatch.png and b/graphics/mon_hatch_sprites/seedot_hatch.png differ diff --git a/graphics/mon_hatch_sprites/shroomish_hatch.png b/graphics/mon_hatch_sprites/shroomish_hatch.png index ca75b32..4025593 100644 Binary files a/graphics/mon_hatch_sprites/shroomish_hatch.png and b/graphics/mon_hatch_sprites/shroomish_hatch.png differ diff --git a/graphics/mon_hatch_sprites/shuppet_hatch.png b/graphics/mon_hatch_sprites/shuppet_hatch.png index eb595ae..8ee37d6 100644 Binary files a/graphics/mon_hatch_sprites/shuppet_hatch.png and b/graphics/mon_hatch_sprites/shuppet_hatch.png differ diff --git a/graphics/mon_hatch_sprites/skitty_hatch.png b/graphics/mon_hatch_sprites/skitty_hatch.png index 9f4b5ad..e3f9e4a 100644 Binary files a/graphics/mon_hatch_sprites/skitty_hatch.png and b/graphics/mon_hatch_sprites/skitty_hatch.png differ diff --git a/graphics/mon_hatch_sprites/snorunt_hatch.png b/graphics/mon_hatch_sprites/snorunt_hatch.png index 3bf5bef..598c908 100644 Binary files a/graphics/mon_hatch_sprites/snorunt_hatch.png and b/graphics/mon_hatch_sprites/snorunt_hatch.png differ diff --git a/graphics/mon_hatch_sprites/spheal_hatch.png b/graphics/mon_hatch_sprites/spheal_hatch.png index d88a29d..51484a9 100644 Binary files a/graphics/mon_hatch_sprites/spheal_hatch.png and b/graphics/mon_hatch_sprites/spheal_hatch.png differ diff --git a/graphics/mon_hatch_sprites/spinda_hatch.png b/graphics/mon_hatch_sprites/spinda_hatch.png index 63de4b8..987106f 100644 Binary files a/graphics/mon_hatch_sprites/spinda_hatch.png and b/graphics/mon_hatch_sprites/spinda_hatch.png differ diff --git a/graphics/mon_hatch_sprites/spoink_hatch.png b/graphics/mon_hatch_sprites/spoink_hatch.png index 64ab79c..b387d2e 100644 Binary files a/graphics/mon_hatch_sprites/spoink_hatch.png and b/graphics/mon_hatch_sprites/spoink_hatch.png differ diff --git a/graphics/mon_hatch_sprites/surskit_hatch.png b/graphics/mon_hatch_sprites/surskit_hatch.png index fbf7c0e..e1dd1df 100644 Binary files a/graphics/mon_hatch_sprites/surskit_hatch.png and b/graphics/mon_hatch_sprites/surskit_hatch.png differ diff --git a/graphics/mon_hatch_sprites/trapinch_hatch.png b/graphics/mon_hatch_sprites/trapinch_hatch.png index 635d93d..6366775 100644 Binary files a/graphics/mon_hatch_sprites/trapinch_hatch.png and b/graphics/mon_hatch_sprites/trapinch_hatch.png differ diff --git a/graphics/mon_hatch_sprites/whismur_hatch.png b/graphics/mon_hatch_sprites/whismur_hatch.png index fb5363f..e541e2e 100644 Binary files a/graphics/mon_hatch_sprites/whismur_hatch.png and b/graphics/mon_hatch_sprites/whismur_hatch.png differ diff --git a/graphics/mon_hatch_sprites/wurmple_hatch.png b/graphics/mon_hatch_sprites/wurmple_hatch.png index bfb5181..f7479bb 100644 Binary files a/graphics/mon_hatch_sprites/wurmple_hatch.png and b/graphics/mon_hatch_sprites/wurmple_hatch.png differ diff --git a/graphics/mon_hatch_sprites/wynaut_hatch.png b/graphics/mon_hatch_sprites/wynaut_hatch.png index 71e7215..db26543 100644 Binary files a/graphics/mon_hatch_sprites/wynaut_hatch.png and b/graphics/mon_hatch_sprites/wynaut_hatch.png differ diff --git a/graphics/mon_hatch_sprites/zubat_hatch.png b/graphics/mon_hatch_sprites/zubat_hatch.png index e9947c7..9812889 100644 Binary files a/graphics/mon_hatch_sprites/zubat_hatch.png and b/graphics/mon_hatch_sprites/zubat_hatch.png differ diff --git a/graphics/mon_portraits/mon_portraits_gfx.json b/graphics/mon_portraits/mon_portraits_gfx.json new file mode 100644 index 0000000..3c33fc0 --- /dev/null +++ b/graphics/mon_portraits/mon_portraits_gfx.json @@ -0,0 +1,852 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 2, + "mheight": 2, + "oam": false, + "width": 6 + }, + "files": [ + { + "gfx_filename": "207_portrait", + "palette": "207_portrait.gbapal" + }, + { + "gfx_filename": "208_portrait", + "palette": "208_portrait.gbapal" + }, + { + "gfx_filename": "209_portrait", + "palette": "209_portrait.gbapal" + }, + { + "gfx_filename": "210_portrait", + "palette": "210_portrait.gbapal" + }, + { + "gfx_filename": "abra_portrait", + "palette": "abra_portrait.gbapal" + }, + { + "gfx_filename": "absol_portrait", + "palette": "absol_portrait.gbapal" + }, + { + "gfx_filename": "aerodactyl_portrait", + "palette": "aerodactyl_portrait.gbapal" + }, + { + "gfx_filename": "aggron_portrait", + "palette": "aggron_portrait.gbapal" + }, + { + "gfx_filename": "alakazam_portrait", + "palette": "alakazam_portrait.gbapal" + }, + { + "gfx_filename": "altaria_portrait", + "palette": "altaria_portrait.gbapal" + }, + { + "gfx_filename": "anorith_portrait", + "palette": "anorith_portrait.gbapal" + }, + { + "gfx_filename": "armaldo_portrait", + "palette": "armaldo_portrait.gbapal" + }, + { + "gfx_filename": "aron_portrait", + "palette": "aron_portrait.gbapal" + }, + { + "gfx_filename": "azumarill_portrait", + "palette": "azumarill_portrait.gbapal" + }, + { + "gfx_filename": "azurill_portrait", + "palette": "azurill_portrait.gbapal" + }, + { + "gfx_filename": "bagon_portrait", + "palette": "bagon_portrait.gbapal" + }, + { + "gfx_filename": "baltoy_portrait", + "palette": "baltoy_portrait.gbapal" + }, + { + "gfx_filename": "banette_portrait", + "palette": "banette_portrait.gbapal" + }, + { + "gfx_filename": "barboach_portrait", + "palette": "barboach_portrait.gbapal" + }, + { + "gfx_filename": "beautifly_portrait", + "palette": "beautifly_portrait.gbapal" + }, + { + "gfx_filename": "beldum_portrait", + "palette": "beldum_portrait.gbapal" + }, + { + "gfx_filename": "bellossom_portrait", + "palette": "bellossom_portrait.gbapal" + }, + { + "gfx_filename": "blaziken_portrait", + "palette": "blaziken_portrait.gbapal" + }, + { + "gfx_filename": "breloom_portrait", + "palette": "breloom_portrait.gbapal" + }, + { + "gfx_filename": "cacnea_portrait", + "palette": "cacnea_portrait.gbapal" + }, + { + "gfx_filename": "cacturne_portrait", + "palette": "cacturne_portrait.gbapal" + }, + { + "gfx_filename": "camerupt_portrait", + "palette": "camerupt_portrait.gbapal" + }, + { + "gfx_filename": "carvanha_portrait", + "palette": "carvanha_portrait.gbapal" + }, + { + "gfx_filename": "cascoon_portrait", + "palette": "cascoon_portrait.gbapal" + }, + { + "gfx_filename": "castform_portrait", + "palette": "castform_portrait.gbapal" + }, + { + "gfx_filename": "chikorita_portrait", + "palette": "chikorita_portrait.gbapal" + }, + { + "gfx_filename": "chimecho_portrait", + "palette": "chimecho_portrait.gbapal" + }, + { + "gfx_filename": "chinchou_portrait", + "palette": "chinchou_portrait.gbapal" + }, + { + "gfx_filename": "clamperl_portrait", + "palette": "clamperl_portrait.gbapal" + }, + { + "gfx_filename": "claydol_portrait", + "palette": "claydol_portrait.gbapal" + }, + { + "gfx_filename": "combusken_portrait", + "palette": "combusken_portrait.gbapal" + }, + { + "gfx_filename": "corphish_portrait", + "palette": "corphish_portrait.gbapal" + }, + { + "gfx_filename": "corsola_portrait", + "palette": "corsola_portrait.gbapal" + }, + { + "gfx_filename": "cradily_portrait", + "palette": "cradily_portrait.gbapal" + }, + { + "gfx_filename": "crawdaunt_portrait", + "palette": "crawdaunt_portrait.gbapal" + }, + { + "gfx_filename": "crobat_portrait", + "palette": "crobat_portrait.gbapal" + }, + { + "gfx_filename": "cyndaquil_portrait", + "palette": "cyndaquil_portrait.gbapal" + }, + { + "gfx_filename": "delcatty_portrait", + "palette": "delcatty_portrait.gbapal" + }, + { + "gfx_filename": "dodrio_portrait", + "palette": "dodrio_portrait.gbapal" + }, + { + "gfx_filename": "doduo_portrait", + "palette": "doduo_portrait.gbapal" + }, + { + "gfx_filename": "donphan_portrait", + "palette": "donphan_portrait.gbapal" + }, + { + "gfx_filename": "dusclops_portrait", + "palette": "dusclops_portrait.gbapal" + }, + { + "gfx_filename": "duskull_portrait", + "palette": "duskull_portrait.gbapal" + }, + { + "gfx_filename": "dustox_portrait", + "palette": "dustox_portrait.gbapal" + }, + { + "gfx_filename": "electrike_portrait", + "palette": "electrike_portrait.gbapal" + }, + { + "gfx_filename": "electrode_portrait", + "palette": "electrode_portrait.gbapal" + }, + { + "gfx_filename": "exploud_portrait", + "palette": "exploud_portrait.gbapal" + }, + { + "gfx_filename": "feebas_portrait", + "palette": "feebas_portrait.gbapal" + }, + { + "gfx_filename": "flygon_portrait", + "palette": "flygon_portrait.gbapal" + }, + { + "gfx_filename": "gardevoir_portrait", + "palette": "gardevoir_portrait.gbapal" + }, + { + "gfx_filename": "geodude_portrait", + "palette": "geodude_portrait.gbapal" + }, + { + "gfx_filename": "girafarig_portrait", + "palette": "girafarig_portrait.gbapal" + }, + { + "gfx_filename": "glalie_portrait", + "palette": "glalie_portrait.gbapal" + }, + { + "gfx_filename": "gloom_portrait", + "palette": "gloom_portrait.gbapal" + }, + { + "gfx_filename": "golbat_portrait", + "palette": "golbat_portrait.gbapal" + }, + { + "gfx_filename": "goldeen_portrait", + "palette": "goldeen_portrait.gbapal" + }, + { + "gfx_filename": "golduck_portrait", + "palette": "golduck_portrait.gbapal" + }, + { + "gfx_filename": "golem_portrait", + "palette": "golem_portrait.gbapal" + }, + { + "gfx_filename": "gorebyss_portrait", + "palette": "gorebyss_portrait.gbapal" + }, + { + "gfx_filename": "graveler_portrait", + "palette": "graveler_portrait.gbapal" + }, + { + "gfx_filename": "grimer_portrait", + "palette": "grimer_portrait.gbapal" + }, + { + "gfx_filename": "groudon_portrait", + "palette": "groudon_portrait.gbapal" + }, + { + "gfx_filename": "grovyle_portrait", + "palette": "grovyle_portrait.gbapal" + }, + { + "gfx_filename": "grumpig_portrait", + "palette": "grumpig_portrait.gbapal" + }, + { + "gfx_filename": "gulpin_portrait", + "palette": "gulpin_portrait.gbapal" + }, + { + "gfx_filename": "gyarados_portrait", + "palette": "gyarados_portrait.gbapal" + }, + { + "gfx_filename": "hariyama_portrait", + "palette": "hariyama_portrait.gbapal" + }, + { + "gfx_filename": "heracross_portrait", + "palette": "heracross_portrait.gbapal" + }, + { + "gfx_filename": "horsea_portrait", + "palette": "horsea_portrait.gbapal" + }, + { + "gfx_filename": "huntail_portrait", + "palette": "huntail_portrait.gbapal" + }, + { + "gfx_filename": "igglybuff_portrait", + "palette": "igglybuff_portrait.gbapal" + }, + { + "gfx_filename": "illumise_portrait", + "palette": "illumise_portrait.gbapal" + }, + { + "gfx_filename": "jigglypuff_portrait", + "palette": "jigglypuff_portrait.gbapal" + }, + { + "gfx_filename": "jirachi_portrait", + "palette": "jirachi_portrait.gbapal" + }, + { + "gfx_filename": "kadabra_portrait", + "palette": "kadabra_portrait.gbapal" + }, + { + "gfx_filename": "kecleon_portrait", + "palette": "kecleon_portrait.gbapal" + }, + { + "gfx_filename": "kingdra_portrait", + "palette": "kingdra_portrait.gbapal" + }, + { + "gfx_filename": "kirlia_portrait", + "palette": "kirlia_portrait.gbapal" + }, + { + "gfx_filename": "koffing_portrait", + "palette": "koffing_portrait.gbapal" + }, + { + "gfx_filename": "kyogre_portrait", + "palette": "kyogre_portrait.gbapal" + }, + { + "gfx_filename": "lairon_portrait", + "palette": "lairon_portrait.gbapal" + }, + { + "gfx_filename": "lanturn_portrait", + "palette": "lanturn_portrait.gbapal" + }, + { + "gfx_filename": "latias_portrait", + "palette": "latias_portrait.gbapal" + }, + { + "gfx_filename": "latios_portrait", + "palette": "latios_portrait.gbapal" + }, + { + "gfx_filename": "lileep_portrait", + "palette": "lileep_portrait.gbapal" + }, + { + "gfx_filename": "linoone_portrait", + "palette": "linoone_portrait.gbapal" + }, + { + "gfx_filename": "lombre_portrait", + "palette": "lombre_portrait.gbapal" + }, + { + "gfx_filename": "lotad_portrait", + "palette": "lotad_portrait.gbapal" + }, + { + "gfx_filename": "loudred_portrait", + "palette": "loudred_portrait.gbapal" + }, + { + "gfx_filename": "ludicolo_portrait", + "palette": "ludicolo_portrait.gbapal" + }, + { + "gfx_filename": "lunatone_portrait", + "palette": "lunatone_portrait.gbapal" + }, + { + "gfx_filename": "luvdisc_portrait", + "palette": "luvdisc_portrait.gbapal" + }, + { + "gfx_filename": "machamp_portrait", + "palette": "machamp_portrait.gbapal" + }, + { + "gfx_filename": "machoke_portrait", + "palette": "machoke_portrait.gbapal" + }, + { + "gfx_filename": "machop_portrait", + "palette": "machop_portrait.gbapal" + }, + { + "gfx_filename": "magcargo_portrait", + "palette": "magcargo_portrait.gbapal" + }, + { + "gfx_filename": "magikarp_portrait", + "palette": "magikarp_portrait.gbapal" + }, + { + "gfx_filename": "magnemite_portrait", + "palette": "magnemite_portrait.gbapal" + }, + { + "gfx_filename": "magneton_portrait", + "palette": "magneton_portrait.gbapal" + }, + { + "gfx_filename": "makuhita_portrait", + "palette": "makuhita_portrait.gbapal" + }, + { + "gfx_filename": "manectric_portrait", + "palette": "manectric_portrait.gbapal" + }, + { + "gfx_filename": "marill_portrait", + "palette": "marill_portrait.gbapal" + }, + { + "gfx_filename": "marshtomp_portrait", + "palette": "marshtomp_portrait.gbapal" + }, + { + "gfx_filename": "masquerain_portrait", + "palette": "masquerain_portrait.gbapal" + }, + { + "gfx_filename": "mawile_portrait", + "palette": "mawile_portrait.gbapal" + }, + { + "gfx_filename": "medicham_portrait", + "palette": "medicham_portrait.gbapal" + }, + { + "gfx_filename": "meditite_portrait", + "palette": "meditite_portrait.gbapal" + }, + { + "gfx_filename": "metagross_portrait", + "palette": "metagross_portrait.gbapal" + }, + { + "gfx_filename": "metang_portrait", + "palette": "metang_portrait.gbapal" + }, + { + "gfx_filename": "mightyena_portrait", + "palette": "mightyena_portrait.gbapal" + }, + { + "gfx_filename": "milotic_portrait", + "palette": "milotic_portrait.gbapal" + }, + { + "gfx_filename": "minun_portrait", + "palette": "minun_portrait.gbapal" + }, + { + "gfx_filename": "mudkip_portrait", + "palette": "mudkip_portrait.gbapal" + }, + { + "gfx_filename": "muk_portrait", + "palette": "muk_portrait.gbapal" + }, + { + "gfx_filename": "natu_portrait", + "palette": "natu_portrait.gbapal" + }, + { + "gfx_filename": "nincada_portrait", + "palette": "nincada_portrait.gbapal" + }, + { + "gfx_filename": "ninetales_portrait", + "palette": "ninetales_portrait.gbapal" + }, + { + "gfx_filename": "ninjask_portrait", + "palette": "ninjask_portrait.gbapal" + }, + { + "gfx_filename": "nosepass_portrait", + "palette": "nosepass_portrait.gbapal" + }, + { + "gfx_filename": "numel_portrait", + "palette": "numel_portrait.gbapal" + }, + { + "gfx_filename": "nuzleaf_portrait", + "palette": "nuzleaf_portrait.gbapal" + }, + { + "gfx_filename": "oddish_portrait", + "palette": "oddish_portrait.gbapal" + }, + { + "gfx_filename": "pelipper_portrait", + "palette": "pelipper_portrait.gbapal" + }, + { + "gfx_filename": "phanpy_portrait", + "palette": "phanpy_portrait.gbapal" + }, + { + "gfx_filename": "pichu_portrait", + "palette": "pichu_portrait.gbapal" + }, + { + "gfx_filename": "pikachu_portrait", + "palette": "pikachu_portrait.gbapal" + }, + { + "gfx_filename": "pinsir_portrait", + "palette": "pinsir_portrait.gbapal" + }, + { + "gfx_filename": "plusle_portrait", + "palette": "plusle_portrait.gbapal" + }, + { + "gfx_filename": "poochyena_portrait", + "palette": "poochyena_portrait.gbapal" + }, + { + "gfx_filename": "psyduck_portrait", + "palette": "psyduck_portrait.gbapal" + }, + { + "gfx_filename": "question_mark_portrait", + "palette": "question_mark_portrait.gbapal" + }, + { + "gfx_filename": "raichu_portrait", + "palette": "raichu_portrait.gbapal" + }, + { + "gfx_filename": "ralts_portrait", + "palette": "ralts_portrait.gbapal" + }, + { + "gfx_filename": "rayquaza_portrait", + "palette": "rayquaza_portrait.gbapal" + }, + { + "gfx_filename": "regice_portrait", + "palette": "regice_portrait.gbapal" + }, + { + "gfx_filename": "regirock_portrait", + "palette": "regirock_portrait.gbapal" + }, + { + "gfx_filename": "registeel_portrait", + "palette": "registeel_portrait.gbapal" + }, + { + "gfx_filename": "relicanth_portrait", + "palette": "relicanth_portrait.gbapal" + }, + { + "gfx_filename": "rhydon_portrait", + "palette": "rhydon_portrait.gbapal" + }, + { + "gfx_filename": "rhyhorn_portrait", + "palette": "rhyhorn_portrait.gbapal" + }, + { + "gfx_filename": "roselia_portrait", + "palette": "roselia_portrait.gbapal" + }, + { + "gfx_filename": "sableye_portrait", + "palette": "sableye_portrait.gbapal" + }, + { + "gfx_filename": "salamence_portrait", + "palette": "salamence_portrait.gbapal" + }, + { + "gfx_filename": "sandshrew_portrait", + "palette": "sandshrew_portrait.gbapal" + }, + { + "gfx_filename": "sandslash_portrait", + "palette": "sandslash_portrait.gbapal" + }, + { + "gfx_filename": "sceptile_portrait", + "palette": "sceptile_portrait.gbapal" + }, + { + "gfx_filename": "seadra_portrait", + "palette": "seadra_portrait.gbapal" + }, + { + "gfx_filename": "seaking_portrait", + "palette": "seaking_portrait.gbapal" + }, + { + "gfx_filename": "sealeo_portrait", + "palette": "sealeo_portrait.gbapal" + }, + { + "gfx_filename": "seedot_portrait", + "palette": "seedot_portrait.gbapal" + }, + { + "gfx_filename": "seviper_portrait", + "palette": "seviper_portrait.gbapal" + }, + { + "gfx_filename": "sharpedo_portrait", + "palette": "sharpedo_portrait.gbapal" + }, + { + "gfx_filename": "shedinja_portrait", + "palette": "shedinja_portrait.gbapal" + }, + { + "gfx_filename": "shelgon_portrait", + "palette": "shelgon_portrait.gbapal" + }, + { + "gfx_filename": "shiftry_portrait", + "palette": "shiftry_portrait.gbapal" + }, + { + "gfx_filename": "shroomish_portrait", + "palette": "shroomish_portrait.gbapal" + }, + { + "gfx_filename": "shuppet_portrait", + "palette": "shuppet_portrait.gbapal" + }, + { + "gfx_filename": "silcoon_portrait", + "palette": "silcoon_portrait.gbapal" + }, + { + "gfx_filename": "skarmory_portrait", + "palette": "skarmory_portrait.gbapal" + }, + { + "gfx_filename": "skitty_portrait", + "palette": "skitty_portrait.gbapal" + }, + { + "gfx_filename": "slaking_portrait", + "palette": "slaking_portrait.gbapal" + }, + { + "gfx_filename": "slakoth_portrait", + "palette": "slakoth_portrait.gbapal" + }, + { + "gfx_filename": "slugma_portrait", + "palette": "slugma_portrait.gbapal" + }, + { + "gfx_filename": "snorunt_portrait", + "palette": "snorunt_portrait.gbapal" + }, + { + "gfx_filename": "solrock_portrait", + "palette": "solrock_portrait.gbapal" + }, + { + "gfx_filename": "spheal_portrait", + "palette": "spheal_portrait.gbapal" + }, + { + "gfx_filename": "spinda_portrait", + "palette": "spinda_portrait.gbapal" + }, + { + "gfx_filename": "spoink_portrait", + "palette": "spoink_portrait.gbapal" + }, + { + "gfx_filename": "starmie_portrait", + "palette": "starmie_portrait.gbapal" + }, + { + "gfx_filename": "staryu_portrait", + "palette": "staryu_portrait.gbapal" + }, + { + "gfx_filename": "surskit_portrait", + "palette": "surskit_portrait.gbapal" + }, + { + "gfx_filename": "swablu_portrait", + "palette": "swablu_portrait.gbapal" + }, + { + "gfx_filename": "swalot_portrait", + "palette": "swalot_portrait.gbapal" + }, + { + "gfx_filename": "swampert_portrait", + "palette": "swampert_portrait.gbapal" + }, + { + "gfx_filename": "swellow_portrait", + "palette": "swellow_portrait.gbapal" + }, + { + "gfx_filename": "taillow_portrait", + "palette": "taillow_portrait.gbapal" + }, + { + "gfx_filename": "tentacool_portrait", + "palette": "tentacool_portrait.gbapal" + }, + { + "gfx_filename": "tentacruel_portrait", + "palette": "tentacruel_portrait.gbapal" + }, + { + "gfx_filename": "torchic_portrait", + "palette": "torchic_portrait.gbapal" + }, + { + "gfx_filename": "torkoal_portrait", + "palette": "torkoal_portrait.gbapal" + }, + { + "gfx_filename": "totodile_portrait", + "palette": "totodile_portrait.gbapal" + }, + { + "gfx_filename": "trapinch_portrait", + "palette": "trapinch_portrait.gbapal" + }, + { + "gfx_filename": "treecko_portrait", + "palette": "treecko_portrait.gbapal" + }, + { + "gfx_filename": "tropius_portrait", + "palette": "tropius_portrait.gbapal" + }, + { + "gfx_filename": "vibrava_portrait", + "palette": "vibrava_portrait.gbapal" + }, + { + "gfx_filename": "vigoroth_portrait", + "palette": "vigoroth_portrait.gbapal" + }, + { + "gfx_filename": "vileplume_portrait", + "palette": "vileplume_portrait.gbapal" + }, + { + "gfx_filename": "volbeat_portrait", + "palette": "volbeat_portrait.gbapal" + }, + { + "gfx_filename": "voltorb_portrait", + "palette": "voltorb_portrait.gbapal" + }, + { + "gfx_filename": "vulpix_portrait", + "palette": "vulpix_portrait.gbapal" + }, + { + "gfx_filename": "wailmer_portrait", + "palette": "wailmer_portrait.gbapal" + }, + { + "gfx_filename": "wailord_portrait", + "palette": "wailord_portrait.gbapal" + }, + { + "gfx_filename": "walrein_portrait", + "palette": "walrein_portrait.gbapal" + }, + { + "gfx_filename": "weezing_portrait", + "palette": "weezing_portrait.gbapal" + }, + { + "gfx_filename": "whiscash_portrait", + "palette": "whiscash_portrait.gbapal" + }, + { + "gfx_filename": "whismur_portrait", + "palette": "whismur_portrait.gbapal" + }, + { + "gfx_filename": "wigglytuff_portrait", + "palette": "wigglytuff_portrait.gbapal" + }, + { + "gfx_filename": "wingull_portrait", + "palette": "wingull_portrait.gbapal" + }, + { + "gfx_filename": "wobbuffet_portrait", + "palette": "wobbuffet_portrait.gbapal" + }, + { + "gfx_filename": "wurmple_portrait", + "palette": "wurmple_portrait.gbapal" + }, + { + "gfx_filename": "wynaut_portrait", + "palette": "wynaut_portrait.gbapal" + }, + { + "gfx_filename": "xatu_portrait", + "palette": "xatu_portrait.gbapal" + }, + { + "gfx_filename": "zangoose_portrait", + "palette": "zangoose_portrait.gbapal" + }, + { + "gfx_filename": "zigzagoon_portrait", + "palette": "zigzagoon_portrait.gbapal" + }, + { + "gfx_filename": "zubat_portrait", + "palette": "zubat_portrait.gbapal" + } + ] +} diff --git a/graphics/pokedex/pokedex_gfx.json b/graphics/pokedex/pokedex_gfx.json new file mode 100644 index 0000000..73406e7 --- /dev/null +++ b/graphics/pokedex/pokedex_gfx.json @@ -0,0 +1,183 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "sprites", + "segments": + [ + { + "segfile":"sprites_hand", + "mheight":2, + "mwidth":2 + }, + { + "segfile":"sprites_select_full", + "mheight":2, + "mwidth":7, + "oam":true + }, + { + "segfile":"sprites_select_left", + "mheight":2, + "mwidth":4, + "oam":true + }, + { + "segfile":"sprites_select_mid", + "mheight":2, + "mwidth":2 + }, + { + "segfile":"sprites_select_right", + "mheight":2, + "mwidth":1 + }, + { + "segfile":"sprites_transmission_start", + "mwidth":13, + "mheight":8, + "oam":true + }, + { + "segfile":"sprites_transmitting", + "mwidth":10, + "mheight":4, + "oam":true + }, + { + "segfile":"sprites_transmission_error", + "mwidth":12, + "mheight":4, + "oam":true + }, + { + "segfile":"sprites_transmission_completed", + "mwidth":14, + "mheight":4, + "oam":true + }, + { + "segfile":"sprites_delete_confirmation", + "mwidth":12, + "mheight":4, + "oam":true + }, + { + "segfile":"sprites_spaceA", + "mwidth":4 + }, + { + "segfile":"sprites_torchic", + "mwidth":2, + "mheight":2, + "width":6 + }, + { + "segfile":"sprites_spaceB", + "mwidth":4, + "mheight":2 + }, + { + "segfile":"sprites_boxes", + "mwidth":6, + "mheight":6, + "oam":true + }, + { + "segfile":"sprites_medal_top", + "mwidth":6, + "mheight":2, + "oam":true + }, + { + "segfile":"sprites_medal_mid", + "mwidth":1, + "mheight":1 + }, + { + "segfile":"sprites_medal_gem", + "mwidth":2, + "mheight":2 + }, + { + "segfile":"sprites_spaceC", + "mwidth":3 + }, + { + "segfile":"sprites_azuril", + "mwidth":3, + "mheight":3, + "width":15, + "oam":true + }, + { + "segfile":"sprites_spaceD", + "mwidth":5 + }, + { + "segfile":"sprites_not_seen_pic", + "mwidth":2, + "mheight":2, + "width":6 + }, + { + "segfile":"sprites_spaceE", + "mwidth":4 + }, + { + "segfile":"sprites_link_gbasp", + "mwidth":6, + "mheight":3, + "oam":true + }, + { + "segfile":"sprites_link_wire", + "mwidth":2, + "mheight":1 + }, + { + "segfile":"sprites_link_cartridge", + "mwidth":2, + "mheight":3, + "oam":true + }, + { + "segfile":"sprites_link_gba", + "mwidth":4, + "mheight":5, + "oam":true + }, + { + "segfile":"sprites_link_activity", + "mwidth":1, + "mheight":2, + "width":3 + }, + { + "segfile":"sprites_link_disconnected", + "mwidth":2, + "mheight":2 + }, + { + "segfile":"sprites_press_start_trans", + "mwidth":3, + "mheight":1 + }, + { + "segfile":"sprites_dex_entry_continue", + "mwidth":1, + "mheight":1 + } + ], + "align":16 + } + ] +} diff --git a/graphics/pokedex/sprites.png b/graphics/pokedex/sprites.png deleted file mode 100644 index 44d0691..0000000 Binary files a/graphics/pokedex/sprites.png and /dev/null differ diff --git a/graphics/pokedex/sprites_azuril.png b/graphics/pokedex/sprites_azuril.png new file mode 100644 index 0000000..9ce32fa Binary files /dev/null and b/graphics/pokedex/sprites_azuril.png differ diff --git a/graphics/pokedex/sprites_boxes.png b/graphics/pokedex/sprites_boxes.png new file mode 100644 index 0000000..e7976e6 Binary files /dev/null and b/graphics/pokedex/sprites_boxes.png differ diff --git a/graphics/pokedex/sprites_delete_confirmation.png b/graphics/pokedex/sprites_delete_confirmation.png new file mode 100644 index 0000000..5749fe2 Binary files /dev/null and b/graphics/pokedex/sprites_delete_confirmation.png differ diff --git a/graphics/pokedex/sprites_dex_entry_continue.png b/graphics/pokedex/sprites_dex_entry_continue.png new file mode 100644 index 0000000..d720238 Binary files /dev/null and b/graphics/pokedex/sprites_dex_entry_continue.png differ diff --git a/graphics/pokedex/sprites_hand.png b/graphics/pokedex/sprites_hand.png new file mode 100644 index 0000000..187d5b3 Binary files /dev/null and b/graphics/pokedex/sprites_hand.png differ diff --git a/graphics/pokedex/sprites_link_activity.png b/graphics/pokedex/sprites_link_activity.png new file mode 100644 index 0000000..b5a3f64 Binary files /dev/null and b/graphics/pokedex/sprites_link_activity.png differ diff --git a/graphics/pokedex/sprites_link_cartridge.png b/graphics/pokedex/sprites_link_cartridge.png new file mode 100644 index 0000000..270601c Binary files /dev/null and b/graphics/pokedex/sprites_link_cartridge.png differ diff --git a/graphics/pokedex/sprites_link_disconnected.png b/graphics/pokedex/sprites_link_disconnected.png new file mode 100644 index 0000000..9daeff4 Binary files /dev/null and b/graphics/pokedex/sprites_link_disconnected.png differ diff --git a/graphics/pokedex/sprites_link_gba.png b/graphics/pokedex/sprites_link_gba.png new file mode 100644 index 0000000..10b63c3 Binary files /dev/null and b/graphics/pokedex/sprites_link_gba.png differ diff --git a/graphics/pokedex/sprites_link_gbasp.png b/graphics/pokedex/sprites_link_gbasp.png new file mode 100644 index 0000000..d9e8ebc Binary files /dev/null and b/graphics/pokedex/sprites_link_gbasp.png differ diff --git a/graphics/pokedex/sprites_link_wire.png b/graphics/pokedex/sprites_link_wire.png new file mode 100644 index 0000000..eba8eae Binary files /dev/null and b/graphics/pokedex/sprites_link_wire.png differ diff --git a/graphics/pokedex/sprites_medal_gem.png b/graphics/pokedex/sprites_medal_gem.png new file mode 100644 index 0000000..13fe032 Binary files /dev/null and b/graphics/pokedex/sprites_medal_gem.png differ diff --git a/graphics/pokedex/sprites_medal_mid.png b/graphics/pokedex/sprites_medal_mid.png new file mode 100644 index 0000000..756b15f Binary files /dev/null and b/graphics/pokedex/sprites_medal_mid.png differ diff --git a/graphics/pokedex/sprites_medal_top.png b/graphics/pokedex/sprites_medal_top.png new file mode 100644 index 0000000..ff596c0 Binary files /dev/null and b/graphics/pokedex/sprites_medal_top.png differ diff --git a/graphics/pokedex/sprites_not_seen_pic.png b/graphics/pokedex/sprites_not_seen_pic.png new file mode 100644 index 0000000..769b716 Binary files /dev/null and b/graphics/pokedex/sprites_not_seen_pic.png differ diff --git a/graphics/pokedex/sprites_press_start_trans.png b/graphics/pokedex/sprites_press_start_trans.png new file mode 100644 index 0000000..06c5deb Binary files /dev/null and b/graphics/pokedex/sprites_press_start_trans.png differ diff --git a/graphics/pokedex/sprites_select_full.png b/graphics/pokedex/sprites_select_full.png new file mode 100644 index 0000000..b03c021 Binary files /dev/null and b/graphics/pokedex/sprites_select_full.png differ diff --git a/graphics/pokedex/sprites_select_left.png b/graphics/pokedex/sprites_select_left.png new file mode 100644 index 0000000..a8614b6 Binary files /dev/null and b/graphics/pokedex/sprites_select_left.png differ diff --git a/graphics/pokedex/sprites_select_mid.png b/graphics/pokedex/sprites_select_mid.png new file mode 100644 index 0000000..3ec3250 Binary files /dev/null and b/graphics/pokedex/sprites_select_mid.png differ diff --git a/graphics/pokedex/sprites_select_right.png b/graphics/pokedex/sprites_select_right.png new file mode 100644 index 0000000..1316790 Binary files /dev/null and b/graphics/pokedex/sprites_select_right.png differ diff --git a/graphics/pokedex/sprites_spaceA.png b/graphics/pokedex/sprites_spaceA.png new file mode 100644 index 0000000..e1d1832 Binary files /dev/null and b/graphics/pokedex/sprites_spaceA.png differ diff --git a/graphics/pokedex/sprites_spaceB.png b/graphics/pokedex/sprites_spaceB.png new file mode 100644 index 0000000..bbf1ccd Binary files /dev/null and b/graphics/pokedex/sprites_spaceB.png differ diff --git a/graphics/pokedex/sprites_spaceC.png b/graphics/pokedex/sprites_spaceC.png new file mode 100644 index 0000000..0b181bc Binary files /dev/null and b/graphics/pokedex/sprites_spaceC.png differ diff --git a/graphics/pokedex/sprites_spaceD.png b/graphics/pokedex/sprites_spaceD.png new file mode 100644 index 0000000..e94356f Binary files /dev/null and b/graphics/pokedex/sprites_spaceD.png differ diff --git a/graphics/pokedex/sprites_spaceE.png b/graphics/pokedex/sprites_spaceE.png new file mode 100644 index 0000000..bbf1ccd Binary files /dev/null and b/graphics/pokedex/sprites_spaceE.png differ diff --git a/graphics/pokedex/sprites_torchic.png b/graphics/pokedex/sprites_torchic.png new file mode 100644 index 0000000..5cf8fb2 Binary files /dev/null and b/graphics/pokedex/sprites_torchic.png differ diff --git a/graphics/pokedex/sprites_transmission_completed.png b/graphics/pokedex/sprites_transmission_completed.png new file mode 100644 index 0000000..624e8b4 Binary files /dev/null and b/graphics/pokedex/sprites_transmission_completed.png differ diff --git a/graphics/pokedex/sprites_transmission_error.png b/graphics/pokedex/sprites_transmission_error.png new file mode 100644 index 0000000..88eff94 Binary files /dev/null and b/graphics/pokedex/sprites_transmission_error.png differ diff --git a/graphics/pokedex/sprites_transmission_start.png b/graphics/pokedex/sprites_transmission_start.png new file mode 100644 index 0000000..b4e874f Binary files /dev/null and b/graphics/pokedex/sprites_transmission_start.png differ diff --git a/graphics/pokedex/sprites_transmitting.png b/graphics/pokedex/sprites_transmitting.png new file mode 100644 index 0000000..221b9be Binary files /dev/null and b/graphics/pokedex/sprites_transmitting.png differ diff --git a/graphics/stage/gfx.json b/graphics/stage/gfx.json new file mode 100644 index 0000000..9e8a315 --- /dev/null +++ b/graphics/stage/gfx.json @@ -0,0 +1,74 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "gunk_084ED6CC", + "mwidth":4, + "mheight":4, + "width":4 + }, + { + "gfx_filename": "gunk_084FF90C", + "mheight":4, + "mwidth":4, + "width": 12 + }, + { + "gfx_filename": "gunk_0851DB8C", + "segments":[ + { + "segfile": "gunk_0851DB8C_a", + "mheight":9, + "mwidth":30, + "oam":true + }, + { + "segfile": "gunk_0851DB8C_b", + "width":5 + }, + { + "segfile": "gunk_0851DB8C_c", + "width":5 + } + ] + }, + { + "gfx_filename": "gunk_0851514C", + "segments":[ + { + "segfile": "gunk_0851514C_a", + "mheight":9, + "mwidth":30, + "oam":true + }, + { + "segfile": "gunk_0851514C_b", + "width":4 + } + ] + }, + { + "gfx_filename": "gunk_0851976C", + "segments":[ + { + "segfile": "gunk_0851976C_a", + "mheight":9, + "mwidth":30, + "oam":true + }, + { + "segfile": "gunk_0851976C_b", + "width":4 + } + ] + } + ] +} \ No newline at end of file diff --git a/graphics/stage/gunk_084ED6CC.png b/graphics/stage/gunk_084ED6CC.png new file mode 100644 index 0000000..9eaa26f Binary files /dev/null and b/graphics/stage/gunk_084ED6CC.png differ diff --git a/graphics/stage/gunk_084FF90C.png b/graphics/stage/gunk_084FF90C.png new file mode 100644 index 0000000..e998ce2 Binary files /dev/null and b/graphics/stage/gunk_084FF90C.png differ diff --git a/graphics/stage/gunk_0851514C_a.png b/graphics/stage/gunk_0851514C_a.png new file mode 100644 index 0000000..144b751 Binary files /dev/null and b/graphics/stage/gunk_0851514C_a.png differ diff --git a/graphics/stage/gunk_0851514C_b.png b/graphics/stage/gunk_0851514C_b.png new file mode 100644 index 0000000..af0b898 Binary files /dev/null and b/graphics/stage/gunk_0851514C_b.png differ diff --git a/graphics/stage/gunk_0851976C_a.png b/graphics/stage/gunk_0851976C_a.png new file mode 100644 index 0000000..5e22af0 Binary files /dev/null and b/graphics/stage/gunk_0851976C_a.png differ diff --git a/graphics/stage/gunk_0851976C_b.png b/graphics/stage/gunk_0851976C_b.png new file mode 100644 index 0000000..a99ff1f Binary files /dev/null and b/graphics/stage/gunk_0851976C_b.png differ diff --git a/graphics/stage/gunk_0851DB8C_a.png b/graphics/stage/gunk_0851DB8C_a.png new file mode 100644 index 0000000..a107e08 Binary files /dev/null and b/graphics/stage/gunk_0851DB8C_a.png differ diff --git a/graphics/stage/gunk_0851DB8C_b.png b/graphics/stage/gunk_0851DB8C_b.png new file mode 100644 index 0000000..7e6fc52 Binary files /dev/null and b/graphics/stage/gunk_0851DB8C_b.png differ diff --git a/graphics/stage/gunk_0851DB8C_c.png b/graphics/stage/gunk_0851DB8C_c.png new file mode 100644 index 0000000..2b450aa Binary files /dev/null and b/graphics/stage/gunk_0851DB8C_c.png differ diff --git a/graphics/stage/main/ball_save_banner.png b/graphics/stage/main/ball_save_banner.png new file mode 100644 index 0000000..07f8eaa Binary files /dev/null and b/graphics/stage/main/ball_save_banner.png differ diff --git a/graphics/stage/main/ball_save_latias.png b/graphics/stage/main/ball_save_latias.png new file mode 100644 index 0000000..f1593b1 Binary files /dev/null and b/graphics/stage/main/ball_save_latias.png differ diff --git a/graphics/stage/main/ball_save_latias_arm.png b/graphics/stage/main/ball_save_latias_arm.png new file mode 100644 index 0000000..7d53dea Binary files /dev/null and b/graphics/stage/main/ball_save_latias_arm.png differ diff --git a/graphics/stage/main/end_of_ball_banner.png b/graphics/stage/main/end_of_ball_banner.png new file mode 100644 index 0000000..5731f3d Binary files /dev/null and b/graphics/stage/main/end_of_ball_banner.png differ diff --git a/graphics/stage/main/end_of_ball_left.png b/graphics/stage/main/end_of_ball_left.png new file mode 100644 index 0000000..d1dc57a Binary files /dev/null and b/graphics/stage/main/end_of_ball_left.png differ diff --git a/graphics/stage/main/end_of_ball_right.png b/graphics/stage/main/end_of_ball_right.png new file mode 100644 index 0000000..5dbeb87 Binary files /dev/null and b/graphics/stage/main/end_of_ball_right.png differ diff --git a/graphics/stage/main/end_of_ball_space.png b/graphics/stage/main/end_of_ball_space.png new file mode 100644 index 0000000..b98af08 Binary files /dev/null and b/graphics/stage/main/end_of_ball_space.png differ diff --git a/graphics/stage/main/end_of_ball_top_corner.png b/graphics/stage/main/end_of_ball_top_corner.png new file mode 100644 index 0000000..07e49d3 Binary files /dev/null and b/graphics/stage/main/end_of_ball_top_corner.png differ diff --git a/graphics/stage/main/evo_banner.png b/graphics/stage/main/evo_banner.png new file mode 100644 index 0000000..4b10461 Binary files /dev/null and b/graphics/stage/main/evo_banner.png differ diff --git a/graphics/stage/main/game_over_text.png b/graphics/stage/main/game_over_text.png new file mode 100644 index 0000000..6247711 Binary files /dev/null and b/graphics/stage/main/game_over_text.png differ diff --git a/graphics/stage/main/gunk_084F61EC.png b/graphics/stage/main/gunk_084F61EC.png new file mode 100644 index 0000000..56ad0ce Binary files /dev/null and b/graphics/stage/main/gunk_084F61EC.png differ diff --git a/graphics/stage/main/jirachi_banner.png b/graphics/stage/main/jirachi_banner.png new file mode 100644 index 0000000..452dac2 Binary files /dev/null and b/graphics/stage/main/jirachi_banner.png differ diff --git a/graphics/stage/main/latios.png b/graphics/stage/main/latios.png new file mode 100644 index 0000000..78c7a48 Binary files /dev/null and b/graphics/stage/main/latios.png differ diff --git a/graphics/stage/main/latios_arm.png b/graphics/stage/main/latios_arm.png new file mode 100644 index 0000000..56c0ca2 Binary files /dev/null and b/graphics/stage/main/latios_arm.png differ diff --git a/graphics/stage/main/main_stage_gfx.json b/graphics/stage/main/main_stage_gfx.json new file mode 100644 index 0000000..1c9449a --- /dev/null +++ b/graphics/stage/main/main_stage_gfx.json @@ -0,0 +1,137 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "gunk_084F61EC", + "mwidth":8, + "align":1 + }, + { + "gfx_filename": "pika_spinner", + "mwidth":3, + "mheight":3, + "width":12, + "oam":true + }, + { + "gfx_filename": "jirachi_banner", + "mwidth":30, + "mheight":9, + "oam":true + }, + { + "gfx_filename": "travel", + "segments":[ + { + "segfile": "travel_banner", + "mwidth":30, + "mheight":8, + "oam":true + }, + { + "segfile": "travel_bottom_border", + "width":5 + }, + { + "segfile": "travel_pole", + "width":4 + }, + { + "segfile": "travel_arrows", + "mwidth":3, + "mheight":4, + "oam":true + }, + { + "segfile": "travel_pole_base", + "width":2 + } + ] + }, + { + "gfx_filename": "evo_banner", + "mheight":9, + "mwidth":30, + "oam":true + }, + { + "gfx_filename": "game_over_text", + "mheight": 2, + "mwidth": 2, + "width":16 + }, + { + "gfx_filename": "pause_menu_text" + }, + { + "gfx_filename": "latios", + "mheight":8, + "mwidth":8 + }, + { + "gfx_filename": "latios_arm", + "width":2 + }, + { + "gfx_filename": "ball_save", + "segments": [ + { + "segfile":"ball_save_banner", + "mwidth":16, + "mheight":8, + "oam":true + }, + { + "segfile":"ball_save_latias", + "width":8, + "height":8 + }, + { + "segfile":"ball_save_latias_arm", + "width":2, + "height":3 + } + ] + }, + { + "gfx_filename": "end_of_ball", + "segments": [ + { + "segfile":"end_of_ball_left", + "mwidth":8, + "mheight":8 + }, + { + "segfile":"end_of_ball_top_corner", + "mwidth":2, + "mheight":2 + }, + { + "segfile":"end_of_ball_banner", + "mwidth":22, + "mheight":2, + "oam":true + }, + { + "segfile":"end_of_ball_right", + "mwidth":8, + "mheight":8 + }, + { + "segfile":"end_of_ball_space", + "mwidth":24, + "mheight":2, + "oam":true + } + ] + } + ] +} diff --git a/graphics/stage/main/pause_menu_text.png b/graphics/stage/main/pause_menu_text.png new file mode 100644 index 0000000..c131c36 Binary files /dev/null and b/graphics/stage/main/pause_menu_text.png differ diff --git a/graphics/stage/main/pika_spinner.png b/graphics/stage/main/pika_spinner.png new file mode 100644 index 0000000..bd3df67 Binary files /dev/null and b/graphics/stage/main/pika_spinner.png differ diff --git a/graphics/stage/main/travel_arrows.png b/graphics/stage/main/travel_arrows.png new file mode 100644 index 0000000..1532078 Binary files /dev/null and b/graphics/stage/main/travel_arrows.png differ diff --git a/graphics/stage/main/travel_banner.png b/graphics/stage/main/travel_banner.png new file mode 100644 index 0000000..22a84bd Binary files /dev/null and b/graphics/stage/main/travel_banner.png differ diff --git a/graphics/stage/main/travel_bottom_border.png b/graphics/stage/main/travel_bottom_border.png new file mode 100644 index 0000000..093b278 Binary files /dev/null and b/graphics/stage/main/travel_bottom_border.png differ diff --git a/graphics/stage/main/travel_pole.png b/graphics/stage/main/travel_pole.png new file mode 100644 index 0000000..fa6fa98 Binary files /dev/null and b/graphics/stage/main/travel_pole.png differ diff --git a/graphics/stage/main/travel_pole_base.png b/graphics/stage/main/travel_pole_base.png new file mode 100644 index 0000000..993ac63 Binary files /dev/null and b/graphics/stage/main/travel_pole_base.png differ diff --git a/graphics/stage/misc/gUnk_084FA20C.png b/graphics/stage/misc/gUnk_084FA20C.png new file mode 100644 index 0000000..3b3ff4a Binary files /dev/null and b/graphics/stage/misc/gUnk_084FA20C.png differ diff --git a/graphics/stage/misc/gUnk_0850558C.png b/graphics/stage/misc/gUnk_0850558C.png new file mode 100644 index 0000000..0691bca Binary files /dev/null and b/graphics/stage/misc/gUnk_0850558C.png differ diff --git a/graphics/stage/misc/gunk_084FA20C.png b/graphics/stage/misc/gunk_084FA20C.png new file mode 100644 index 0000000..3b3ff4a Binary files /dev/null and b/graphics/stage/misc/gunk_084FA20C.png differ diff --git a/graphics/stage/misc/gunk_0850558C.png b/graphics/stage/misc/gunk_0850558C.png new file mode 100644 index 0000000..0691bca Binary files /dev/null and b/graphics/stage/misc/gunk_0850558C.png differ diff --git a/graphics/stage/misc/misc_gfx.json b/graphics/stage/misc/misc_gfx.json new file mode 100644 index 0000000..3cf01c2 --- /dev/null +++ b/graphics/stage/misc/misc_gfx.json @@ -0,0 +1,21 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "gunk_084FA20C", + "mwidth":2, + "mheight":2 + }, + { + "gfx_filename": "gunk_0850558C", + } + ] +} \ No newline at end of file diff --git a/graphics/stage/ruby/hatch_cave.png b/graphics/stage/ruby/hatch_cave.png new file mode 100644 index 0000000..1d048a8 Binary files /dev/null and b/graphics/stage/ruby/hatch_cave.png differ diff --git a/graphics/stage/ruby/ramp_prize.png b/graphics/stage/ruby/ramp_prize.png new file mode 100644 index 0000000..d3f9185 Binary files /dev/null and b/graphics/stage/ruby/ramp_prize.png differ diff --git a/graphics/stage/ruby/ruby_gfx.json b/graphics/stage/ruby/ruby_gfx.json new file mode 100644 index 0000000..52677d4 --- /dev/null +++ b/graphics/stage/ruby/ruby_gfx.json @@ -0,0 +1,41 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "shop_door", + "mwidth":3, + "mheight":4, + "width":3, + "oam":true + }, + { + "gfx_filename": "sharpedo", + "mwidth":19, + "mheight":3 + }, + { + "gfx_filename": "shop", + "mwidth":8 + }, + { + "gfx_filename": "hatch_cave", + "mwidth":6, + "mheight":6, + "oam":true + }, + { + "gfx_filename": "ramp_prize", + "mheight":2, + "mwidth":2, + "width":8 + } + ] +} \ No newline at end of file diff --git a/graphics/stage/ruby/sharpedo.png b/graphics/stage/ruby/sharpedo.png new file mode 100644 index 0000000..f626f07 Binary files /dev/null and b/graphics/stage/ruby/sharpedo.png differ diff --git a/graphics/stage/ruby/shop.png b/graphics/stage/ruby/shop.png new file mode 100644 index 0000000..bc5f723 Binary files /dev/null and b/graphics/stage/ruby/shop.png differ diff --git a/graphics/stage/ruby/shop_door.png b/graphics/stage/ruby/shop_door.png new file mode 100644 index 0000000..4679342 Binary files /dev/null and b/graphics/stage/ruby/shop_door.png differ diff --git a/graphics/stage/sapphire/sapphire_gfx.json b/graphics/stage/sapphire/sapphire_gfx.json new file mode 100644 index 0000000..1e432ea --- /dev/null +++ b/graphics/stage/sapphire/sapphire_gfx.json @@ -0,0 +1,36 @@ +{ + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": 0, + "mheight": 0, + "oam": false, + "width": 16, + "palette": "" + }, + "files": [ + { + "gfx_filename": "seedot", + "mwidth":3, + "mheight":4, + "width":12, + "oam":true + }, + { + "gfx_filename": "shop_shock_wall", + "mwidth":2, + "mheight":2, + "width":10 + }, + { + "gfx_filename": "zigzagoon", + "mheight":4, + "mwidth":7, + "oam":true + }, + { + "gfx_filename": "zigzagoon_fx", + "mwidth":4 + } + ] +} \ No newline at end of file diff --git a/graphics/stage/sapphire/seedot.png b/graphics/stage/sapphire/seedot.png new file mode 100644 index 0000000..a98bb1b Binary files /dev/null and b/graphics/stage/sapphire/seedot.png differ diff --git a/graphics/stage/sapphire/shop_shock_wall.png b/graphics/stage/sapphire/shop_shock_wall.png new file mode 100644 index 0000000..8ba82a7 Binary files /dev/null and b/graphics/stage/sapphire/shop_shock_wall.png differ diff --git a/graphics/stage/sapphire/zigzagoon.png b/graphics/stage/sapphire/zigzagoon.png new file mode 100644 index 0000000..28e64d9 Binary files /dev/null and b/graphics/stage/sapphire/zigzagoon.png differ diff --git a/graphics/stage/sapphire/zigzagoon_fx.png b/graphics/stage/sapphire/zigzagoon_fx.png new file mode 100644 index 0000000..4016095 Binary files /dev/null and b/graphics/stage/sapphire/zigzagoon_fx.png differ diff --git a/graphics_rules.mk b/graphics_rules.mk index f690f0b..35b4012 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -1,5 +1,11 @@ -MON_PORTRAITS_DIR := graphics/mon_portraits -MON_HATCH_SPRITES_DIR := graphics/mon_hatch_sprites +GFX_JSONS := $(shell find graphics -type f -name '*.json') +GFX_RULES_SCRIPT := tools/scripts/generate_graphics_rules.sh +GFX_RULES_GEN := graphics_rules_generated.mk + +$(GFX_RULES_GEN): $(GFX_JSONS) $(GFX_RULES_SCRIPT) + bash $(GFX_RULES_SCRIPT) $(GFX_JSONS) > $@ + +-include $(GFX_RULES_GEN) graphics/field_select/sprites.4bpp: graphics/field_select/sprites.png $(GFX) $< $@ -num_tiles 513 @@ -7,11 +13,5 @@ graphics/field_select/sprites.4bpp: graphics/field_select/sprites.png graphics/options/sprites.4bpp: graphics/options/sprites.png $(GFX) $< $@ -num_tiles 257 -$(MON_PORTRAITS_DIR)/%.4bpp: $(MON_PORTRAITS_DIR)/%.png - $(GFX) $< $@ -mwidth 2 -mheight 2 - -$(MON_HATCH_SPRITES_DIR)/%.4bpp: $(MON_HATCH_SPRITES_DIR)/%.png - $(GFX) $< $@ -pinball-hatch-sprite - graphics/pokedex/text_glyphs.4bpp: graphics/pokedex/text_glyphs.png $(GFX) $< $@ -num_tiles 513 diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 8a52d52..dc900ee 100755 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,7 +6,7 @@ CFLAGS += $(shell pkg-config --cflags libpng) LIBS = -lpng -lz LDFLAGS += $(shell pkg-config --libs-only-L libpng) -SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c oam_slices/oam_slicer.c ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 51cf626..127bbe9 100755 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -8,6 +8,7 @@ #include "global.h" #include "gfx.h" #include "util.h" +#include "oam_slices/oam_slicer.h" #define GET_GBA_PAL_RED(x) (((x) >> 0) & 0x1F) #define GET_GBA_PAL_GREEN(x) (((x) >> 5) & 0x1F) @@ -36,30 +37,21 @@ static void AdvanceMetatilePosition(int *subTileX, int *subTileY, int *metatileX } } -static void AdvancePinballHatchSpriteMetatilePosition(int *subTileX, int *subTileY, int *metatileX, int *metatileY, int metatilesWide) -{ - int subTileCoords[9][2] = { - {1, 0}, - {0, 1}, - {2, 1}, - {1, 1}, - {2, 0}, - {0, 2}, - {1, 2}, - {2, 2}, - {0, 0}, - }; +static void AdvanceOamMetatilePosition(int *subTileX, int *subTileY, int *metatileX, int *metatileY, int metatilesWide, TileCoord *subTileCoords, int tileCount, int i) { - int tileIndex = *subTileX + (*subTileY) * 3; - *subTileX = subTileCoords[tileIndex][0]; - *subTileY = subTileCoords[tileIndex][1]; - if (tileIndex == 8) { + //First tile handled at start of loop; just track additional tiles + int tileIndex = (i+1) % tileCount; + *subTileX = subTileCoords[tileIndex].x; + *subTileY = subTileCoords[tileIndex].y; + + if (tileIndex == 0) { (*metatileX)++; if (*metatileX == metatilesWide) { *metatileX = 0; (*metatileY)++; } } + } static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) @@ -88,13 +80,21 @@ static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int nu } } -static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool pinballHatchSprite, bool invertColors) +static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors, bool oamMap) { int subTileX = 0; int subTileY = 0; int metatileX = 0; int metatileY = 0; int pitch = (metatilesWide * metatileWidth) * 4; + + TileCoord tileMappingCoord[MAX_OAM_TILE_SIDE_LENGTH_SQUARED]; + int tileCount = 0; + + if (oamMap) + { + tileCount = getOamTileIndex(metatileWidth, metatileHeight, tileMappingCoord); + } for (int i = 0; i < numTiles; i++) { for (int j = 0; j < 8; j++) { @@ -115,8 +115,8 @@ static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int nu } } - if (pinballHatchSprite) { - AdvancePinballHatchSpriteMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide); + if (oamMap) { + AdvanceOamMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, tileMappingCoord, tileCount, i); } else { AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); } @@ -211,7 +211,7 @@ void Convert4BppImageWithPaletteMap(struct Image *image) image->bitDepth = 8; } -static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool pinballHatchSprite, bool invertColors) +static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors, bool oamMap) { int subTileX = 0; int subTileY = 0; @@ -219,6 +219,14 @@ static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numT int metatileY = 0; int pitch = (metatilesWide * metatileWidth) * 4; + TileCoord tileMappingCoord[MAX_OAM_TILE_SIDE_LENGTH_SQUARED]; + int tileCount = 0; + + if (oamMap) + { + tileCount = getOamTileIndex(metatileWidth, metatileHeight, tileMappingCoord); + } + for (int i = 0; i < numTiles; i++) { for (int j = 0; j < 8; j++) { int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; @@ -238,8 +246,8 @@ static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numT } } - if (pinballHatchSprite) { - AdvancePinballHatchSpriteMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide); + if (oamMap) { + AdvanceOamMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, tileMappingCoord, tileCount, i); } else { AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); } @@ -426,7 +434,7 @@ static unsigned char *DecodeTilemap(unsigned char *tiles, struct Tilemap *tilema return decoded; } -void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors) +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors, bool oamMap) { int tileSize = image->bitDepth * 8; @@ -467,7 +475,7 @@ void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHe ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, pinballHatchSprite, invertColors); + ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors, oamMap); break; case 8: ConvertFromTiles8Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); @@ -477,7 +485,7 @@ void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHe free(buffer); } -void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors) +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors, bool oamMap) { int tileSize = image->bitDepth * 8; @@ -517,7 +525,7 @@ void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, in ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; case 4: - ConvertToTiles4Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, pinballHatchSprite, invertColors); + ConvertToTiles4Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors, oamMap); break; case 8: ConvertToTiles8Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index aa97cae..358532d 100755 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -52,8 +52,16 @@ enum NumTilesMode { NUM_TILES_ERROR, }; -void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors); -void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, bool pinballHatchSprite, struct Image *image, bool invertColors); +typedef struct { + int x; + int y; +} TileCoord; + +#define MAX_OAM_TILE_SIDE_LENGTH 32 +#define MAX_OAM_TILE_SIDE_LENGTH_SQUARED MAX_OAM_TILE_SIDE_LENGTH * MAX_OAM_TILE_SIDE_LENGTH + +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors, bool optomized_2n_map); +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors, bool optomized_2n_map); void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); void FreeImage(struct Image *image); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 5dbb13e..170f9f8 100755 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -68,7 +68,7 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * image.tilemap.size = fileSize; } - ReadTileImage(inputPath, options->width, options->metatileWidth, options->metatileHeight, options->pinballHatchSprite, &image, !image.hasPalette); + ReadTileImage(inputPath, options->width, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette, options->oamSprite); if (image.paletteMap != NULL && image.bitDepth == 4) { Convert4BppImageWithPaletteMap(&image); @@ -97,7 +97,7 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); if (options->isTiled) - WriteTileImage(outputPath, options->numTilesMode, options->numTiles, options->metatileWidth, options->metatileHeight, options->pinballHatchSprite, &image, !image.hasPalette); + WriteTileImage(outputPath, options->numTilesMode, options->numTiles, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette, options->oamSprite); else WritePlainImage(outputPath, options->dataWidth, &image, !image.hasPalette); @@ -115,7 +115,6 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a options.width = 1; options.metatileWidth = 1; options.metatileHeight = 1; - options.pinballHatchSprite = 0; options.tilemapFilePath = NULL; options.isAffineMap = false; options.isTiled = true; @@ -186,8 +185,8 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); } - else if (strcmp(option, "-pinball-hatch-sprite") == 0) { - options.pinballHatchSprite = 1; + else if (strcmp(option, "-oam") == 0) { + options.oamSprite = 1; } else if (strcmp(option, "-tilemap") == 0) { @@ -222,21 +221,10 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a } } - if (options.pinballHatchSprite) { - if (options.metatileWidth != 1 || options.metatileHeight != 1) { - FATAL_ERROR("Cannot specify metatile dimensions for pinball hatch sprites.\n"); + if (options.oamSprite){ + if (options.metatileHeight == 1 && options.metatileWidth == 1){ + FATAL_ERROR("Must specify metatile dimensions when using oam chunk mapping.\n"); } - - if (options.width == 1) { - options.width = 3; - } - - if (options.width % 3 != 0) { - FATAL_ERROR("Pinball hatch sprite width must be a multiple of 3."); - } - - options.metatileWidth = 3; - options.metatileHeight = 3; } if (options.metatileWidth > options.width) @@ -254,7 +242,6 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a options.bitDepth = outputFileExtension[0] - '0'; options.metatileWidth = 1; options.metatileHeight = 1; - options.pinballHatchSprite = 0; options.tilemapFilePath = NULL; options.isAffineMap = false; options.isTiled = true; @@ -309,8 +296,8 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); } - else if (strcmp(option, "-pinball-hatch-sprite") == 0) { - options.pinballHatchSprite = 1; + else if (strcmp(option, "-oam") == 0) { + options.oamSprite = 1; } else if (strcmp(option, "-plain") == 0) { @@ -334,13 +321,10 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a } } - if (options.pinballHatchSprite) { - if (options.metatileWidth != 1 || options.metatileHeight != 1) { - FATAL_ERROR("Cannot specify metatile dimensions for pinball hatch sprites.\n"); + if (options.oamSprite){ + if (options.metatileHeight == 1 && options.metatileWidth == 1){ + FATAL_ERROR("Must specify metatile dimensions when using oam mapping.\n"); } - - options.metatileWidth = 3; - options.metatileHeight = 3; } ConvertPngToGba(inputPath, outputPath, &options); diff --git a/tools/gbagfx/oam_helper_scripts/convert.py b/tools/gbagfx/oam_helper_scripts/convert.py new file mode 100644 index 0000000..6fd1bf8 --- /dev/null +++ b/tools/gbagfx/oam_helper_scripts/convert.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +import argparse, json, shlex, subprocess, sys +from pathlib import Path +from fnmatch import fnmatch + +def posix(s: str) -> str: + return s.replace("\\", "/") + +def load_cfg(path: Path) -> dict: + with open(path, "r", encoding="utf-8") as f: + cfg = json.load(f) + if cfg.get("kind") != "gfx-config": + raise SystemExit(f"{path} is not a gfx-config (missing kind: 'gfx-config').") + cfg.setdefault("defaults", {}) + cfg.setdefault("rules", []) + cfg.setdefault("files", []) + return cfg + +# REPLACE your effective_opts() with this version +def effective_opts(cfg: dict, fbase: str, overlay: dict | None = None) -> dict: + """Layer defaults -> matching rules -> exact file entry -> optional overlay. + Special rule applies at file level and overlay level: + - if the object sets 'mwidth' but not 'width', drop any inherited 'width'. + """ + # 1) start with defaults + opts = dict(cfg.get("defaults", {})) + + # 2) apply matching rules in order + from fnmatch import fnmatch + for r in cfg.get("rules", []): + hit = ("glob" in r and fnmatch(fbase, r["glob"])) or ("prefix" in r and fbase.startswith(r["prefix"])) + if hit: + for k, v in r.items(): + if k not in ("glob", "prefix"): + opts[k] = v + + # 3) apply exact file entry (capture presence of keys) + file_entry = None + for e in cfg.get("files", []): + if e.get("gfx_filename") == fbase: + file_entry = e + for k, v in e.items(): + if k != "gfx_filename": + opts[k] = v + break + + # 4) file-level special case + if file_entry is not None and ("mwidth" in file_entry) and ("width" not in file_entry): + opts.pop("width", None) + + # 5) segment/overlay overrides (if any) + if overlay: + for k, v in overlay.items(): + opts[k] = v + # overlay-level special case + if ("mwidth" in overlay) and ("width" not in overlay): + opts.pop("width", None) + + return opts + +def build_cmd(tool: Path, fbase: str, direction: str, opts: dict): + f4 = fbase + ".4bpp" + fp = fbase + ".png" + if direction == "to-png": + src, dst = f4, fp + else: + src, dst = fp, f4 + + cmd = [str(tool), src, dst] + + mwidth = int(opts.get("mwidth", 0) or 0) + mheight = int(opts.get("mheight", 0) or 0) + oam = bool(opts.get("oam", False)) + width = int(opts.get("width", 0) or 0) + palette = str(opts.get("palette", "") or "").strip() + + if mwidth: cmd += ["-mwidth", str(mwidth)] + if mheight: cmd += ["-mheight", str(mheight)] + if oam: cmd += ["-oam"] + + if direction == "to-png": + if width: cmd += ["-width", str(width)] + if palette: cmd += ["-palette", palette] + + return cmd, src, dst + +def main(): + ap = argparse.ArgumentParser(description="Run gfx converter over files listed in a gfx JSON.") + ap.add_argument("tool", help="Path to the conversion tool (same as $(GFX) in your Makefile)") + ap.add_argument("config", help="Path to a gfx JSON (kind: gfx-config)") + ap.add_argument("--direction", choices=["to-png","to-4bpp"], default="to-png", + help="Conversion direction (default: to-png = .4bpp -> .png)") + ap.add_argument("--only", action="append", default=[], + help="Limit to specific base path(s) (repeatable). Example: graphics/ui/healthbar") + ap.add_argument("--dry-run", action="store_true", help="Print commands without executing") + ap.add_argument("--fail-fast", action="store_true", help="Stop on first error") + args = ap.parse_args() + + tool = Path(args.tool) + cfg_path = Path(args.config) + cfg = load_cfg(cfg_path) + io_base = cfg_path.parent + + + # build worklist (supports per-file segments) + work = [] # each item: (target_id, fbase_for_io, opts) + for e in cfg["files"]: + if "gfx_filename" not in e: + continue + f = posix(e["gfx_filename"]) + segs = e.get("segments") + if isinstance(segs, list) and segs: + for seg in segs: + if not isinstance(seg, dict): + continue + sid = seg.get("segfile") + if not sid: + continue + f_aug = f"{f}_{sid}" + overlay = {k: v for k, v in seg.items() if k != "segfile"} + opts = effective_opts(cfg, f, overlay=overlay) + f_aug = f"{io_base}/{f_aug}" + work.append((f_aug, f_aug, opts)) + else: + opts = effective_opts(cfg, f) + f = f"{io_base}/{f}" + work.append((f, f, opts)) + + # optional --only filter (now matches the augmented id like graphics/foo_a) + if args.only: + only = set(posix(s) for s in args.only) + work = [item for item in work if item[0] in only] + + if not work: + print("No files to process.", file=sys.stderr) + return 1 + + failures = 0 + for _, fbase_eff, opts in work: + cmd, src, dst = build_cmd(tool, fbase_eff, args.direction, opts) + + print("$", " ".join(shlex.quote(c) for c in cmd)) + if args.dry_run: + continue + + if not Path(src).exists(): + print(f"!! Missing source: {src}", file=sys.stderr) + failures += 1 + if args.fail-fast: break + continue + + try: + subprocess.run(cmd, check=True) + except subprocess.CalledProcessError as ex: + print(f"!! Command failed ({ex.returncode}): {' '.join(cmd)}", file=sys.stderr) + failures += 1 + if args.fail-fast: break + + return 0 if failures == 0 else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/gbagfx/oam_helper_scripts/init_gfx_json.py b/tools/gbagfx/oam_helper_scripts/init_gfx_json.py new file mode 100644 index 0000000..93518c7 --- /dev/null +++ b/tools/gbagfx/oam_helper_scripts/init_gfx_json.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +import argparse, json, sys +from pathlib import Path + +def to_posix(p: Path) -> str: + return p.as_posix() + +def parse_int_auto(s: str) -> int: + # accepts "32" or "0x20" + return int(s, 0) + +def main(): + ap = argparse.ArgumentParser( + description="Scan a directory for .4bpp files and create an initial gfx JSON (with tileCount)." + ) + ap.add_argument("root", nargs="?", default=".", help="Directory to scan (default: .)") + ap.add_argument("-o", "--output", help="Output JSON path (default: /gfx.json)") + ap.add_argument("--relative-to", choices=["cwd","root"], default="cwd", + help="Store paths relative to: cwd (default) or root dir") + # Defaults for gfx options (these don’t affect flags if 0/empty) + ap.add_argument("--defaults-mwidth", type=int, default=0) + ap.add_argument("--defaults-mheight", type=int, default=0) + ap.add_argument("--defaults-oam", action="store_true") + ap.add_argument("--defaults-width", type=int, default=0) + ap.add_argument("--defaults-palette", default="") + # Tile handling + ap.add_argument("--tile-size", default="0x20", + help="Tile size in bytes (default: 0x20 = 32)") + ap.add_argument("--strict-tiles", action="store_true", + help="Error if any .4bpp size is not a multiple of tile size") + ap.add_argument("-v", "--verbose", action="store_true") + args = ap.parse_args() + + root = Path(args.root).resolve() + if not root.exists() or not root.is_dir(): + raise SystemExit(f"[init] root is not a directory: {root}") + + out = Path(args.output) if args.output else root / "gfx.json" + tile_size = parse_int_auto(args.tile_size) + if tile_size <= 0: + raise SystemExit(f"[init] --tile-size must be > 0 (got {tile_size})") + + if args.verbose: + print(f"[init] scanning root: {root}") + print(f"[init] tile_size: {tile_size} bytes") + print(f"[init] will write JSON: {out}") + + files = [] + warnings = 0 + + # Collect base paths for *.4bpp (case-insensitive) + for p in sorted(root.rglob("*")): + if p.is_file() and p.suffix.lower() == ".4bpp": + base = p.with_suffix("") # remove .4bpp + # choose how to store path + if args.relative_to == "root": + f = to_posix(base.relative_to(root)) + else: + try: + f = to_posix(base.relative_to(Path.cwd())) + except ValueError: + f = to_posix(base) + + size = p.stat().st_size + remainder = size % tile_size + tile_count = size // tile_size + + if remainder != 0: + msg = (f"[init] WARNING: {p} size={size} not a multiple of tile_size={tile_size} " + f"(tileCount will be {tile_count}, remainder {remainder} bytes)") + print(msg, file=sys.stderr) + warnings += 1 + if args.strict_tiles: + raise SystemExit("[init] --strict-tiles: aborting due to misaligned file size.") + + palette_rel = None + pal_candidate = base.with_suffix(".gbapal") + if pal_candidate.exists(): + if args.relative_to == "root": + palette_rel = to_posix(pal_candidate.relative_to(root)) + else: + try: + palette_rel = to_posix(pal_candidate.relative_to(Path.cwd())) + except ValueError: + palette_rel = to_posix(pal_candidate) + + entry = { + "gfx_filename": f, + "tileCount": tile_count + } + if palette_rel: + entry["palette"] = palette_rel # per-file override if .gbapal is present + + files.append(entry) + + if args.verbose: + print(f"[init] found {len(files)} .4bpp file(s)") + if 0 < len(files) <= 10: + for e in files: + print(f" - {e['f']}.4bpp (tileCount={e['tileCount']})") + elif len(files) > 10: + for e in files[:5]: + print(f" - {e['f']}.4bpp (tileCount={e['tileCount']})") + print(" ...") + + cfg = { + "kind": "gfx-config", + "version": 1, + "defaults": { + "mwidth": args.defaults_mwidth, + "mheight": args.defaults_mheight, + "oam": bool(args.defaults_oam), + "width": args.defaults_width, + "palette": args.defaults_palette + }, + "files": files + } + + out.parent.mkdir(parents=True, exist_ok=True) + with open(out, "w", encoding="utf-8") as f: + json.dump(cfg, f, indent=2) + f.write("\n") + + print(f"[init] wrote {out} with {len(files)} entr{'y' if len(files)==1 else 'ies'}" + f"{' and warnings' if warnings else ''}") + +if __name__ == "__main__": + main() diff --git a/tools/gbagfx/oam_helper_scripts/prune.py b/tools/gbagfx/oam_helper_scripts/prune.py new file mode 100644 index 0000000..4e14bce --- /dev/null +++ b/tools/gbagfx/oam_helper_scripts/prune.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +import sys +import shutil +from pathlib import Path + +TILE_SIZE = 0x20 # 32 bytes per tile + +def parse_int_auto(s: str) -> int: + try: + return int(s, 0) # accepts "16" or "0x10" + except ValueError: + raise SystemExit(f"Invalid tilecount '{s}' (use decimal or 0xHEX)") + +def copy_prefix(src: Path, dst: Path, nbytes: int) -> None: + """Copy the first nbytes from src -> dst (overwrites dst).""" + bufsize = 1024 * 1024 + with src.open("rb") as fsrc, dst.open("wb") as fdst: + remaining = nbytes + while remaining > 0: + chunk = fsrc.read(min(bufsize, remaining)) + if not chunk: + break + fdst.write(chunk) + remaining -= len(chunk) + if remaining != 0: + raise SystemExit(f"error: source ended unexpectedly while copying {nbytes} bytes") + +def main(): + if len(sys.argv) != 3: + print("usage: prune ", file=sys.stderr) + print("example: prune graphics/foo.4bpp 8", file=sys.stderr) + sys.exit(2) + + file_path = Path(sys.argv[1]) + backup_path = Path(str(file_path) + "_orig") + tilecount = parse_int_auto(sys.argv[2]) + if tilecount < 0: + print("error: tilecount must be >= 0", file=sys.stderr) + sys.exit(1) + + # If backup doesn't exist, we need the current file to seed it. + if not backup_path.exists(): + if not file_path.exists() or not file_path.is_file(): + print(f"error: neither {file_path} nor backup {backup_path} exists to seed from.", file=sys.stderr) + sys.exit(1) + try: + shutil.copy2(file_path, backup_path) + print(f"backup created: {backup_path}") + except Exception as ex: + print(f"error: failed to create backup: {ex}", file=sys.stderr) + sys.exit(1) + else: + print(f"using existing backup as baseline: {backup_path}") + + # Always start from the backup (original) content + try: + orig_size = backup_path.stat().st_size + except Exception as ex: + print(f"error: cannot stat backup: {ex}", file=sys.stderr) + sys.exit(1) + + prune_bytes = TILE_SIZE * tilecount + if prune_bytes > orig_size: + print( + f"error: cannot prune {prune_bytes} bytes ({tilecount} tiles) " + f"from original size {orig_size} bytes.", + file=sys.stderr, + ) + sys.exit(1) + + new_size = orig_size - prune_bytes + + # Write pruned content back to the working file + try: + copy_prefix(backup_path, file_path, new_size) + except Exception as ex: + print(f"error: failed to write pruned file: {ex}", file=sys.stderr) + sys.exit(1) + + print( + f"pruned {prune_bytes} bytes ({tilecount} tile{'s' if tilecount != 1 else ''}) " + f"from {backup_path.name}; wrote {file_path.name} size {orig_size} -> {new_size} bytes" + ) + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/tools/gbagfx/oam_helper_scripts/readme.txt b/tools/gbagfx/oam_helper_scripts/readme.txt new file mode 100644 index 0000000..8221094 --- /dev/null +++ b/tools/gbagfx/oam_helper_scripts/readme.txt @@ -0,0 +1,26 @@ +'init_gfx_json.py' +* For reading a folder and building an initial json file for the .4bpp files in it. +* This prepopulates a tilecount, which can be useful for ballpark sizing the height/width +* Run this in the folder with the graphics to be loaded into the json file +* If a file with a .gbapal with the same name as the .4bpp file exists, it will automatically load that in as that file's palette. + + +'convert.py' +* For reading a json graphics config file, and calling the conversion process as a loop. +* Called with convert.py {path to gbagfx} {path to json file} --direction {to-png or to-4bpp} +* Conversion uses the json settings for both direction of conversion, needing the mheight/mwidth/oam to handle some of these entries + + +'prune.py' +* For 'trimming' a number of blank tiles off the end of a .4bpp file, to account for those stray extra 0x20 * x bits at the end. +* This saves an original copy of the .4bpp file, which it uses as the base when re-running this script on the same file. +* Called with prune.py {path to .4bpp file} {tiles to remove} + + +'split_gfx' +* For splitting .4bpp files that are easier parsed as a series of sub images. +* This creates new files with the name being the {filename}_{suffix}.4bpp +* Called with split_gfx.py {path to file} {suffix} {tiles to skip} {tiles to take} +* Sample from pulling the link_gbasp segment out of sprites.4bpp (tool and byte file in the same folder being run from): + split_gfx.py sprites.4bpp link_gbasp 768 18 + *this creates a sprites_link_gbasp.4bpp file. \ No newline at end of file diff --git a/tools/gbagfx/oam_helper_scripts/split_gfx.py b/tools/gbagfx/oam_helper_scripts/split_gfx.py new file mode 100644 index 0000000..12d2371 --- /dev/null +++ b/tools/gbagfx/oam_helper_scripts/split_gfx.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +from pathlib import Path +import argparse +import sys + +TILE_SIZE = 0x20 # 32 bytes per 4bpp tile + +def split_4bpp(infile: Path, suffix: str, skip_tiles: int, take_tiles: int) -> Path: + if skip_tiles < 0: + raise ValueError("skip must be >= 0") + if take_tiles <= 0: + raise ValueError("take must be > 0") + + if not infile.exists(): + raise FileNotFoundError(f"Input file not found: {infile}") + + # Build output path in the same directory as the input + out_name = f"{infile.stem}_{suffix}.4bpp" + outfile = infile.with_name(out_name) + + file_size = infile.stat().st_size + if file_size % TILE_SIZE != 0: + print(f"Warning: input size ({file_size} bytes) is not a multiple of {TILE_SIZE}.", file=sys.stderr) + + offset = skip_tiles * TILE_SIZE + length = take_tiles * TILE_SIZE + + if offset >= file_size: + raise ValueError( + f"Skip offset ({offset} bytes) is beyond end of file ({file_size} bytes). " + f"Nothing to extract." + ) + + with infile.open("rb") as f: + f.seek(offset) + data = f.read(length) + + if not data: + raise ValueError("No data read; check your skip/take parameters.") + + # If the file ended early, we’ll write what we got and let you know. + if len(data) < length: + tiles_read = len(data) // TILE_SIZE + print( + f"Note: requested {take_tiles} tiles but only {tiles_read} were available from the offset.", + file=sys.stderr + ) + + with outfile.open("wb") as out: + out.write(data) + + return outfile + +def main(): + p = argparse.ArgumentParser( + description="Extract a subrange of 4bpp tiles from a .4bpp file (tile size = 0x20 bytes)." + ) + p.add_argument("infile", type=Path, help="Path to input .4bpp file") + p.add_argument("suffix", help="Suffix for output name (produces {stem}_{suffix}.4bpp)") + p.add_argument("skip", type=int, help="Number of tiles to skip from start") + p.add_argument("take", type=int, help="Number of tiles to copy") + args = p.parse_args() + + outpath = split_4bpp(args.infile, args.suffix, args.skip, args.take) + print(f"Wrote: {outpath}") + +if __name__ == "__main__": + main() diff --git a/tools/gbagfx/oam_slices/oam_slicer.c b/tools/gbagfx/oam_slices/oam_slicer.c new file mode 100644 index 0000000..c1fed5f --- /dev/null +++ b/tools/gbagfx/oam_slices/oam_slicer.c @@ -0,0 +1,155 @@ +#include +#include +#include +#include "../gfx.h" +#include "oam_slicer.h" + + +// Define the available OAM shapes. +// Ordered by the width, then height. +const struct OamShape oamShapes[] = { + {8, 8, OAM_SIZE_3, OAM_SQUARE}, {8, 4, OAM_SIZE_3, OAM_H_RECTANGLE}, {4, 8, OAM_SIZE_3, OAM_V_RECTANGLE}, + {4, 4, OAM_SIZE_2, OAM_SQUARE}, {4, 2, OAM_SIZE_2, OAM_H_RECTANGLE}, {4, 1, OAM_SIZE_1, OAM_H_RECTANGLE}, + {2, 4, OAM_SIZE_2, OAM_V_RECTANGLE}, {2, 2, OAM_SIZE_1, OAM_SQUARE}, {2, 1, OAM_SIZE_0, OAM_H_RECTANGLE}, + {1, 4, OAM_SIZE_1, OAM_V_RECTANGLE}, {1, 2, OAM_SIZE_0, OAM_V_RECTANGLE}, {1, 1, OAM_SIZE_0, OAM_SQUARE}, +}; + +// Define manual overrides for specific sprite dimentions, which were observed using a different sequencing +// than the standard algorithm would produce. +const struct OamOverride oamShapeOverrides[] = { + { 13, 8, 5, (const struct OamOverrideSegment[]) { //2 8x4 segments, rather than a single 8x8 + {0, 0, 8, 4}, {0, 4, 8, 4}, {8, 0, 4, 8}, {12, 0, 1, 4}, {12, 4, 1, 4} + }}, + { 6, 3, 4, (const struct OamOverrideSegment[]) { //ordering of middle 2 segments + {0,0,4,2}, {0,2,4,1}, {4,0,2,2}, {4,2,2,1} + }}, +}; + +// Function to check if a shape fits at position (x, y) +static bool check_oam_shape_fits(int x, int y, int width, int height, int shapeW, int shapeH) { + return (x + shapeW <= width && y + shapeH <= height); +} + +// Helper to allocate new segment +static struct OamSegment *new_oam_segment(int x, int y, int w, int h) { + struct OamSegment *seg = malloc(sizeof(struct OamSegment)); + seg->offX = x; + seg->offY = y; + seg->width = w; + seg->height = h; + seg->next = NULL; + return seg; +} + +static struct OamSegment *check_oam_manual_override(int width, int height) { + for (int i = 0; i < sizeof(oamShapeOverrides)/sizeof(oamShapeOverrides[0]); ++i) { + const struct OamOverride *ovr = &oamShapeOverrides[i]; + if (ovr->width == width && ovr->height == height) { + struct OamSegment *head = NULL, **tail = &head; + for (int j = 0; j < ovr->numSegments; ++j) { + const struct OamOverrideSegment *seg = &ovr->segments[j]; + *tail = new_oam_segment(seg->offX, seg->offY, seg->width, seg->height); + tail = &((*tail)->next); + } + return head; + } + } + return NULL; +} + +static OamSegment *slice_sprite_to_oam(int width, int height) { + struct OamSegment *head = NULL; + struct OamSegment **tail = &head; + + // Tilemap to track used space + bool used[MAX_OAM_TILE_SIDE_LENGTH][MAX_OAM_TILE_SIDE_LENGTH]; + for (int i = 0; i < MAX_OAM_TILE_SIDE_LENGTH; ++i) + for (int j = 0; j < MAX_OAM_TILE_SIDE_LENGTH; ++j) + used[i][j] = false; + + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + if (used[y][x]) + continue; + + // Try each shape in order + for (int i = 0; i < sizeof(oamShapes)/sizeof(oamShapes[0]); ++i) { + struct OamShape shape = oamShapes[i]; + if (check_oam_shape_fits(x, y, width, height, shape.width, shape.height)) { + // Check if region is free + bool collision = false; + for (int dy = 0; dy < shape.height && !collision; ++dy) + for (int dx = 0; dx < shape.width && !collision; ++dx) + if (used[y + dy][x + dx]) + collision = true; + + if (!collision) { + // Mark region used + for (int dy = 0; dy < shape.height; ++dy) + for (int dx = 0; dx < shape.width; ++dx) + used[y + dy][x + dx] = true; + + // Add segment + *tail = new_oam_segment(x, y, shape.width, shape.height); + tail = &((*tail)->next); + break; + } + } + } + } + } + + return head; +} + +void print_oam_segments(struct OamSegment *segList) { + printf("OAM Segments: "); + while (segList) { + printf("{%d,%d,%dx%d}", segList->offX, segList->offY, segList->width, segList->height); + segList = segList->next; + if (segList) printf(", "); + } + printf("\n"); +} + +int getOamTileIndex(int width, int height, TileCoord *tileCoordinates) { + int tileIndex = 0; + int tileCount = width * height; + + struct OamSegment *segments; + segments = check_oam_manual_override(width, height); + if (segments == NULL) { + segments = slice_sprite_to_oam(width, height); + } + + struct OamSegment *segment = segments; + while (segment) { + for (int y = 0; y < segment->height; ++y) { + for (int x = 0; x < segment->width; ++x) { + tileCoordinates[tileIndex].x = segment->offX + x; + tileCoordinates[tileIndex].y = segment->offY + y; + ++tileIndex; + } + } + segment = segment->next; + } + + free_oam_segments(segments); + return tileCount; +} + +void free_oam_segments(struct OamSegment *segList) { + while (segList) { + struct OamSegment *next = segList->next; + free(segList); + segList = next; + } +} + +void PrintTileCoords(TileCoord *tileSequence, int tile_count) +{ + printf("Generated oamTileSequence (total: %d):\n", tile_count); + for (int i = 0; i < tile_count; i++) { + printf("Tile %d: (%d, %d)\n", i, tileSequence[i].x, tileSequence[i].y); + } +} \ No newline at end of file diff --git a/tools/gbagfx/oam_slices/oam_slicer.h b/tools/gbagfx/oam_slices/oam_slicer.h new file mode 100644 index 0000000..a173cb3 --- /dev/null +++ b/tools/gbagfx/oam_slices/oam_slicer.h @@ -0,0 +1,52 @@ +#ifndef GUARD_OAM_SLICER_H +#define GUARD_OAM_SLICER_H +#include "../gfx.h" + +enum OamShapeEnum { + OAM_SQUARE = 0, + OAM_H_RECTANGLE = 1, + OAM_V_RECTANGLE = 2 +}; + +enum OamSizeEnum { + OAM_SIZE_3 = 3, + OAM_SIZE_2 = 2, + OAM_SIZE_1 = 1, + OAM_SIZE_0 = 0 +}; + +typedef struct OamShape { + unsigned short width; + unsigned short height; + enum OamSizeEnum oamSize; + enum OamShapeEnum mode; +} OamShape; + +typedef struct OamOverrideSegment { + unsigned short offX; + unsigned short offY; + unsigned short width; + unsigned short height; +} OamOverrideSegment; + +typedef struct OamOverride { + unsigned short width; + unsigned short height; + unsigned short numSegments; + const struct OamOverrideSegment *segments; +} OamOverride; + +typedef struct OamSegment { + struct OamSegment *next; + short offX; + short offY; + unsigned short width; // in tiles + unsigned short height; // in tiles +} OamSegment; + +void print_oam_segments(struct OamSegment *segList); +void free_oam_segments(struct OamSegment *segList); +int getOamTileIndex(int width, int height, TileCoord *tileCoordinates); +void PrintTileCoords(TileCoord *tileSequence, int tile_count); + +#endif // GUARD_OAM_SLICER_H \ No newline at end of file diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index bf82963..66b86f2 100755 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -15,11 +15,11 @@ struct GbaToPngOptions { int width; int metatileWidth; int metatileHeight; - bool pinballHatchSprite; char *tilemapFilePath; bool isAffineMap; bool isTiled; int dataWidth; + bool oamSprite; }; struct PngToGbaOptions { @@ -28,11 +28,11 @@ struct PngToGbaOptions { int bitDepth; int metatileWidth; int metatileHeight; - bool pinballHatchSprite; char *tilemapFilePath; bool isAffineMap; bool isTiled; int dataWidth; + bool oamSprite; }; #endif // OPTIONS_H diff --git a/tools/scripts/generate_graphics_rules.sh b/tools/scripts/generate_graphics_rules.sh new file mode 100755 index 0000000..64aa280 --- /dev/null +++ b/tools/scripts/generate_graphics_rules.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# generate_graphics_rules.sh +# +# Reads JSON gfx-config files and emits explicit Make rules for files that +# need special flags or segment handling. Files that need no special +# treatment are left for the generic %.4bpp: %.png pattern rule in the +# Makefile. +# +# Usage: bash generate_graphics_rules.sh graphics/**/gfx.json ... +# Output: Make rules on stdout + +set -euo pipefail + +emit_rules() { + local json="$1" + local dir + dir=$(dirname "$json") + + # Single jq call per JSON: emit one TSV line per file entry with all + # resolved values. Fields: + # gfx_filename mwidth mheight oam align segments_json + # segments_json is "null" when there are no segments, otherwise the + # raw JSON array. + jq -r ' + .defaults as $d | + .files[]? | + [ + .gfx_filename, + ((.mwidth // $d.mwidth // 0) | tostring), + ((.mheight // $d.mheight // 0) | tostring), + ((.oam // $d.oam // false) | tostring), + ((.align // 0) | tostring), + (if .segments then (.segments | tojson) else "null" end) + ] | @tsv + ' "$json" | while IFS=$'\t' read -r gfx_filename mwidth mheight oam align segments; do + local stem="graphics/${dir#graphics/}/${gfx_filename}" + local target="${stem}.4bpp" + + if [ "$segments" != "null" ]; then + # --- Segmented file --- + # Collect segment PNGs as prerequisites + local seg_pngs + seg_pngs=$(printf '%s' "$segments" | jq -r '.[].segfile' | while read -r sf; do + printf '%s/%s.png ' "$dir" "$sf" + done) + + printf '%s: %s%s\n' "$target" "$seg_pngs" "$json" + + # Emit a $(GFX) call for each segment + local first=1 + printf '%s' "$segments" | jq -r '.[] | [.segfile, (.mwidth // 0 | tostring), (.mheight // 0 | tostring), (.oam // false | tostring)] | @tsv' | while IFS=$'\t' read -r segfile seg_mw seg_mh seg_oam; do + local seg_png="${dir}/${segfile}.png" + local seg_4bpp="${stem}_${segfile}.4bpp" + local flags="" + if [ "$seg_mw" != "0" ] && [ -n "$seg_mw" ]; then + flags="$flags -mwidth $seg_mw" + fi + if [ "$seg_mh" != "0" ] && [ -n "$seg_mh" ]; then + flags="$flags -mheight $seg_mh" + fi + if [ "$seg_oam" = "true" ]; then + flags="$flags -oam" + fi + printf '\t$(GFX) %s %s%s; \\\n' "$seg_png" "$seg_4bpp" "$flags" + done + + # cat all segment .4bpp files together + local seg_4bpps + seg_4bpps=$(printf '%s' "$segments" | jq -r '.[].segfile' | while read -r sf; do + printf '%s_%s.4bpp ' "$stem" "$sf" + done) + printf '\tcat %s> $@' "$seg_4bpps" + + # Alignment padding + if [ "$align" != "0" ] && [ -n "$align" ]; then + printf '; \\\n' + printf '\tdd if=/dev/zero bs=32 count=%s >> $@ 2>/dev/null' "$align" + fi + printf '\n\n' + else + # --- Non-segmented file --- + local flags="" + if [ "$mwidth" != "0" ] && [ -n "$mwidth" ]; then + flags="$flags -mwidth $mwidth" + fi + if [ "$mheight" != "0" ] && [ -n "$mheight" ]; then + flags="$flags -mheight $mheight" + fi + if [ "$oam" = "true" ]; then + flags="$flags -oam" + fi + + # Skip if no special flags and no alignment — the generic + # pattern rule in the Makefile handles this case. + if [ -z "$flags" ] && { [ "$align" = "0" ] || [ -z "$align" ]; }; then + continue + fi + + printf '%s: %s.png %s\n' "$target" "$stem" "$json" + printf '\t$(GFX) $< $@%s\n' "$flags" + + if [ "$align" != "0" ] && [ -n "$align" ]; then + printf '\tdd if=/dev/zero bs=32 count=%s >> $@ 2>/dev/null\n' "$align" + fi + printf '\n' + fi + done +} + +# --- Main --- +printf '# Auto-generated by %s — do not edit\n\n' "$(basename "$0")" + +for json in "$@"; do + # Only process gfx-config files + if jq -e '.kind == "gfx-config"' "$json" > /dev/null 2>&1; then + emit_rules "$json" + fi +done