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 *.8bpp
*.gbapal *.gbapal
*.lz *.lz
*.latfont
*.hwjpnfont
*.fwjpnfont
pokeas pokeas
pokeld pokeld
pokeobjcopy pokeobjcopy

View File

@ -13,12 +13,7 @@ SHA1 := sha1sum -c
.PHONY: rom tools gbagfx scaninc clean compare .PHONY: rom tools gbagfx scaninc clean compare
gfx := tools/gbagfx/gbagfx gfx := @tools/gbagfx/gbagfx
1bpp := @$(gfx) 1bpp
4bpp := @$(gfx) 4bpp
8bpp := @$(gfx) 8bpp
gbapal := @$(gfx) gbapal
lz := @$(gfx) lz
scaninc := tools/scaninc/scaninc scaninc := tools/scaninc/scaninc
objs = asm/emerald.o objs = asm/emerald.o
@ -52,11 +47,11 @@ include graphics_file_rules.mk
%.png: ; %.png: ;
%.pal: ; %.pal: ;
%.1bpp: %.png ; $(1bpp) $< %.1bpp: %.png ; $(gfx) $< $@
%.4bpp: %.png ; $(4bpp) $< %.4bpp: %.png ; $(gfx) $< $@
%.8bpp: %.png ; $(8bpp) $< %.8bpp: %.png ; $(gfx) $< $@
%.gbapal: %.pal ; $(gbapal) $< %.gbapal: %.pal ; $(gfx) $< $@
%.lz: % ; $(lz) $< %.lz: % ; $(gfx) $< $@
%.o: %.s $$($$@_deps) %.o: %.s $$($$@_deps)
$(AS) $(ASFLAGS) -o $@ $< $(AS) $(ASFLAGS) -o $@ $<

View File

@ -124,7 +124,7 @@ gMenuCursorDimensions: ; 82EA608
.byte 0, 0 .byte 0, 0
gFont9JapaneseGlyphs: ; 82EA61C 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 ; Unreferenced data. This also comes before the gpu_bg.s data in Ruby and seems
; to be unreferenced there too. ; to be unreferenced there too.
@ -11093,7 +11093,7 @@ gUnknown_08616124: ; 8616124
.incbin "base_emerald.gba", 0x616124, 0x4 .incbin "base_emerald.gba", 0x616124, 0x4
gFont6BrailleGlyphs: ; 8616128 gFont6BrailleGlyphs: ; 8616128
.incbin "base_emerald.gba", 0x616128, 0x1000 .incbin "data/graphics/fonts/font6.fwjpnfont"
gUnknown_08617128: ; 8617128 gUnknown_08617128: ; 8617128
.incbin "base_emerald.gba", 0x617128, 0x48 .incbin "base_emerald.gba", 0x617128, 0x48
@ -12032,58 +12032,58 @@ gUnknown_0862B7FC: ; 862B7FC
.incbin "base_emerald.gba", 0x62b7fc, 0x2e8 .incbin "base_emerald.gba", 0x62b7fc, 0x2e8
gFont8LatinGlyphs: ; 862BAE4 gFont8LatinGlyphs: ; 862BAE4
.incbin "base_emerald.gba", 0x62bae4, 0x8000 .incbin "data/graphics/fonts/font8.latfont"
gFont8LatinGlyphWidths: ; 8633AE4 gFont8LatinGlyphWidths: ; 8633AE4
.incbin "base_emerald.gba", 0x633ae4, 0x200 .include "data/graphics/fonts/font8_latin_widths.s"
gFont0LatinGlyphs: ; 8633CE4 gFont0LatinGlyphs: ; 8633CE4
.incbin "base_emerald.gba", 0x633ce4, 0x8000 .incbin "data/graphics/fonts/font0.latfont"
gFont0LatinGlyphWidths: ; 863BCE4 gFont0LatinGlyphWidths: ; 863BCE4
.incbin "base_emerald.gba", 0x63bce4, 0x200 .include "data/graphics/fonts/font0_latin_widths.s"
gFont7LatinGlyphs: ; 863BEE4 gFont7LatinGlyphs: ; 863BEE4
.incbin "base_emerald.gba", 0x63bee4, 0x8000 .incbin "data/graphics/fonts/font7.latfont"
gFont7LatinGlyphWidths: ; 8643EE4 gFont7LatinGlyphWidths: ; 8643EE4
.incbin "base_emerald.gba", 0x643ee4, 0x200 .include "data/graphics/fonts/font7_latin_widths.s"
gFont2LatinGlyphs: ; 86440E4 gFont2LatinGlyphs: ; 86440E4
.incbin "base_emerald.gba", 0x6440e4, 0x8000 .incbin "data/graphics/fonts/font2.latfont"
gFont2LatinGlyphWidths: ; 864C0E4 gFont2LatinGlyphWidths: ; 864C0E4
.incbin "base_emerald.gba", 0x64c0e4, 0x200 .include "data/graphics/fonts/font2_latin_widths.s"
gFont1LatinGlyphs: ; 864C2E4 gFont1LatinGlyphs: ; 864C2E4
.incbin "base_emerald.gba", 0x64c2e4, 0x8000 .incbin "data/graphics/fonts/font1.latfont"
gFont1LatinGlyphWidths: ; 86542E4 gFont1LatinGlyphWidths: ; 86542E4
.incbin "base_emerald.gba", 0x6542e4, 0x200 .include "data/graphics/fonts/font1_latin_widths.s"
gFont0JapaneseGlyphs: ; 86544E4 gFont0JapaneseGlyphs: ; 86544E4
.incbin "base_emerald.gba", 0x6544e4, 0x4000 .incbin "data/graphics/fonts/font0.hwjpnfont"
gFont1JapaneseGlyphs: ; 86584E4 gFont1JapaneseGlyphs: ; 86584E4
.incbin "base_emerald.gba", 0x6584e4, 0x4000 .incbin "data/graphics/fonts/font1.hwjpnfont"
gUnusedFullwidthJapaneseFontGlyphs: ; 865C4E4 gUnusedFullwidthJapaneseFontGlyphs: ; 865C4E4
.incbin "base_emerald.gba", 0x65c4e4, 0x8000 .incbin "data/graphics/fonts/unused_1.fwjpnfont"
gUnusedFullwidthJapaneseFontGlyphWidths: ; 86644E4 gUnusedFullwidthJapaneseFontGlyphWidths: ; 86644E4
.incbin "base_emerald.gba", 0x6644e4, 0x200 .include "data/graphics/fonts/unused_japanese_font_1_widths.s"
gUnusedFullwidthJapaneseFont2Glyphs: ; 86646E4 gUnusedFullwidthJapaneseFont2Glyphs: ; 86646E4
.incbin "base_emerald.gba", 0x6646e4, 0x8000 .incbin "data/graphics/fonts/unused_2.fwjpnfont"
gUnusedFullwidthJapaneseFont2GlyphWidths: ; 866C6E4 gUnusedFullwidthJapaneseFont2GlyphWidths: ; 866C6E4
.incbin "base_emerald.gba", 0x66c6e4, 0x200 .include "data/graphics/fonts/unused_japanese_font_2_widths.s"
gFont2JapaneseGlyphs: ; 866C8E4 gFont2JapaneseGlyphs: ; 866C8E4
.incbin "base_emerald.gba", 0x66c8e4, 0x8000 .incbin "data/graphics/fonts/font2.fwjpnfont"
gFont2JapaneseGlyphWidths: ; 86748E4 gFont2JapaneseGlyphWidths: ; 86748E4
.incbin "base_emerald.gba", 0x6748e4, 0x200 .include "data/graphics/fonts/font2_japanese_widths.s"
gUnknown_08674AE4: ; 8674AE4 gUnknown_08674AE4: ; 8674AE4
.incbin "base_emerald.gba", 0x674ae4, 0x32 .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 := data/graphics/tilesets
$(tilesetdir)/secondary/petalburg/tiles.4bpp: $(tilesetdir)/secondary/petalburg/tiles.png $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(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 $(tilesetdir)/secondary/island_harbor/tiles.4bpp: $(tilesetdir)/secondary/island_harbor/tiles.png
$(4bpp) $< -num_tiles 503 $(gfx) $< $@ -num_tiles 503
$(tilesetdir)/secondary/trainer_hill/tiles.4bpp: $(tilesetdir)/secondary/trainer_hill/tiles.png $(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 $(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 $(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 $(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 CC = gcc
CFLAGS = -Wall -std=c11 -O2 CFLAGS = -Wall -Wextra -std=c11 -O2
LIBS = -lz -lpng 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 .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) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS)
clean: clean:

View File

@ -134,7 +134,7 @@ void WritePng(char *path, struct Image *image)
if (image->hasPalette) { if (image->hasPalette) {
SetPngPalette(png_ptr, info_ptr, &image->palette); SetPngPalette(png_ptr, info_ptr, &image->palette);
if (image->isObject) { if (image->hasTransparency) {
png_byte trans = 0; png_byte trans = 0;
png_set_tRNS(png_ptr, info_ptr, &trans, 1, 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; unsigned char *pixels;
bool hasPalette; bool hasPalette;
struct Palette palette; struct Palette palette;
bool isObject; bool hasTransparency;
}; };
void ReadImage(char *path, int tilesWidth, int bitDepth, struct Image *image, bool invertColors); void ReadImage(char *path, int tilesWidth, int bitDepth, struct Image *image, bool invertColors);

View File

@ -14,6 +14,8 @@ do { \
exit(1); \ exit(1); \
} while (0) } while (0)
#define UNUSED
#else #else
#define FATAL_ERROR(format, ...) \ #define FATAL_ERROR(format, ...) \
@ -22,14 +24,8 @@ do { \
exit(1); \ exit(1); \
} while (0) } while (0)
#define UNUSED __attribute__((__unused__))
#endif // _MSC_VER #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 #endif // GLOBAL_H

View File

@ -9,25 +9,18 @@
#include "convert_png.h" #include "convert_png.h"
#include "jasc_pal.h" #include "jasc_pal.h"
#include "lz.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; 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) { if (paletteFilePath != NULL) {
ReadGbaPalette(paletteFilePath, &image.palette); ReadGbaPalette(paletteFilePath, &image.palette);
@ -36,149 +29,51 @@ void ConvertToPng(char *imageFilePath, char *outputFilePath, char *paletteFilePa
image.hasPalette = false; 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) { WritePng(outputPath, &image);
ChangeFileExtension(imageFilePath, "png");
outputFilePath = imageFilePath;
}
WritePng(outputFilePath, &image);
FreeImage(&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; struct Image image;
image.bitDepth = bitDepth; image.bitDepth = bitDepth;
ExpectFileExtension(imageFilePath, "png"); ReadPng(inputPath, &image);
ReadPng(imageFilePath, &image); WriteImage(outputPath, numTiles, bitDepth, &image, !image.hasPalette);
if (outputFilePath == NULL) {
char newExtension[5];
snprintf(newExtension, 5, "%dbpp", bitDepth);
ChangeFileExtension(imageFilePath, newExtension);
outputFilePath = imageFilePath;
}
WriteImage(outputFilePath, numTiles, bitDepth, &image, !image.hasPalette);
FreeImage(&image); FreeImage(&image);
} }
void ConvertToJascPalette(char *paletteFilePath) void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **argv)
{ {
struct Palette palette; char *inputFileExtension = GetFileExtension(inputPath);
int bitDepth = inputFileExtension[0] - '0';
ExpectFileExtension(paletteFilePath, "gbapal"); char *paletteFilePath;
ReadGbaPalette(paletteFilePath, &palette);
ChangeFileExtension(paletteFilePath, "pal");
WriteJascPalette(paletteFilePath, &palette);
}
void ConvertFromJascPalette(char *paletteFilePath)
{
struct Palette palette;
ExpectFileExtension(paletteFilePath, "pal");
ReadJascPalette(paletteFilePath, &palette);
ChangeFileExtension(paletteFilePath, "gbapal");
WriteGbaPalette(paletteFilePath, &palette);
}
void LZCompressFile(char *path)
{
int fileSize;
unsigned char *buffer = ReadWholeFile(path, &fileSize);
int compressedSize;
unsigned char *compressedData = LZCompress(buffer, fileSize, &compressedSize);
free(buffer);
AddFileExtension(path, "lz");
WriteWholeFile(path, compressedData, compressedSize);
free(compressedData);
}
void LZDecompressFile(char *path)
{
ExpectFileExtension(path, "lz");
int fileSize;
unsigned char *buffer = ReadWholeFile(path, &fileSize);
int uncompressedSize;
unsigned char *uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize);
free(buffer);
RemoveFileExtension(path);
WriteWholeFile(path, uncompressedData, uncompressedSize);
free(uncompressedData);
}
int main(int argc, char **argv)
{
if (argc < 2)
FATAL_ERROR("No args.\n");
char *command = argv[1];
if (strcmp(command, "png") == 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;
char paletteFilePath[GBAGFX_MAX_PATH + 1];
bool hasPalette = false; bool hasPalette = false;
bool isObject = false; bool hasTransparency = false;
int width = 1; int width = 1;
for (int i = 3; i < argc; i++) { for (int i = 3; i < argc; i++) {
char *option = argv[i]; char *option = argv[i];
if (strcmp(option, "-output") == 0) { if (strcmp(option, "-palette") == 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) if (i + 1 >= argc)
FATAL_ERROR("No palette file path following \"-palette\".\n"); FATAL_ERROR("No palette file path following \"-palette\".\n");
i++; i++;
CHECK_PATH_LENGTH(argv[i]); paletteFilePath = argv[i];
strcpy(paletteFilePath, argv[i]);
hasPalette = true; hasPalette = true;
} else if (strcmp(option, "-object") == 0) { } else if (strcmp(option, "-object") == 0) {
isObject = true; hasTransparency = true;
} else if (strcmp(option, "-width") == 0) { } else if (strcmp(option, "-width") == 0) {
if (i + 1 >= argc) if (i + 1 >= argc)
FATAL_ERROR("No width following \"-width\".\n"); FATAL_ERROR("No width following \"-width\".\n");
@ -195,31 +90,19 @@ int main(int argc, char **argv)
} }
} }
ConvertToPng(imageFilePath, outputFilePath, hasPalette ? paletteFilePath : NULL, isObject, width); ConvertGbaToPng(inputPath, outputPath, width, bitDepth, hasPalette ? paletteFilePath : NULL, hasTransparency);
} 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]); void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv)
{
char imageFilePath[GBAGFX_MAX_PATH + 1]; char *outputFileExtension = GetFileExtension(outputPath);
strcpy(imageFilePath, argv[2]); int bitDepth = outputFileExtension[0] - '0';
char *outputFilePath = NULL;
int numTiles = 0; int numTiles = 0;
int bitDepth = command[0] - '0';
for (int i = 3; i < argc; i++) { for (int i = 3; i < argc; i++) {
char *option = argv[i]; char *option = argv[i];
if (strcmp(option, "-output") == 0) { if (strcmp(option, "-num_tiles") == 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) if (i + 1 >= argc)
FATAL_ERROR("No number of tiles following \"-num_tiles\".\n"); FATAL_ERROR("No number of tiles following \"-num_tiles\".\n");
@ -235,50 +118,160 @@ int main(int argc, char **argv)
} }
} }
ConvertFromPng(imageFilePath, outputFilePath, numTiles, bitDepth); ConvertPngToGba(inputPath, outputPath, 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);
} }
void HandleGbaToJascPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
{
struct Palette palette;
ReadGbaPalette(inputPath, &palette);
WriteJascPalette(outputPath, &palette);
}
void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
{
struct Palette palette;
ReadJascPalette(inputPath, &palette);
WriteGbaPalette(outputPath, &palette);
}
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(inputPath, &fileSize);
int compressedSize;
unsigned char *compressedData = LZCompress(buffer, fileSize, &compressedSize);
free(buffer);
WriteWholeFile(outputPath, compressedData, compressedSize);
free(compressedData);
}
void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
{
int fileSize;
unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
int uncompressedSize;
unsigned char *uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize);
free(buffer);
WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
free(uncompressedData);
}
int main(int argc, char **argv)
{
if (argc < 3)
FATAL_ERROR("Usage: gbagfx INPUT_PATH OUTPUT_PATH [options...]\n");
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 }
};
char *inputPath = argv[1];
char *outputPath = argv[2];
for (int i = 0; handlers[i].function != NULL; i++) {
char *inputFileExtension = GetFileExtension(inputPath);
char *outputFileExtension = GetFileExtension(outputPath);
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; 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; 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) unsigned char *ReadWholeFile(char *path, int *size)
{ {
FILE *fp = fopen(path, "rb"); FILE *fp = fopen(path, "rb");

View File

@ -7,10 +7,6 @@
bool ParseNumber(char *s, char **end, int radix, int *intValue); bool ParseNumber(char *s, char **end, int radix, int *intValue);
char *GetFileExtension(char *path); 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); unsigned char *ReadWholeFile(char *path, int *size);
void WriteWholeFile(char *path, void *buffer, int bufferSize); void WriteWholeFile(char *path, void *buffer, int bufferSize);