summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gfx/pokemon/alakazam/back.png (renamed from gfx/pokemon/alakazam/back_gold.png)bin532 -> 532 bytes
-rw-r--r--gfx/pokemon/alakazam/back_silver.pngbin532 -> 0 bytes
-rw-r--r--gfx/pokemon/hitmontop/back.png (renamed from gfx/pokemon/hitmontop/back_gold.png)bin538 -> 538 bytes
-rw-r--r--gfx/pokemon/hitmontop/back_silver.pngbin538 -> 0 bytes
-rw-r--r--gfx/pokemon/miltank/back.png (renamed from gfx/pokemon/miltank/back_gold.png)bin462 -> 462 bytes
-rw-r--r--gfx/pokemon/miltank/back_silver.pngbin462 -> 0 bytes
-rw-r--r--tools/gfx.py63
-rw-r--r--tools/pokemontools/gfx.py56
8 files changed, 62 insertions, 57 deletions
diff --git a/gfx/pokemon/alakazam/back_gold.png b/gfx/pokemon/alakazam/back.png
index c4aa120e..c4aa120e 100644
--- a/gfx/pokemon/alakazam/back_gold.png
+++ b/gfx/pokemon/alakazam/back.png
Binary files differ
diff --git a/gfx/pokemon/alakazam/back_silver.png b/gfx/pokemon/alakazam/back_silver.png
deleted file mode 100644
index c4aa120e..00000000
--- a/gfx/pokemon/alakazam/back_silver.png
+++ /dev/null
Binary files differ
diff --git a/gfx/pokemon/hitmontop/back_gold.png b/gfx/pokemon/hitmontop/back.png
index 92a71342..92a71342 100644
--- a/gfx/pokemon/hitmontop/back_gold.png
+++ b/gfx/pokemon/hitmontop/back.png
Binary files differ
diff --git a/gfx/pokemon/hitmontop/back_silver.png b/gfx/pokemon/hitmontop/back_silver.png
deleted file mode 100644
index 92a71342..00000000
--- a/gfx/pokemon/hitmontop/back_silver.png
+++ /dev/null
Binary files differ
diff --git a/gfx/pokemon/miltank/back_gold.png b/gfx/pokemon/miltank/back.png
index aeed8f47..aeed8f47 100644
--- a/gfx/pokemon/miltank/back_gold.png
+++ b/gfx/pokemon/miltank/back.png
Binary files differ
diff --git a/gfx/pokemon/miltank/back_silver.png b/gfx/pokemon/miltank/back_silver.png
deleted file mode 100644
index aeed8f47..00000000
--- a/gfx/pokemon/miltank/back_silver.png
+++ /dev/null
Binary files differ
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)))