Merge pull request #296 from yenatch/gfx-script

Add a script to convert project-specific graphics.
This commit is contained in:
yenatch 2015-07-22 02:50:51 -04:00
commit dc620c08ee
655 changed files with 802 additions and 701 deletions

View File

@ -7,7 +7,7 @@ MD5 := md5sum -c --quiet
.SECONDEXPANSION:
poketools := extras/pokemontools
gfx := $(PYTHON) $(poketools)/gfx.py
gfx := $(PYTHON) gfx.py
includes := $(PYTHON) $(poketools)/scan_includes.py
@ -79,12 +79,13 @@ pngs:
find . -iname "*.[12]bpp" -exec touch {} +
find . -iname "*.lz" -exec touch {} +
%.2bpp: %.png ; @$(gfx) 2bpp $<
%.1bpp: %.png ; @$(gfx) 1bpp $<
%.lz: % ; @$(gfx) lz $<
%.2bpp: %.png ; $(gfx) 2bpp $<
%.1bpp: %.png ; $(gfx) 1bpp $<
%.lz: % ; $(gfx) lz $<
%.pal: ;
%.pal: %.2bpp ;
gfx/pics/%/normal.pal gfx/pics/%/bitmask.asm gfx/pics/%/frames.asm: gfx/pics/%/front.2bpp ;
%.bin: ;
%.blk: ;
%.tilemap: ;

View File

@ -792,13 +792,13 @@ Function109c1c: ; 109c1c (42:5c1c)
; 109c24 (42:5c24)
CreditsBorderGFX: INCBIN "gfx/credits/border.w72.2bpp"
CreditsBorderGFX: INCBIN "gfx/credits/border.2bpp"
CreditsMonsGFX:
CreditsPichuGFX: INCBIN "gfx/credits/pichu.w32.2bpp"
CreditsSmoochumGFX: INCBIN "gfx/credits/smoochum.w32.2bpp"
CreditsDittoGFX: INCBIN "gfx/credits/ditto.w32.2bpp"
CreditsIgglybuffGFX: INCBIN "gfx/credits/igglybuff.w32.2bpp"
CreditsPichuGFX: INCBIN "gfx/credits/pichu.2bpp"
CreditsSmoochumGFX: INCBIN "gfx/credits/smoochum.2bpp"
CreditsDittoGFX: INCBIN "gfx/credits/ditto.2bpp"
CreditsIgglybuffGFX: INCBIN "gfx/credits/igglybuff.2bpp"
CreditsScript: ; 10acb4

View File

@ -1690,4 +1690,4 @@ PackMenuGFX:
INCBIN "gfx/misc/pack_menu.2bpp"
PackGFX:
INCBIN "gfx/misc/pack.w40.2bpp"
INCBIN "gfx/misc/pack.2bpp"

2
extras

@ -1 +1 @@
Subproject commit bf76a6b84a2f57edbcd01d6b2841cb813b2afce4
Subproject commit 5ad74a89aee5181b30eed0b11ef75c1b01ed41eb

102
gfx.py Normal file
View File

@ -0,0 +1,102 @@
"""Supplementary scripts for graphics conversion."""
import os
import argparse
from extras.pokemontools import gfx, lz
# Graphics with inverted tilemaps that aren't covered by filepath_rules.
pics = [
'gfx/shrink1',
'gfx/shrink2',
]
def filepath_rules(filepath):
"""Infer attributes of certain graphics by their location in the filesystem."""
args = {}
filedir, filename = os.path.split(filepath)
name, ext = os.path.splitext(filename)
if 'gfx/pics/' in filedir:
if name == 'front':
args['pal_file'] = os.path.join(filedir, 'normal.pal')
args['pic'] = True
args['animate'] = True
elif name == 'back':
args['pal_file'] = os.path.join(filedir, 'shiny.pal')
args['pic'] = True
elif 'gfx/trainers' in filedir:
args['pic'] = True
elif os.path.join(filedir, name) in pics:
args['pic'] = True
if args.get('pal_file'):
args['palout'] = args['pal_file']
if args.get('pic'):
if ext == '.png':
w, h = gfx.png.Reader(filepath).asRGBA8()[:2]
w = min(w/8, h/8)
args['pic_dimensions'] = w, w
return args
def to_1bpp(filename, **kwargs):
_, ext = os.path.splitext(filename)
if ext == '.1bpp': pass
elif ext == '.2bpp': gfx.export_2bpp_to_1bpp(filename, **kwargs)
elif ext == '.png': gfx.export_png_to_1bpp(filename, **kwargs)
def to_2bpp(filename, **kwargs):
_, ext = os.path.splitext(filename)
if ext == '.1bpp': gfx.export_1bpp_to_2bpp(filename, **kwargs)
elif ext == '.2bpp': pass
elif ext == '.png': gfx.export_png_to_2bpp(filename, **kwargs)
def to_png(filename, **kwargs):
_, ext = os.path.splitext(filename)
if ext == '.1bpp': gfx.export_1bpp_to_png(filename, **kwargs)
elif ext == '.2bpp': gfx.export_2bpp_to_png(filename, **kwargs)
elif ext == '.png': pass
def compress(filename, **kwargs):
data = open(filename, 'rb').read()
lz_data = lz.Compressed(data).output
open(filename + '.lz', 'wb').write(bytearray(lz_data))
def decompress(filename, **kwargs):
lz_data = open(filename, 'rb').read()
data = lz.Decompressed(lz_data).output
name, ext = os.path.splitext(filename)
open(name, 'wb').write(bytearray(data))
methods = {
'2bpp': to_2bpp,
'1bpp': to_1bpp,
'png': to_png,
'lz': compress,
'unlz': decompress,
}
def main(method_name, filenames=None):
if filenames is None: filenames = []
for filename in filenames:
args = filepath_rules(filename)
method = methods.get(method_name)
if method:
method(filename, **args)
def get_args():
ap = argparse.ArgumentParser()
ap.add_argument('method_name')
ap.add_argument('filenames', nargs='*')
args = ap.parse_args()
return args
if __name__ == '__main__':
main(**get_args().__dict__)

BIN
gfx/credits/border.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

BIN
gfx/credits/ditto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

BIN
gfx/credits/igglybuff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

BIN
gfx/credits/pichu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

BIN
gfx/credits/smoochum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

BIN
gfx/credits/theend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

BIN
gfx/misc/badges.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

BIN
gfx/misc/font.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Some files were not shown because too many files have changed in this diff Show More