dumped fonts

This commit is contained in:
YamaArashi 2015-11-23 17:44:06 -08:00
parent 22d87f81d7
commit b951fb1113
33 changed files with 4774 additions and 357 deletions

3
.gitignore vendored
View File

@ -7,6 +7,9 @@
*.8bpp
*.gbapal
*.lz
*.latfont
*.hwjpnfont
*.fwjpnfont
pokeas
pokeld
pokeobjcopy

View File

@ -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 $@ $<

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -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

View File

@ -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) $< $@

View File

@ -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:

View File

@ -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);
}

326
tools/gbagfx/font.c Normal file
View File

@ -0,0 +1,326 @@
// Copyright (c) 2015 YamaArashi
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#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);
}

16
tools/gbagfx/font.h Normal file
View File

@ -0,0 +1,16 @@
// Copyright (c) 2015 YamaArashi
#ifndef FONT_H
#define FONT_H
#include<stdbool.h>
#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

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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");

View File

@ -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);