diff options
-rw-r--r-- | gfx/pokemon/alakazam/back.png (renamed from gfx/pokemon/alakazam/back_gold.png) | bin | 532 -> 532 bytes | |||
-rw-r--r-- | gfx/pokemon/alakazam/back_silver.png | bin | 532 -> 0 bytes | |||
-rw-r--r-- | gfx/pokemon/hitmontop/back.png (renamed from gfx/pokemon/hitmontop/back_gold.png) | bin | 538 -> 538 bytes | |||
-rw-r--r-- | gfx/pokemon/hitmontop/back_silver.png | bin | 538 -> 0 bytes | |||
-rw-r--r-- | gfx/pokemon/miltank/back.png (renamed from gfx/pokemon/miltank/back_gold.png) | bin | 462 -> 462 bytes | |||
-rw-r--r-- | gfx/pokemon/miltank/back_silver.png | bin | 462 -> 0 bytes | |||
-rw-r--r-- | tools/gfx.py | 63 | ||||
-rw-r--r-- | tools/pokemontools/gfx.py | 56 |
8 files changed, 62 insertions, 57 deletions
diff --git a/gfx/pokemon/alakazam/back_gold.png b/gfx/pokemon/alakazam/back.png Binary files differindex c4aa120e..c4aa120e 100644 --- a/gfx/pokemon/alakazam/back_gold.png +++ b/gfx/pokemon/alakazam/back.png diff --git a/gfx/pokemon/alakazam/back_silver.png b/gfx/pokemon/alakazam/back_silver.png Binary files differdeleted file mode 100644 index c4aa120e..00000000 --- a/gfx/pokemon/alakazam/back_silver.png +++ /dev/null diff --git a/gfx/pokemon/hitmontop/back_gold.png b/gfx/pokemon/hitmontop/back.png Binary files differindex 92a71342..92a71342 100644 --- a/gfx/pokemon/hitmontop/back_gold.png +++ b/gfx/pokemon/hitmontop/back.png diff --git a/gfx/pokemon/hitmontop/back_silver.png b/gfx/pokemon/hitmontop/back_silver.png Binary files differdeleted file mode 100644 index 92a71342..00000000 --- a/gfx/pokemon/hitmontop/back_silver.png +++ /dev/null diff --git a/gfx/pokemon/miltank/back_gold.png b/gfx/pokemon/miltank/back.png Binary files differindex aeed8f47..aeed8f47 100644 --- a/gfx/pokemon/miltank/back_gold.png +++ b/gfx/pokemon/miltank/back.png diff --git a/gfx/pokemon/miltank/back_silver.png b/gfx/pokemon/miltank/back_silver.png Binary files differdeleted file mode 100644 index aeed8f47..00000000 --- a/gfx/pokemon/miltank/back_silver.png +++ /dev/null diff --git a/tools/gfx.py b/tools/gfx.py index 2e2703be..73f3dcb6 100644 --- a/tools/gfx.py +++ b/tools/gfx.py @@ -51,6 +51,16 @@ def get_pokemon_dimensions(name): except: return 7, 7 +mail_px8 = ['eon_mail_border_2', 'grass', 'lovely_mail_border', 'lovely_mail_underline', + 'morph_mail_border', 'morph_mail_divider', 'portrail_mail_border', + 'portraitmail_border', 'portraitmail_underline', 'small_heart', 'small_note', + 'small_pokeball', 'small_triangle', 'wave'] +mail_px16 = ['eon_mail_border_1', 'flower_1', 'flower_2', 'large_circle', 'large_heart', + 'large_pokeball', 'large_triangle', 'morph_mail_corner','music_mail_border', 'oddish', + 'sentret', 'unused_grass'] +mail_px24 = ['cloud', 'ditto', 'dratini', 'eevee', 'lapras', 'mew', 'natu', 'poliwag'] +mail_border_stretch = ['surf_mail_border', 'flower_mail_border', 'litebluemail_border'] + def filepath_rules(filepath): """Infer attributes of certain graphics by their location in the filesystem.""" args = {} @@ -88,53 +98,37 @@ def filepath_rules(filepath): args['pic'] = True elif 'gfx/mail' in filedir: - px8 = ['eon_mail_border_2', 'grass', 'lovely_mail_border', 'lovely_mail_underline', - 'morph_mail_border', 'morph_mail_divider', 'portrail_mail_border', - 'portraitmail_border', 'portraitmail_underline', 'small_heart', 'small_note', - 'small_pokeball', 'small_triangle', 'wave'] - px16 = ['eon_mail_border_1', 'flower_1', 'flower_2', 'large_circle', 'large_heart', - 'large_pokeball', 'large_triangle', 'morph_mail_corner', - 'music_mail_border', 'oddish', 'sentret', 'unused_grass'] - px24 = ['cloud', 'ditto', 'dratini', 'eevee', 'lapras', - 'mew', 'natu', 'poliwag'] - if name in px8: + if name in mail_px8: args['width'] = 8 - elif name in px16: + elif name in mail_px16: args['width'] = 16 - elif name in px24: + elif name in mail_px24: args['width'] = 24 - - elif name == 'dragonite': - args['width'] = 56 - args['rows'] = [(0, 6), (1, 6), (2, 6)] - + elif name in mail_border_stretch: + args['width'] = 24 + args['pad_indices'] = [4] elif name == 'large_note': args['width'] = 16 args['rows'] = [(1, 1), (0, 2)] - - elif name in ['surf_mail_border', 'flower_mail_border', 'litebluemail_border']: - args['width'] = 24 - args['whitespace'] = [4] + elif name == 'dragonite': + args['width'] = 56 + args['rows'] = [(0, 6), (1, 6), (2, 6)] elif 'gfx/pack' in filedir: if name == 'pack': args['width'] = 40 - elif name == 'pack_menu': args['width'] = 128 elif 'gfx/intro' in filedir: - if name == 'copyright': - args['width'] = 240 - - elif name == 'gamefreak_presents': - args['width'] = 104 - + if name == 'logo_star': + args['width'] = 8 elif name in ['gamefreak_logo', 'logo_sparkle']: args['width'] = 24 - - elif name == 'logo_star': - args['width'] = 8 + elif name == 'gamefreak_presents': + args['width'] = 104 + elif name == 'copyright': + args['width'] = 240 elif 'gfx/naming_screen' in filedir: args['width'] = 8 @@ -206,7 +200,12 @@ def to_2bpp(filename, **kwargs): def to_png(filename, **kwargs): name, 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 == '.2bpp': + basedir, basename = os.path.split(filename) + name, ext = os.path.splitext(basename) + if name in ['back_gold', 'back_silver']: + kwargs['fileout'] = os.path.join(basedir, 'back.png') + gfx.export_2bpp_to_png(filename, **kwargs) elif ext == '.png': pass elif ext == '.lz': decompress(filename, **kwargs) diff --git a/tools/pokemontools/gfx.py b/tools/pokemontools/gfx.py index 078f44f3..e6c9989d 100644 --- a/tools/pokemontools/gfx.py +++ b/tools/pokemontools/gfx.py @@ -389,8 +389,8 @@ def export_2bpp_to_png(filein, fileout=None, pal_file=None, height=0, width=0, t 'pal_file': pal_file, 'tile_padding': tile_padding, 'pic_dimensions': pic_dimensions, - 'rows': kwargs.get('rows', None), - 'whitespace': kwargs.get('whitespace', None) + 'pad_indices': kwargs.get('pad_indices', None), + 'rows': kwargs.get('rows', None) } arguments.update(read_filename_arguments(filein)) @@ -428,8 +428,8 @@ def convert_2bpp_to_png(image, **kwargs): pic_dimensions = kwargs.get('pic_dimensions', None) pal_file = kwargs.get('pal_file', None) interleave = kwargs.get('interleave', False) + pad_indices = kwargs.get('pad_indices', None) rows = kwargs.get('rows', None) - whitespace = kwargs.get('whitespace', None) # Width must be specified to interleave. if interleave and width: @@ -465,43 +465,49 @@ def convert_2bpp_to_png(image, **kwargs): more_tile_padding = (tile_width - (tile_length(image) % tile_width or tile_width)) image += pad_color * 0x10 * more_tile_padding + # Manually define at which tile indices padding tiles should be inserted + elif width and pad_indices: + padding = pad_color * 0x10 + cur_offset = 0 + cur_idx = 0 + for idx in pad_indices: + next_offset = cur_offset + 0x10 * (idx - cur_idx) + image = image[cur_offset:next_offset] + padding + image[next_offset:] + cur_offset = next_offset + 0x10 + cur_idx = idx + + # Define width in pixels, and an array of (left_offset, tile_width) pairs elif width and rows: newimage = bytearray([]) - padding = bytearray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) + padding = pad_color * 0x10 height = len(rows) * 8 cur_index = 0 - for offset, tile_width in rows: - for x in range(0, offset): - newimage += padding - next_index = min(len(image),cur_index+ 0x10*tile_width) + for left_offset, tile_width in rows: + # add padding if the row is offset from the leftmost tile + newimage += padding * left_offset + + # add number of tiles to place horizontally, from base image + next_index = min(len(image), cur_index + 0x10 * tile_width) newimage += image[cur_index:next_index] cur_index = next_index - row_padding = max(0, width//8 - offset - tile_width) - for x in range(0, row_padding): - newimage += padding - image = newimage - elif width and whitespace: - padding = bytearray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) - cur_offset = 0 - cur_idx = 0 - for idx in whitespace: - next_offset = cur_offset + 0x10*(idx-cur_idx) - image = image[cur_offset:next_offset] + padding + image[next_offset:] - cur_offset = next_offset + 0x10 - cur_idx = idx + # add padding if there are more tiles in the row + right_offset = max(0, width//8 - left_offset - tile_width) + newimage += padding * right_offset + + image = newimage elif width and not height: tile_width = width // 8 more_tile_padding = (tile_width - (tile_length(image) % tile_width or tile_width)) image += pad_color * 0x10 * more_tile_padding - height = px_length(image) / width + height = px_length(image) // width elif height and not width: tile_height = height // 8 more_tile_padding = (tile_height - (tile_length(image) % tile_height or tile_height)) image += pad_color * 0x10 * more_tile_padding - width = px_length(image) / height + width = px_length(image) // height # at least one dimension should be given if width * height != px_length(image): @@ -510,12 +516,12 @@ def convert_2bpp_to_png(image, **kwargs): # Height need not be divisible by 8, but width must. # See pokered gfx/minimize_pic.1bpp. for w in range(8, px_length(image) // 2 + 1, 8): - h = px_length(image) / w + h = px_length(image) // w if w * h == px_length(image): matches += [(w, h)] # go for the most square image if len(matches): - width, height = sorted(matches, key= lambda w_h: (w_h[1] % 8 != 0, w_h[1] + w_h[0]))[0] # favor height + width, height = sorted(matches, key=lambda w_h: (w_h[1] % 8 != 0, w_h[1] + w_h[0]))[0] # favor height else: raise Exception('Image can\'t be divided into tiles ({} px)!'.format(px_length(image))) |