diff --git a/.gitignore b/.gitignore index cca13a6a3..341c63013 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ *.8bpp *.gbapal *.lz +*.latfont +*.hwjpnfont +*.fwjpnfont pokeas pokeld pokeobjcopy diff --git a/Makefile b/Makefile index c6f0e129a..6c519190e 100644 --- a/Makefile +++ b/Makefile @@ -13,12 +13,7 @@ SHA1 := sha1sum -c .PHONY: rom tools gbagfx scaninc clean compare -gfx := tools/gbagfx/gbagfx -1bpp := @$(gfx) 1bpp -4bpp := @$(gfx) 4bpp -8bpp := @$(gfx) 8bpp -gbapal := @$(gfx) gbapal -lz := @$(gfx) lz +gfx := @tools/gbagfx/gbagfx scaninc := tools/scaninc/scaninc objs = asm/emerald.o @@ -52,11 +47,11 @@ include graphics_file_rules.mk %.png: ; %.pal: ; -%.1bpp: %.png ; $(1bpp) $< -%.4bpp: %.png ; $(4bpp) $< -%.8bpp: %.png ; $(8bpp) $< -%.gbapal: %.pal ; $(gbapal) $< -%.lz: % ; $(lz) $< +%.1bpp: %.png ; $(gfx) $< $@ +%.4bpp: %.png ; $(gfx) $< $@ +%.8bpp: %.png ; $(gfx) $< $@ +%.gbapal: %.pal ; $(gfx) $< $@ +%.lz: % ; $(gfx) $< $@ %.o: %.s $$($$@_deps) $(AS) $(ASFLAGS) -o $@ $< diff --git a/data/data2.s b/data/data2.s index 96ae70665..d048f018a 100644 --- a/data/data2.s +++ b/data/data2.s @@ -124,7 +124,7 @@ gMenuCursorDimensions: ; 82EA608 .byte 0, 0 gFont9JapaneseGlyphs: ; 82EA61C - .incbin "base_emerald.gba", 0x2ea61c, 0x2000 + .incbin "data/graphics/fonts/font9.hwjpnfont" ; Unreferenced data. This also comes before the gpu_bg.s data in Ruby and seems ; to be unreferenced there too. @@ -11093,7 +11093,7 @@ gUnknown_08616124: ; 8616124 .incbin "base_emerald.gba", 0x616124, 0x4 gFont6BrailleGlyphs: ; 8616128 - .incbin "base_emerald.gba", 0x616128, 0x1000 + .incbin "data/graphics/fonts/font6.fwjpnfont" gUnknown_08617128: ; 8617128 .incbin "base_emerald.gba", 0x617128, 0x48 @@ -12032,58 +12032,58 @@ gUnknown_0862B7FC: ; 862B7FC .incbin "base_emerald.gba", 0x62b7fc, 0x2e8 gFont8LatinGlyphs: ; 862BAE4 - .incbin "base_emerald.gba", 0x62bae4, 0x8000 + .incbin "data/graphics/fonts/font8.latfont" gFont8LatinGlyphWidths: ; 8633AE4 - .incbin "base_emerald.gba", 0x633ae4, 0x200 + .include "data/graphics/fonts/font8_latin_widths.s" gFont0LatinGlyphs: ; 8633CE4 - .incbin "base_emerald.gba", 0x633ce4, 0x8000 + .incbin "data/graphics/fonts/font0.latfont" gFont0LatinGlyphWidths: ; 863BCE4 - .incbin "base_emerald.gba", 0x63bce4, 0x200 + .include "data/graphics/fonts/font0_latin_widths.s" gFont7LatinGlyphs: ; 863BEE4 - .incbin "base_emerald.gba", 0x63bee4, 0x8000 + .incbin "data/graphics/fonts/font7.latfont" gFont7LatinGlyphWidths: ; 8643EE4 - .incbin "base_emerald.gba", 0x643ee4, 0x200 + .include "data/graphics/fonts/font7_latin_widths.s" gFont2LatinGlyphs: ; 86440E4 - .incbin "base_emerald.gba", 0x6440e4, 0x8000 + .incbin "data/graphics/fonts/font2.latfont" gFont2LatinGlyphWidths: ; 864C0E4 - .incbin "base_emerald.gba", 0x64c0e4, 0x200 + .include "data/graphics/fonts/font2_latin_widths.s" gFont1LatinGlyphs: ; 864C2E4 - .incbin "base_emerald.gba", 0x64c2e4, 0x8000 + .incbin "data/graphics/fonts/font1.latfont" gFont1LatinGlyphWidths: ; 86542E4 - .incbin "base_emerald.gba", 0x6542e4, 0x200 + .include "data/graphics/fonts/font1_latin_widths.s" gFont0JapaneseGlyphs: ; 86544E4 - .incbin "base_emerald.gba", 0x6544e4, 0x4000 + .incbin "data/graphics/fonts/font0.hwjpnfont" gFont1JapaneseGlyphs: ; 86584E4 - .incbin "base_emerald.gba", 0x6584e4, 0x4000 + .incbin "data/graphics/fonts/font1.hwjpnfont" gUnusedFullwidthJapaneseFontGlyphs: ; 865C4E4 - .incbin "base_emerald.gba", 0x65c4e4, 0x8000 + .incbin "data/graphics/fonts/unused_1.fwjpnfont" gUnusedFullwidthJapaneseFontGlyphWidths: ; 86644E4 - .incbin "base_emerald.gba", 0x6644e4, 0x200 + .include "data/graphics/fonts/unused_japanese_font_1_widths.s" gUnusedFullwidthJapaneseFont2Glyphs: ; 86646E4 - .incbin "base_emerald.gba", 0x6646e4, 0x8000 + .incbin "data/graphics/fonts/unused_2.fwjpnfont" gUnusedFullwidthJapaneseFont2GlyphWidths: ; 866C6E4 - .incbin "base_emerald.gba", 0x66c6e4, 0x200 + .include "data/graphics/fonts/unused_japanese_font_2_widths.s" gFont2JapaneseGlyphs: ; 866C8E4 - .incbin "base_emerald.gba", 0x66c8e4, 0x8000 + .incbin "data/graphics/fonts/font2.fwjpnfont" gFont2JapaneseGlyphWidths: ; 86748E4 - .incbin "base_emerald.gba", 0x6748e4, 0x200 + .include "data/graphics/fonts/font2_japanese_widths.s" gUnknown_08674AE4: ; 8674AE4 .incbin "base_emerald.gba", 0x674ae4, 0x32 diff --git a/data/graphics/fonts/font0_japanese.png b/data/graphics/fonts/font0_japanese.png new file mode 100644 index 000000000..35345f399 Binary files /dev/null and b/data/graphics/fonts/font0_japanese.png differ diff --git a/data/graphics/fonts/font0_latin.png b/data/graphics/fonts/font0_latin.png new file mode 100644 index 000000000..55ed43506 Binary files /dev/null and b/data/graphics/fonts/font0_latin.png differ diff --git a/data/graphics/fonts/font0_latin_widths.s b/data/graphics/fonts/font0_latin_widths.s new file mode 100644 index 000000000..3ea204048 --- /dev/null +++ b/data/graphics/fonts/font0_latin_widths.s @@ -0,0 +1,512 @@ + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 6 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 7 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 7 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 4 + .byte 7 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 5 + .byte 7 + .byte 7 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 5 + .byte 8 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 7 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 diff --git a/data/graphics/fonts/font1_japanese.png b/data/graphics/fonts/font1_japanese.png new file mode 100644 index 000000000..3d2d55541 Binary files /dev/null and b/data/graphics/fonts/font1_japanese.png differ diff --git a/data/graphics/fonts/font1_latin.png b/data/graphics/fonts/font1_latin.png new file mode 100644 index 000000000..ade914858 Binary files /dev/null and b/data/graphics/fonts/font1_latin.png differ diff --git a/data/graphics/fonts/font1_latin_widths.s b/data/graphics/fonts/font1_latin_widths.s new file mode 100644 index 000000000..cd56da569 --- /dev/null +++ b/data/graphics/fonts/font1_latin_widths.s @@ -0,0 +1,512 @@ + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 9 + .byte 7 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 10 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 6 + .byte 4 + .byte 8 + .byte 8 + .byte 8 + .byte 7 + .byte 8 + .byte 8 + .byte 4 + .byte 6 + .byte 6 + .byte 4 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 7 + .byte 7 + .byte 7 + .byte 7 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 4 + .byte 6 + .byte 3 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 7 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 4 + .byte 5 + .byte 6 + .byte 4 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 diff --git a/data/graphics/fonts/font2_japanese.png b/data/graphics/fonts/font2_japanese.png new file mode 100644 index 000000000..efdb4b77e Binary files /dev/null and b/data/graphics/fonts/font2_japanese.png differ diff --git a/data/graphics/fonts/font2_japanese_widths.s b/data/graphics/fonts/font2_japanese_widths.s new file mode 100644 index 000000000..54a8a1cf1 --- /dev/null +++ b/data/graphics/fonts/font2_japanese_widths.s @@ -0,0 +1,512 @@ + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 7 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 5 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 8 + .byte 8 + .byte 10 + .byte 10 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 2 + .byte 4 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 diff --git a/data/graphics/fonts/font2_latin.png b/data/graphics/fonts/font2_latin.png new file mode 100644 index 000000000..7eba3e748 Binary files /dev/null and b/data/graphics/fonts/font2_latin.png differ diff --git a/data/graphics/fonts/font2_latin_widths.s b/data/graphics/fonts/font2_latin_widths.s new file mode 100644 index 000000000..21a688a62 --- /dev/null +++ b/data/graphics/fonts/font2_latin_widths.s @@ -0,0 +1,512 @@ + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 9 + .byte 8 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 10 + .byte 8 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 4 + .byte 6 + .byte 8 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 6 + .byte 3 + .byte 12 + .byte 12 + .byte 12 + .byte 12 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 8 + .byte 8 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 6 + .byte 6 + .byte 8 + .byte 5 + .byte 9 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 4 + .byte 6 + .byte 5 + .byte 5 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 5 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 8 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 12 + .byte 12 + .byte 12 + .byte 12 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 diff --git a/data/graphics/fonts/font6_braille.png b/data/graphics/fonts/font6_braille.png new file mode 100644 index 000000000..cb4451bc2 Binary files /dev/null and b/data/graphics/fonts/font6_braille.png differ diff --git a/data/graphics/fonts/font7_latin.png b/data/graphics/fonts/font7_latin.png new file mode 100644 index 000000000..08652d45f Binary files /dev/null and b/data/graphics/fonts/font7_latin.png differ diff --git a/data/graphics/fonts/font7_latin_widths.s b/data/graphics/fonts/font7_latin_widths.s new file mode 100644 index 000000000..03f06224c --- /dev/null +++ b/data/graphics/fonts/font7_latin_widths.s @@ -0,0 +1,512 @@ + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 6 + .byte 5 + .byte 5 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 6 + .byte 9 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 5 + .byte 4 + .byte 8 + .byte 8 + .byte 8 + .byte 7 + .byte 8 + .byte 8 + .byte 4 + .byte 4 + .byte 6 + .byte 4 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 7 + .byte 7 + .byte 7 + .byte 7 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 5 + .byte 6 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 3 + .byte 5 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 5 + .byte 5 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 8 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 diff --git a/data/graphics/fonts/font8_latin.png b/data/graphics/fonts/font8_latin.png new file mode 100644 index 000000000..3a88def3a Binary files /dev/null and b/data/graphics/fonts/font8_latin.png differ diff --git a/data/graphics/fonts/font8_latin_widths.s b/data/graphics/fonts/font8_latin_widths.s new file mode 100644 index 000000000..3e5815eda --- /dev/null +++ b/data/graphics/fonts/font8_latin_widths.s @@ -0,0 +1,512 @@ + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 3 + .byte 4 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 8 + .byte 5 + .byte 6 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 0 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 5 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 4 + .byte 5 + .byte 4 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 4 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 5 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 7 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 4 + .byte 4 + .byte 5 + .byte 4 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 7 + .byte 3 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 5 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 3 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 3 diff --git a/data/graphics/fonts/font9_japanese.png b/data/graphics/fonts/font9_japanese.png new file mode 100644 index 000000000..cf5b61668 Binary files /dev/null and b/data/graphics/fonts/font9_japanese.png differ diff --git a/data/graphics/fonts/unused_japanese_font_1.png b/data/graphics/fonts/unused_japanese_font_1.png new file mode 100644 index 000000000..da4f2beac Binary files /dev/null and b/data/graphics/fonts/unused_japanese_font_1.png differ diff --git a/data/graphics/fonts/unused_japanese_font_1_widths.s b/data/graphics/fonts/unused_japanese_font_1_widths.s new file mode 100644 index 000000000..6d68f9326 --- /dev/null +++ b/data/graphics/fonts/unused_japanese_font_1_widths.s @@ -0,0 +1,512 @@ + .byte 0 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 8 + .byte 7 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 5 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 8 + .byte 8 + .byte 10 + .byte 10 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 2 + .byte 4 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 diff --git a/data/graphics/fonts/unused_japanese_font_2.png b/data/graphics/fonts/unused_japanese_font_2.png new file mode 100644 index 000000000..7da59c0eb Binary files /dev/null and b/data/graphics/fonts/unused_japanese_font_2.png differ diff --git a/data/graphics/fonts/unused_japanese_font_2_widths.s b/data/graphics/fonts/unused_japanese_font_2_widths.s new file mode 100644 index 000000000..6f2dbd43f --- /dev/null +++ b/data/graphics/fonts/unused_japanese_font_2_widths.s @@ -0,0 +1,512 @@ + .byte 0 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 9 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 9 + .byte 8 + .byte 7 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte 5 + .byte 9 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 8 + .byte 8 + .byte 8 + .byte 10 + .byte 10 + .byte 8 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 2 + .byte 4 + .byte 6 + .byte 3 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 5 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 6 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 + .byte 10 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 3b94e567b..d60f0b92e 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -36,193 +36,231 @@ $(monpaldir)/castform_shiny_palette.gbapal: $(monpaldir)/castform_normal_form_sh tilesetdir := data/graphics/tilesets $(tilesetdir)/secondary/petalburg/tiles.4bpp: $(tilesetdir)/secondary/petalburg/tiles.png - $(4bpp) $< -num_tiles 159 + $(gfx) $< $@ -num_tiles 159 $(tilesetdir)/secondary/rustboro/tiles.4bpp: $(tilesetdir)/secondary/rustboro/tiles.png - $(4bpp) $< -num_tiles 498 + $(gfx) $< $@ -num_tiles 498 $(tilesetdir)/secondary/dewford/tiles.4bpp: $(tilesetdir)/secondary/dewford/tiles.png - $(4bpp) $< -num_tiles 503 + $(gfx) $< $@ -num_tiles 503 $(tilesetdir)/secondary/slateport/tiles.4bpp: $(tilesetdir)/secondary/slateport/tiles.png - $(4bpp) $< -num_tiles 504 + $(gfx) $< $@ -num_tiles 504 $(tilesetdir)/secondary/mauville/tiles.4bpp: $(tilesetdir)/secondary/mauville/tiles.png - $(4bpp) $< -num_tiles 503 + $(gfx) $< $@ -num_tiles 503 $(tilesetdir)/secondary/lavaridge/tiles.4bpp: $(tilesetdir)/secondary/lavaridge/tiles.png - $(4bpp) $< -num_tiles 450 + $(gfx) $< $@ -num_tiles 450 $(tilesetdir)/secondary/fortree/tiles.4bpp: $(tilesetdir)/secondary/fortree/tiles.png - $(4bpp) $< -num_tiles 493 + $(gfx) $< $@ -num_tiles 493 $(tilesetdir)/secondary/pacifidlog/tiles.4bpp: $(tilesetdir)/secondary/pacifidlog/tiles.png - $(4bpp) $< -num_tiles 504 + $(gfx) $< $@ -num_tiles 504 $(tilesetdir)/secondary/sootopolis/tiles.4bpp: $(tilesetdir)/secondary/sootopolis/tiles.png - $(4bpp) $< -num_tiles 328 + $(gfx) $< $@ -num_tiles 328 $(tilesetdir)/secondary/battle_frontier_outside_west/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_west/tiles.png - $(4bpp) $< -num_tiles 508 + $(gfx) $< $@ -num_tiles 508 $(tilesetdir)/secondary/battle_frontier_outside_east/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_outside_east/tiles.png - $(4bpp) $< -num_tiles 508 + $(gfx) $< $@ -num_tiles 508 $(tilesetdir)/primary/inside_building/tiles.4bpp: $(tilesetdir)/primary/inside_building/tiles.png - $(4bpp) $< -num_tiles 502 + $(gfx) $< $@ -num_tiles 502 $(tilesetdir)/secondary/shop/tiles.4bpp: $(tilesetdir)/secondary/shop/tiles.png - $(4bpp) $< -num_tiles 502 + $(gfx) $< $@ -num_tiles 502 $(tilesetdir)/secondary/pokemon_center/tiles.4bpp: $(tilesetdir)/secondary/pokemon_center/tiles.png - $(4bpp) $< -num_tiles 478 + $(gfx) $< $@ -num_tiles 478 $(tilesetdir)/secondary/cave/tiles.4bpp: $(tilesetdir)/secondary/cave/tiles.png - $(4bpp) $< -num_tiles 425 + $(gfx) $< $@ -num_tiles 425 $(tilesetdir)/secondary/pokemon_school/tiles.4bpp: $(tilesetdir)/secondary/pokemon_school/tiles.png - $(4bpp) $< -num_tiles 278 + $(gfx) $< $@ -num_tiles 278 $(tilesetdir)/secondary/pokemon_fan_club/tiles.4bpp: $(tilesetdir)/secondary/pokemon_fan_club/tiles.png - $(4bpp) $< -num_tiles 319 + $(gfx) $< $@ -num_tiles 319 $(tilesetdir)/secondary/unused_1/tiles.4bpp: $(tilesetdir)/secondary/unused_1/tiles.png - $(4bpp) $< -num_tiles 17 + $(gfx) $< $@ -num_tiles 17 $(tilesetdir)/secondary/meteor_falls/tiles.4bpp: $(tilesetdir)/secondary/meteor_falls/tiles.png - $(4bpp) $< -num_tiles 460 + $(gfx) $< $@ -num_tiles 460 $(tilesetdir)/secondary/oceanic_museum/tiles.4bpp: $(tilesetdir)/secondary/oceanic_museum/tiles.png - $(4bpp) $< -num_tiles 319 + $(gfx) $< $@ -num_tiles 319 $(tilesetdir)/secondary/cable_club/unknown_tiles.4bpp: $(tilesetdir)/secondary/cable_club/unknown_tiles.png - $(4bpp) $< -num_tiles 120 + $(gfx) $< $@ -num_tiles 120 $(tilesetdir)/secondary/seashore_house/tiles.4bpp: $(tilesetdir)/secondary/seashore_house/tiles.png - $(4bpp) $< -num_tiles 312 + $(gfx) $< $@ -num_tiles 312 $(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.4bpp: $(tilesetdir)/secondary/pretty_petal_flower_shop/tiles.png - $(4bpp) $< -num_tiles 345 + $(gfx) $< $@ -num_tiles 345 $(tilesetdir)/secondary/pokemon_day_care/tiles.4bpp: $(tilesetdir)/secondary/pokemon_day_care/tiles.png - $(4bpp) $< -num_tiles 355 + $(gfx) $< $@ -num_tiles 355 $(tilesetdir)/secondary/secret_base/brown_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/tree/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/shrub/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/blue_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/yellow_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/red_cave/unused_tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png - $(4bpp) $< -output $@ -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/secret_base/brown_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/brown_cave/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/secret_base/tree/tiles.4bpp: $(tilesetdir)/secondary/secret_base/tree/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/secret_base/shrub/tiles.4bpp: $(tilesetdir)/secondary/secret_base/shrub/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/secret_base/blue_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/blue_cave/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/yellow_cave/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/secret_base/red_cave/tiles.4bpp: $(tilesetdir)/secondary/secret_base/red_cave/tiles.png - $(4bpp) $< -num_tiles 83 + $(gfx) $< $@ -num_tiles 83 $(tilesetdir)/secondary/inside_of_truck/tiles.4bpp: $(tilesetdir)/secondary/inside_of_truck/tiles.png - $(4bpp) $< -num_tiles 62 + $(gfx) $< $@ -num_tiles 62 $(tilesetdir)/secondary/contest/tiles.4bpp: $(tilesetdir)/secondary/contest/tiles.png - $(4bpp) $< -num_tiles 430 + $(gfx) $< $@ -num_tiles 430 $(tilesetdir)/secondary/lilycove_museum/tiles.4bpp: $(tilesetdir)/secondary/lilycove_museum/tiles.png - $(4bpp) $< -num_tiles 431 + $(gfx) $< $@ -num_tiles 431 $(tilesetdir)/secondary/lab/tiles.4bpp: $(tilesetdir)/secondary/lab/tiles.png - $(4bpp) $< -num_tiles 500 + $(gfx) $< $@ -num_tiles 500 $(tilesetdir)/secondary/underwater/tiles.4bpp: $(tilesetdir)/secondary/underwater/tiles.png - $(4bpp) $< -num_tiles 500 + $(gfx) $< $@ -num_tiles 500 $(tilesetdir)/secondary/generic_building/tiles.4bpp: $(tilesetdir)/secondary/generic_building/tiles.png - $(4bpp) $< -num_tiles 509 + $(gfx) $< $@ -num_tiles 509 $(tilesetdir)/secondary/mauville_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mauville_game_corner/tiles.png - $(4bpp) $< -num_tiles 469 + $(gfx) $< $@ -num_tiles 469 $(tilesetdir)/secondary/unused_2/tiles.4bpp: $(tilesetdir)/secondary/unused_2/tiles.png - $(4bpp) $< -num_tiles 150 + $(gfx) $< $@ -num_tiles 150 $(tilesetdir)/secondary/rustboro_gym/tiles.4bpp: $(tilesetdir)/secondary/rustboro_gym/tiles.png - $(4bpp) $< -num_tiles 60 + $(gfx) $< $@ -num_tiles 60 $(tilesetdir)/secondary/dewford_gym/tiles.4bpp: $(tilesetdir)/secondary/dewford_gym/tiles.png - $(4bpp) $< -num_tiles 61 + $(gfx) $< $@ -num_tiles 61 $(tilesetdir)/secondary/lavaridge_gym/tiles.4bpp: $(tilesetdir)/secondary/lavaridge_gym/tiles.png - $(4bpp) $< -num_tiles 54 + $(gfx) $< $@ -num_tiles 54 $(tilesetdir)/secondary/petalburg_gym/tiles.4bpp: $(tilesetdir)/secondary/petalburg_gym/tiles.png - $(4bpp) $< -num_tiles 148 + $(gfx) $< $@ -num_tiles 148 $(tilesetdir)/secondary/fortree_gym/tiles.4bpp: $(tilesetdir)/secondary/fortree_gym/tiles.png - $(4bpp) $< -num_tiles 61 + $(gfx) $< $@ -num_tiles 61 $(tilesetdir)/secondary/mossdeep_gym/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_gym/tiles.png - $(4bpp) $< -num_tiles 82 + $(gfx) $< $@ -num_tiles 82 $(tilesetdir)/secondary/sootopolis_gym/tiles.4bpp: $(tilesetdir)/secondary/sootopolis_gym/tiles.png - $(4bpp) $< -num_tiles 484 + $(gfx) $< $@ -num_tiles 484 $(tilesetdir)/secondary/trick_house_puzzle/tiles.4bpp: $(tilesetdir)/secondary/trick_house_puzzle/tiles.png - $(4bpp) $< -num_tiles 294 + $(gfx) $< $@ -num_tiles 294 $(tilesetdir)/secondary/inside_ship/tiles.4bpp: $(tilesetdir)/secondary/inside_ship/tiles.png - $(4bpp) $< -num_tiles 342 + $(gfx) $< $@ -num_tiles 342 $(tilesetdir)/secondary/elite_four/tiles.4bpp: $(tilesetdir)/secondary/elite_four/tiles.png - $(4bpp) $< -num_tiles 505 + $(gfx) $< $@ -num_tiles 505 $(tilesetdir)/secondary/battle_frontier/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier/tiles.png - $(4bpp) $< -num_tiles 310 + $(gfx) $< $@ -num_tiles 310 $(tilesetdir)/secondary/battle_factory/tiles.4bpp: $(tilesetdir)/secondary/battle_factory/tiles.png - $(4bpp) $< -num_tiles 424 + $(gfx) $< $@ -num_tiles 424 $(tilesetdir)/secondary/battle_pike/tiles.4bpp: $(tilesetdir)/secondary/battle_pike/tiles.png - $(4bpp) $< -num_tiles 382 + $(gfx) $< $@ -num_tiles 382 $(tilesetdir)/secondary/mirage_tower/tiles.4bpp: $(tilesetdir)/secondary/mirage_tower/tiles.png - $(4bpp) $< -num_tiles 420 + $(gfx) $< $@ -num_tiles 420 $(tilesetdir)/secondary/mossdeep_game_corner/tiles.4bpp: $(tilesetdir)/secondary/mossdeep_game_corner/tiles.png - $(4bpp) $< -num_tiles 95 + $(gfx) $< $@ -num_tiles 95 -$(tilesetdir)/secondary/island_habor/tiles.4bpp: $(tilesetdir)/secondary/island_habor/tiles.png - $(4bpp) $< -num_tiles 503 +$(tilesetdir)/secondary/island_harbor/tiles.4bpp: $(tilesetdir)/secondary/island_harbor/tiles.png + $(gfx) $< $@ -num_tiles 503 $(tilesetdir)/secondary/trainer_hill/tiles.4bpp: $(tilesetdir)/secondary/trainer_hill/tiles.png - $(4bpp) $< -num_tiles 374 + $(gfx) $< $@ -num_tiles 374 $(tilesetdir)/secondary/navel_rock/tiles.4bpp: $(tilesetdir)/secondary/navel_rock/tiles.png - $(4bpp) $< -num_tiles 420 + $(gfx) $< $@ -num_tiles 420 $(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.4bpp: $(tilesetdir)/secondary/battle_frontier_ranking_hall/tiles.png - $(4bpp) $< -num_tiles 136 + $(gfx) $< $@ -num_tiles 136 $(tilesetdir)/secondary/mystery_events_house/tiles.4bpp: $(tilesetdir)/secondary/mystery_events_house/tiles.png - $(4bpp) $< -num_tiles 509 + $(gfx) $< $@ -num_tiles 509 + +fontdir := data/graphics/fonts + +$(fontdir)/font0.latfont: $(fontdir)/font0_latin.png + $(gfx) $< $@ + +$(fontdir)/font1.latfont: $(fontdir)/font1_latin.png + $(gfx) $< $@ + +$(fontdir)/font2.latfont: $(fontdir)/font2_latin.png + $(gfx) $< $@ + +$(fontdir)/font7.latfont: $(fontdir)/font7_latin.png + $(gfx) $< $@ + +$(fontdir)/font8.latfont: $(fontdir)/font8_latin.png + $(gfx) $< $@ + +$(fontdir)/font0.hwjpnfont: $(fontdir)/font0_japanese.png + $(gfx) $< $@ + +$(fontdir)/font1.hwjpnfont: $(fontdir)/font1_japanese.png + $(gfx) $< $@ + +$(fontdir)/font9.hwjpnfont: $(fontdir)/font9_japanese.png + $(gfx) $< $@ + +$(fontdir)/font2.fwjpnfont: $(fontdir)/font2_japanese.png + $(gfx) $< $@ + +$(fontdir)/font6.fwjpnfont: $(fontdir)/font6_braille.png + $(gfx) $< $@ + +$(fontdir)/unused_1.fwjpnfont: $(fontdir)/unused_japanese_font_1.png + $(gfx) $< $@ + +$(fontdir)/unused_2.fwjpnfont: $(fontdir)/unused_japanese_font_2.png + $(gfx) $< $@ diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 1bf37e301..e7f089445 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,14 +1,14 @@ CC = gcc -CFLAGS = -Wall -std=c11 -O2 +CFLAGS = -Wall -Wextra -std=c11 -O2 LIBS = -lz -lpng -SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c util.c +SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c util.c font.c .PHONY: clean -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h util.h +gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS) clean: diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index ffc1b3d41..f6a30804a 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -134,7 +134,7 @@ void WritePng(char *path, struct Image *image) if (image->hasPalette) { SetPngPalette(png_ptr, info_ptr, &image->palette); - if (image->isObject) { + if (image->hasTransparency) { png_byte trans = 0; png_set_tRNS(png_ptr, info_ptr, &trans, 1, 0); } diff --git a/tools/gbagfx/font.c b/tools/gbagfx/font.c new file mode 100644 index 000000000..0dd6fbc3e --- /dev/null +++ b/tools/gbagfx/font.c @@ -0,0 +1,326 @@ +// Copyright (c) 2015 YamaArashi + +#include +#include +#include +#include +#include "global.h" +#include "font.h" +#include "gfx.h" +#include "util.h" + +unsigned char gFontPalette[][3] = { + {0x90, 0xC8, 0xFF}, // bg (saturated blue that contrasts well with the shadow color) + {0x38, 0x38, 0x38}, // fg (dark grey) + {0xD8, 0xD8, 0xD8}, // shadow (light grey) + {0xFF, 0xFF, 0xFF} // box (white) +}; + +static void ConvertFromLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + unsigned int srcPixelsOffset = 0; + + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + srcPixelsOffset += 2; + } + } + } + } +} + +static void ConvertToLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + unsigned int destPixelsOffset = 0; + + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + destPixelsOffset += 2; + } + } + } + } +} + +static void ConvertFromHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; + + for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { + unsigned int pixelsX = column * 8; + unsigned int srcPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 32) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + srcPixelsOffset += 2; + } + } + } + } +} + +static void ConvertToHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; + + for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { + unsigned int pixelsX = column * 8; + unsigned int destPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 32) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + destPixelsOffset += 2; + } + } + } + } +} + +static void ConvertFromFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; + + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + unsigned int srcPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + srcPixelsOffset += 2; + } + } + } + } +} + +static void ConvertToFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) +{ + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; + + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + unsigned int destPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + destPixelsOffset += 2; + } + } + } + } +} + +static void SetFontPalette(struct Image *image) +{ + image->hasPalette = true; + + image->palette.numColors = 4; + + for (int i = 0; i < image->palette.numColors; i++) { + image->palette.colors[i].red = gFontPalette[i][0]; + image->palette.colors[i].green = gFontPalette[i][1]; + image->palette.colors[i].blue = gFontPalette[i][2]; + } + + image->hasTransparency = false; +} + +void ReadLatinFont(char *path, struct Image *image) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + int numGlyphs = fileSize / 64; + + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + + int numRows = numGlyphs / 16; + + image->width = 256; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertFromLatinFont(buffer, image->pixels, numRows); + + free(buffer); + + SetFontPalette(image); +} + +void WriteLatinFont(char *path, struct Image *image) +{ + if (image->width != 256) + FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); + + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 64; + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertToLatinFont(image->pixels, buffer, numRows); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} + +void ReadHalfwidthJapaneseFont(char *path, struct Image *image) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + int glyphSize = 32; + + if (fileSize % glyphSize != 0) + FATAL_ERROR("The file size (%d) is not a multiple of %d.\n", fileSize, glyphSize); + + int numGlyphs = fileSize / glyphSize; + + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + + int numRows = numGlyphs / 16; + + image->width = 128; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertFromHalfwidthJapaneseFont(buffer, image->pixels, numRows); + + free(buffer); + + SetFontPalette(image); +} + +void WriteHalfwidthJapaneseFont(char *path, struct Image *image) +{ + if (image->width != 128) + FATAL_ERROR("The width of the font image (%d) is not 128.\n", image->width); + + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 32; + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertToHalfwidthJapaneseFont(image->pixels, buffer, numRows); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} + +void ReadFullwidthJapaneseFont(char *path, struct Image *image) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + int numGlyphs = fileSize / 64; + + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + + int numRows = numGlyphs / 16; + + image->width = 256; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertFromFullwidthJapaneseFont(buffer, image->pixels, numRows); + + free(buffer); + + SetFontPalette(image); +} + +void WriteFullwidthJapaneseFont(char *path, struct Image *image) +{ + if (image->width != 256) + FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); + + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 64; + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); + + ConvertToFullwidthJapaneseFont(image->pixels, buffer, numRows); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} diff --git a/tools/gbagfx/font.h b/tools/gbagfx/font.h new file mode 100644 index 000000000..88c61b638 --- /dev/null +++ b/tools/gbagfx/font.h @@ -0,0 +1,16 @@ +// Copyright (c) 2015 YamaArashi + +#ifndef FONT_H +#define FONT_H + +#include +#include "gfx.h" + +void ReadLatinFont(char *path, struct Image *image); +void WriteLatinFont(char *path, struct Image *image); +void ReadHalfwidthJapaneseFont(char *path, struct Image *image); +void WriteHalfwidthJapaneseFont(char *path, struct Image *image); +void ReadFullwidthJapaneseFont(char *path, struct Image *image); +void WriteFullwidthJapaneseFont(char *path, struct Image *image); + +#endif // FONT_H diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index 473640d44..ecd436652 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -24,7 +24,7 @@ struct Image { unsigned char *pixels; bool hasPalette; struct Palette palette; - bool isObject; + bool hasTransparency; }; void ReadImage(char *path, int tilesWidth, int bitDepth, struct Image *image, bool invertColors); diff --git a/tools/gbagfx/global.h b/tools/gbagfx/global.h index ce4d6925d..65dd351d2 100644 --- a/tools/gbagfx/global.h +++ b/tools/gbagfx/global.h @@ -14,6 +14,8 @@ do { \ exit(1); \ } while (0) +#define UNUSED + #else #define FATAL_ERROR(format, ...) \ @@ -22,14 +24,8 @@ do { \ exit(1); \ } while (0) +#define UNUSED __attribute__((__unused__)) + #endif // _MSC_VER -#define GBAGFX_MAX_PATH 255 - -#define CHECK_PATH_LENGTH(path) \ -do { \ - if (strlen(path) > GBAGFX_MAX_PATH) \ - FATAL_ERROR("\"%s\" is too long a path.\n", path); \ -} while (0) - #endif // GLOBAL_H diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 472a87f79..56a1c2c7b 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -9,25 +9,18 @@ #include "convert_png.h" #include "jasc_pal.h" #include "lz.h" +#include "font.h" -void ConvertToPng(char *imageFilePath, char *outputFilePath, char *paletteFilePath, bool isObject, int width) +struct CommandHandler +{ + const char *inputFileExtension; + const char *outputFileExtension; + void(*function)(char *inputPath, char *outputPath, int argc, char **argv); +}; + +void ConvertGbaToPng(char *inputPath, char *outputPath, int width, int bitDepth, char *paletteFilePath, bool hasTransparency) { struct Image image; - int bitDepth = 0; - - char *extension = GetFileExtension(imageFilePath); - - if (extension == NULL) - FATAL_ERROR("\"%s\" has no file extension.\n", imageFilePath); - - if (strcmp(extension, "1bpp") == 0) - bitDepth = 1; - else if (strcmp(extension, "4bpp") == 0) - bitDepth = 4; - else if (strcmp(extension, "8bpp") == 0) - bitDepth = 8; - else - FATAL_ERROR("Unexpected file extension \"%s\". Expected \"1bpp\", \"4bpp\", or \"8bpp\".\n", extension); if (paletteFilePath != NULL) { ReadGbaPalette(paletteFilePath, &image.palette); @@ -36,249 +29,249 @@ void ConvertToPng(char *imageFilePath, char *outputFilePath, char *paletteFilePa image.hasPalette = false; } - ReadImage(imageFilePath, width, bitDepth, &image, !image.hasPalette); + ReadImage(inputPath, width, bitDepth, &image, !image.hasPalette); - image.isObject = isObject; + image.hasTransparency = hasTransparency; - if (outputFilePath == NULL) { - ChangeFileExtension(imageFilePath, "png"); - outputFilePath = imageFilePath; - } - - WritePng(outputFilePath, &image); + WritePng(outputPath, &image); FreeImage(&image); } -void ConvertFromPng(char *imageFilePath, char *outputFilePath, int numTiles, int bitDepth) +void ConvertPngToGba(char *inputPath, char *outputPath, int numTiles, int bitDepth) { struct Image image; image.bitDepth = bitDepth; - ExpectFileExtension(imageFilePath, "png"); + ReadPng(inputPath, &image); - ReadPng(imageFilePath, &image); - - if (outputFilePath == NULL) { - char newExtension[5]; - snprintf(newExtension, 5, "%dbpp", bitDepth); - ChangeFileExtension(imageFilePath, newExtension); - outputFilePath = imageFilePath; - } - - WriteImage(outputFilePath, numTiles, bitDepth, &image, !image.hasPalette); + WriteImage(outputPath, numTiles, bitDepth, &image, !image.hasPalette); FreeImage(&image); } -void ConvertToJascPalette(char *paletteFilePath) +void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **argv) +{ + char *inputFileExtension = GetFileExtension(inputPath); + int bitDepth = inputFileExtension[0] - '0'; + char *paletteFilePath; + bool hasPalette = false; + bool hasTransparency = false; + int width = 1; + + for (int i = 3; i < argc; i++) { + char *option = argv[i]; + + if (strcmp(option, "-palette") == 0) { + if (i + 1 >= argc) + FATAL_ERROR("No palette file path following \"-palette\".\n"); + + i++; + + paletteFilePath = argv[i]; + + hasPalette = true; + } else if (strcmp(option, "-object") == 0) { + hasTransparency = true; + } else if (strcmp(option, "-width") == 0) { + if (i + 1 >= argc) + FATAL_ERROR("No width following \"-width\".\n"); + + i++; + + if (!ParseNumber(argv[i], NULL, 10, &width)) + FATAL_ERROR("Failed to parse width.\n"); + + if (width < 1) + FATAL_ERROR("Width must be positive.\n"); + } else { + FATAL_ERROR("Unrecognized option \"%s\".\n", option); + } + } + + ConvertGbaToPng(inputPath, outputPath, width, bitDepth, hasPalette ? paletteFilePath : NULL, hasTransparency); +} + +void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv) +{ + char *outputFileExtension = GetFileExtension(outputPath); + int bitDepth = outputFileExtension[0] - '0'; + int numTiles = 0; + + for (int i = 3; i < argc; i++) { + char *option = argv[i]; + + if (strcmp(option, "-num_tiles") == 0) { + if (i + 1 >= argc) + FATAL_ERROR("No number of tiles following \"-num_tiles\".\n"); + + i++; + + if (!ParseNumber(argv[i], NULL, 10, &numTiles)) + FATAL_ERROR("Failed to parse number of tiles.\n"); + + if (numTiles < 1) + FATAL_ERROR("Number of tiles must be positive.\n"); + } else { + FATAL_ERROR("Unrecognized option \"%s\".\n", option); + } + } + + ConvertPngToGba(inputPath, outputPath, numTiles, bitDepth); +} + +void HandleGbaToJascPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) { struct Palette palette; - ExpectFileExtension(paletteFilePath, "gbapal"); - - ReadGbaPalette(paletteFilePath, &palette); - - ChangeFileExtension(paletteFilePath, "pal"); - - WriteJascPalette(paletteFilePath, &palette); + ReadGbaPalette(inputPath, &palette); + WriteJascPalette(outputPath, &palette); } -void ConvertFromJascPalette(char *paletteFilePath) +void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) { struct Palette palette; - ExpectFileExtension(paletteFilePath, "pal"); - - ReadJascPalette(paletteFilePath, &palette); - - ChangeFileExtension(paletteFilePath, "gbapal"); - - WriteGbaPalette(paletteFilePath, &palette); + ReadJascPalette(inputPath, &palette); + WriteGbaPalette(outputPath, &palette); } -void LZCompressFile(char *path) +void HandleLatinFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + ReadLatinFont(inputPath, &image); + WritePng(outputPath, &image); + + FreeImage(&image); +} + +void HandlePngToLatinFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + image.bitDepth = 2; + + ReadPng(inputPath, &image); + WriteLatinFont(outputPath, &image); + + FreeImage(&image); +} + +void HandleHalfwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + ReadHalfwidthJapaneseFont(inputPath, &image); + WritePng(outputPath, &image); + + FreeImage(&image); +} + +void HandlePngToHalfwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + image.bitDepth = 2; + + ReadPng(inputPath, &image); + WriteHalfwidthJapaneseFont(outputPath, &image); + + FreeImage(&image); +} + +void HandleFullwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + ReadFullwidthJapaneseFont(inputPath, &image); + WritePng(outputPath, &image); + + FreeImage(&image); +} + +void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + struct Image image; + + image.bitDepth = 2; + + ReadPng(inputPath, &image); + WriteFullwidthJapaneseFont(outputPath, &image); + + FreeImage(&image); +} + +void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) { int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); + unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); int compressedSize; unsigned char *compressedData = LZCompress(buffer, fileSize, &compressedSize); free(buffer); - AddFileExtension(path, "lz"); - - WriteWholeFile(path, compressedData, compressedSize); + WriteWholeFile(outputPath, compressedData, compressedSize); free(compressedData); } -void LZDecompressFile(char *path) +void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) { - ExpectFileExtension(path, "lz"); - int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); + unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); int uncompressedSize; unsigned char *uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize); free(buffer); - RemoveFileExtension(path); - - WriteWholeFile(path, uncompressedData, uncompressedSize); + WriteWholeFile(outputPath, uncompressedData, uncompressedSize); free(uncompressedData); } int main(int argc, char **argv) { - if (argc < 2) - FATAL_ERROR("No args.\n"); + if (argc < 3) + FATAL_ERROR("Usage: gbagfx INPUT_PATH OUTPUT_PATH [options...]\n"); - char *command = argv[1]; + struct CommandHandler handlers[] = + { + { "1bpp", "png", HandleGbaToPngCommand }, + { "4bpp", "png", HandleGbaToPngCommand }, + { "8bpp", "png", HandleGbaToPngCommand }, + { "png", "1bpp", HandlePngToGbaCommand }, + { "png", "4bpp", HandlePngToGbaCommand }, + { "png", "8bpp", HandlePngToGbaCommand }, + { "gbapal", "pal", HandleGbaToJascPaletteCommand }, + { "pal", "gbapal", HandleJascToGbaPaletteCommand }, + { "latfont", "png", HandleLatinFontToPngCommand }, + { "png", "latfont", HandlePngToLatinFontCommand }, + { "hwjpnfont", "png", HandleHalfwidthJapaneseFontToPngCommand }, + { "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand }, + { "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand }, + { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand }, + { NULL, "lz", HandleLZCompressCommand }, + { "lz", NULL, HandleLZDecompressCommand }, + { NULL, NULL, NULL } + }; - if (strcmp(command, "png") == 0) { - if (argc < 3) - FATAL_ERROR("No image file path arg.\n"); + char *inputPath = argv[1]; + char *outputPath = argv[2]; - CHECK_PATH_LENGTH(argv[2]); + for (int i = 0; handlers[i].function != NULL; i++) { + char *inputFileExtension = GetFileExtension(inputPath); + char *outputFileExtension = GetFileExtension(outputPath); - char imageFilePath[GBAGFX_MAX_PATH + 1]; - strcpy(imageFilePath, argv[2]); - - char *outputFilePath = NULL; - char paletteFilePath[GBAGFX_MAX_PATH + 1]; - bool hasPalette = false; - bool isObject = false; - int width = 1; - - for (int i = 3; i < argc; i++) { - char *option = argv[i]; - - if (strcmp(option, "-output") == 0) { - if (i + 1 >= argc) - FATAL_ERROR("No output file path following \"-output\".\n"); - - i++; - - outputFilePath = argv[i]; - } else if (strcmp(option, "-palette") == 0) { - if (i + 1 >= argc) - FATAL_ERROR("No palette file path following \"-palette\".\n"); - - i++; - - CHECK_PATH_LENGTH(argv[i]); - - strcpy(paletteFilePath, argv[i]); - - hasPalette = true; - } else if (strcmp(option, "-object") == 0) { - isObject = true; - } else if (strcmp(option, "-width") == 0) { - if (i + 1 >= argc) - FATAL_ERROR("No width following \"-width\".\n"); - - i++; - - if (!ParseNumber(argv[i], NULL, 10, &width)) - FATAL_ERROR("Failed to parse width.\n"); - - if (width < 1) - FATAL_ERROR("Width must be positive.\n"); - } else { - FATAL_ERROR("Unrecognized option \"%s\".\n", option); - } + if ((handlers[i].inputFileExtension == NULL || strcmp(handlers[i].inputFileExtension, inputFileExtension) == 0) + && (handlers[i].outputFileExtension == NULL || strcmp(handlers[i].outputFileExtension, outputFileExtension) == 0)) { + handlers[i].function(inputPath, outputPath, argc, argv); + return 0; } - - ConvertToPng(imageFilePath, outputFilePath, hasPalette ? paletteFilePath : NULL, isObject, width); - } else if (strcmp(command, "1bpp") == 0 || strcmp(command, "4bpp") == 0 || strcmp(command, "8bpp") == 0) { - if (argc < 3) - FATAL_ERROR("No image file path arg.\n"); - - CHECK_PATH_LENGTH(argv[2]); - - char imageFilePath[GBAGFX_MAX_PATH + 1]; - strcpy(imageFilePath, argv[2]); - - char *outputFilePath = NULL; - int numTiles = 0; - int bitDepth = command[0] - '0'; - - for (int i = 3; i < argc; i++) { - char *option = argv[i]; - - if (strcmp(option, "-output") == 0) { - if (i + 1 >= argc) - FATAL_ERROR("No output file path following \"-output\".\n"); - - i++; - - outputFilePath = argv[i]; - } else if (strcmp(option, "-num_tiles") == 0) { - if (i + 1 >= argc) - FATAL_ERROR("No number of tiles following \"-num_tiles\".\n"); - - i++; - - if (!ParseNumber(argv[i], NULL, 10, &numTiles)) - FATAL_ERROR("Failed to parse number of tiles.\n"); - - if (numTiles < 1) - FATAL_ERROR("Number of tiles must be positive.\n"); - } else { - FATAL_ERROR("Unrecognized option \"%s\".\n", option); - } - } - - ConvertFromPng(imageFilePath, outputFilePath, numTiles, bitDepth); - } else if (strcmp(command, "pal") == 0) { - if (argc < 3) - FATAL_ERROR("No palette file path arg.\n"); - - CHECK_PATH_LENGTH(argv[2]); - - char paletteFilePath[GBAGFX_MAX_PATH + 1]; - strcpy(paletteFilePath, argv[2]); - - ConvertToJascPalette(paletteFilePath); - } else if (strcmp(command, "gbapal") == 0) { - if (argc < 3) - FATAL_ERROR("No palette file path arg.\n"); - - CHECK_PATH_LENGTH(argv[2]); - - char paletteFilePath[GBAGFX_MAX_PATH + 1]; - strcpy(paletteFilePath, argv[2]); - - ConvertFromJascPalette(paletteFilePath); - } else if (strcmp(command, "lz") == 0) { - if (argc < 3) - FATAL_ERROR("No file path arg.\n"); - - CHECK_PATH_LENGTH(argv[2]); - - char path[GBAGFX_MAX_PATH + 1]; - strcpy(path, argv[2]); - - LZCompressFile(path); - } else if (strcmp(command, "unlz") == 0) { - if (argc < 3) - FATAL_ERROR("No file path arg.\n"); - - CHECK_PATH_LENGTH(argv[2]); - - char path[GBAGFX_MAX_PATH + 1]; - strcpy(path, argv[2]); - - LZDecompressFile(path); - } else { - FATAL_ERROR("Unrecognized command \"%s\".\n", command); } - return 0; + FATAL_ERROR("Don't know how to convert \"%s\" to \"%s\".\n", inputPath, outputPath); } diff --git a/tools/gbagfx/util.c b/tools/gbagfx/util.c index 180b93d9b..5af380184 100644 --- a/tools/gbagfx/util.c +++ b/tools/gbagfx/util.c @@ -58,48 +58,6 @@ char *GetFileExtension(char *path) return extension; } -void ExpectFileExtension(char *path, char *expectedExtension) -{ - char *extension = GetFileExtension(path); - - if (extension == NULL) - FATAL_ERROR("\"%s\" has no file extension.\n", path); - - if (strcmp(extension, expectedExtension) != 0) - FATAL_ERROR("Unexpected file extension \"%s\". Expected \"%s\".\n", extension, expectedExtension); -} - -void AddFileExtension(char *path, char *extension) -{ - int pathLength = strlen(path); - int extensionLength = strlen(extension); - - if (pathLength + 1 + extensionLength > GBAGFX_MAX_PATH) - FATAL_ERROR("\"%s\" is too long a path to add the extension \"%s\".\n", path, extension); - - path[pathLength] = '.'; - memcpy(path + pathLength + 1, extension, extensionLength); - path[pathLength + 1 + extensionLength] = 0; -} - -void RemoveFileExtension(char *path) -{ - char *extension = GetFileExtension(path); - - if (extension == NULL) - FATAL_ERROR("\"%s\" doesn't have a file extension.\n", path); - - extension--; - - *extension = 0; -} - -void ChangeFileExtension(char *path, char *extension) -{ - RemoveFileExtension(path); - AddFileExtension(path, extension); -} - unsigned char *ReadWholeFile(char *path, int *size) { FILE *fp = fopen(path, "rb"); diff --git a/tools/gbagfx/util.h b/tools/gbagfx/util.h index ec81471c0..cb26a31ef 100644 --- a/tools/gbagfx/util.h +++ b/tools/gbagfx/util.h @@ -7,10 +7,6 @@ bool ParseNumber(char *s, char **end, int radix, int *intValue); char *GetFileExtension(char *path); -void ExpectFileExtension(char *path, char *expectedExtension); -void AddFileExtension(char *path, char *extension); -void RemoveFileExtension(char *path); -void ChangeFileExtension(char *path, char *extension); unsigned char *ReadWholeFile(char *path, int *size); void WriteWholeFile(char *path, void *buffer, int bufferSize);