diff options
author | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-08-24 16:05:49 -0700 |
---|---|---|
committer | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-08-24 16:05:49 -0700 |
commit | 39c0d6d94bddeff34293f72445fd9f28087960b6 (patch) | |
tree | 16e356634c0861425790aa51d57907220c583852 | |
parent | c71e7dd9778c7a2a563dbd1e780d79ea766a05d9 (diff) |
Fix enough py3 issues for pokeyellow to finish building
Mostly xrange (screw it, just use range), spurious tabs, and division.
-rw-r--r-- | pokemontools/gfx.py | 26 | ||||
-rw-r--r-- | pokemontools/interval_map.py | 8 | ||||
-rw-r--r-- | pokemontools/lz.py | 14 | ||||
-rw-r--r-- | pokemontools/pic.py | 63 | ||||
-rw-r--r-- | pokemontools/preprocessor.py | 4 |
5 files changed, 60 insertions, 55 deletions
diff --git a/pokemontools/gfx.py b/pokemontools/gfx.py index b942a04..b3237ba 100644 --- a/pokemontools/gfx.py +++ b/pokemontools/gfx.py @@ -19,7 +19,7 @@ def split(list_, interval): """ Split a list by length. """ - for i in xrange(0, len(list_), interval): + for i in range(0, len(list_), interval): j = min(i + interval, len(list_)) yield list_[i:j] @@ -249,7 +249,7 @@ def flatten(planar): bottom = bottom top = top strip = [] - for i in xrange(7,-1,-1): + for i in range(7,-1,-1): color = ( (bottom >> i & 1) + (top *2 >> i & 2) @@ -268,10 +268,10 @@ def to_lines(image, width): height = len(image) / width lines = [] - for cur_line in xrange(height): + for cur_line in range(height): tile_row = cur_line / tile_height line = [] - for column in xrange(num_columns): + for column in range(num_columns): anchor = ( num_columns * tile_row * tile_width * tile_height + column * tile_width * tile_height + @@ -292,7 +292,7 @@ def dmg2rgb(word): value >>= 5 word = shift(word) # distribution is less even w/ << 3 - red, green, blue = [int(color * 8.25) for color in [next(word) for _ in xrange(3)]] + red, green, blue = [int(color * 8.25) for color in [next(word) for _ in range(3)]] alpha = 255 return (red, green, blue, alpha) @@ -448,7 +448,7 @@ def convert_2bpp_to_png(image, **kwargs): trailing = len(image) % pic_length pic = [] - for i in xrange(0, len(image) - trailing, pic_length): + for i in range(0, len(image) - trailing, pic_length): pic += transpose_tiles(image[i:i+pic_length], h) image = bytearray(pic) + image[len(image) - trailing:] @@ -522,7 +522,7 @@ def get_pic_animation(tmap, w, h): base = frames.pop(0) bitmasks = [] - for i in xrange(len(frames)): + for i in range(len(frames)): frame_text += '\tdw .frame{}\n'.format(i + 1) for i, frame in enumerate(frames): @@ -648,7 +648,7 @@ def png_to_2bpp(filein, **kwargs): palette = [] for line in rgba: newline = [] - for px in xrange(0, len(line), len_px): + for px in range(0, len(line), len_px): color = dict(zip('rgba', line[px:px+len_px])) if color not in palette: if len(palette) < 4: @@ -704,11 +704,11 @@ def png_to_2bpp(filein, **kwargs): num_rows = max(height, tile_height) / tile_height image = [] - for row in xrange(num_rows): - for column in xrange(num_columns): + for row in range(num_rows): + for column in range(num_columns): # Split it up into strips to convert to planar data - for strip in xrange(min(tile_height, height)): + for strip in range(min(tile_height, height)): anchor = ( row * num_columns * tile_width * tile_height + column * tile_width + @@ -737,10 +737,10 @@ def png_to_2bpp(filein, **kwargs): tile_width = width / 8 trailing = len(tiles) % pic_length new_image = [] - for block in xrange(len(tiles) / pic_length): + for block in range(len(tiles) / pic_length): offset = (h * tile_width) * ((block * w) / tile_width) + ((block * w) % tile_width) pic = [] - for row in xrange(h): + for row in range(h): index = offset + (row * tile_width) pic += tiles[index:index + w] new_image += transpose(pic, w) diff --git a/pokemontools/interval_map.py b/pokemontools/interval_map.py index daf22cd..fc53e69 100644 --- a/pokemontools/interval_map.py +++ b/pokemontools/interval_map.py @@ -1,7 +1,11 @@ # -*- coding: utf-8 -*- from bisect import bisect_left, bisect_right -from itertools import izip +try: + from future_builtins import zip +except ImportError: + pass + class IntervalMap(object): """ @@ -75,7 +79,7 @@ class IntervalMap(object): ((low_bound, high_bound), value) these items are returned in order""" previous_bound = None - for (b, v) in izip(self._bounds, self._items): + for (b, v) in zip(self._bounds, self._items): if v is not None: yield (previous_bound, b), v previous_bound = b diff --git a/pokemontools/lz.py b/pokemontools/lz.py index 4fd88f0..f5d90d8 100644 --- a/pokemontools/lz.py +++ b/pokemontools/lz.py @@ -2,6 +2,7 @@ """ Pokemon Crystal data de/compression. """ +from __future__ import print_function """ A rundown of Pokemon Crystal's compression scheme: @@ -9,7 +10,6 @@ A rundown of Pokemon Crystal's compression scheme: Control commands occupy bits 5-7. Bits 0-4 serve as the first parameter <n> for each command. """ -from __future__ import print_function lz_commands = { 'literal': 0, # n values for n bytes 'iterate': 1, # one value for n bytes @@ -45,8 +45,8 @@ lz_end = 0xff bit_flipped = [ - sum(((byte >> i) & 1) << (7 - i) for i in xrange(8)) - for byte in xrange(0x100) + sum(((byte >> i) & 1) << (7 - i) for i in range(8)) + for byte in range(0x100) ] @@ -190,7 +190,7 @@ class Compressed: ) for method in self.lookback_methods: min_score = self.min_scores[method] - for address in xrange(self.address+1, self.address+best_score): + for address in range(self.address+1, self.address+best_score): length, index = self.find_lookback(method, address) if length > max(min_score, best_score): # BUG: lookbacks can reduce themselves. This appears to be a bug in the target also. @@ -212,7 +212,7 @@ class Compressed: def find_lookback(self, method, address=None): """Temporarily stubbed, because the real function doesn't run in polynomial time.""" - return 0, None + return 0, None def broken_find_lookback(self, method, address=None): if address is None: @@ -544,7 +544,7 @@ class Decompressed: Write alternating bytes. """ alts = [next(self), next(self)] - self.output += [ alts[x & 1] for x in xrange(self.length) ] + self.output += [ alts[x & 1] for x in range(self.length) ] def blank(self): """ @@ -576,6 +576,6 @@ class Decompressed: self.get_offset() self.direction = direction # Note: appends must be one at a time (this way, repeats can draw from themselves if required) - for i in xrange(self.length): + for i in range(self.length): byte = self.output[ self.offset + i * direction ] self.output.append( table[byte] if table else byte ) diff --git a/pokemontools/pic.py b/pokemontools/pic.py index 20d8150..25f2621 100644 --- a/pokemontools/pic.py +++ b/pokemontools/pic.py @@ -4,6 +4,7 @@ A library for use with compressed monster and trainer pics in pokered. """ from __future__ import absolute_import +from __future__ import division import os import sys @@ -29,14 +30,14 @@ class Decompressor: Ported to python 2.7 from the python 3 code at https://github.com/magical/pokemon-sprites-rby. """ - table1 = [(2 << i) - 1 for i in xrange(16)] + table1 = [(2 << i) - 1 for i in range(16)] table2 = [ [0x0, 0x1, 0x3, 0x2, 0x7, 0x6, 0x4, 0x5, 0xf, 0xe, 0xc, 0xd, 0x8, 0x9, 0xb, 0xa], [0xf, 0xe, 0xc, 0xd, 0x8, 0x9, 0xb, 0xa, 0x0, 0x1, 0x3, 0x2, 0x7, 0x6, 0x4, 0x5], # prev ^ 0xf [0x0, 0x8, 0xc, 0x4, 0xe, 0x6, 0x2, 0xa, 0xf, 0x7, 0x3, 0xb, 0x1, 0x9, 0xd, 0x5], [0xf, 0x7, 0x3, 0xb, 0x1, 0x9, 0xd, 0x5, 0x0, 0x8, 0xc, 0x4, 0xe, 0x6, 0x2, 0xa], # prev ^ 0xf ] - table3 = [bitflip(i, 4) for i in xrange(16)] + table3 = [bitflip(i, 4) for i in range(16)] tilesize = 8 @@ -118,7 +119,7 @@ class Decompressor: a = self._readint(i + 1) n += a - for i in xrange(n): + for i in range(n): ram.append(0) def _read_data_chunk(self, ram, size): @@ -135,9 +136,9 @@ class Decompressor: if mirror is None: mirror = self.mirror - for x in xrange(self.sizex): + for x in range(self.sizex): bit = 0 - for y in xrange(self.sizey): + for y in range(self.sizey): i = y * self.sizex + x a = (ram[i] >> 4) & 0xf b = ram[i] & 0xf @@ -158,7 +159,7 @@ class Decompressor: if mirror is None: mirror = self.mirror - for i in xrange(len(ram2)): + for i in range(len(ram2)): if mirror: a = (ram2[i] >> 4) & 0xf b = ram2[i] & 0xf @@ -170,10 +171,10 @@ class Decompressor: def _deinterlace_bitgroups(self, bits): l = [] - for y in xrange(self.sizey): - for x in xrange(self.sizex): + for y in range(self.sizey): + for x in range(self.sizex): i = 4 * y * self.sizex + x - for j in xrange(4): + for j in range(4): l.append(bits[i]) i += self.sizex return l @@ -193,12 +194,12 @@ def fbitstream(f): break byte = ord(char) - for i in xrange(7, -1, -1): + for i in range(7, -1, -1): yield (byte >> i) & 1 def bitstream(b): for byte in b: - for i in xrange(7, -1, -1): + for i in range(7, -1, -1): yield (byte >> i) & 1 def readint(bs, count): @@ -211,7 +212,7 @@ def readint(bs, count): def bitgroups_to_bytes(bits): l = [] - for i in xrange(0, len(bits) - 3, 4): + for i in range(0, len(bits) - 3, 4): n = ((bits[i + 0] << 6) | (bits[i + 1] << 4) | (bits[i + 2] << 2) @@ -231,21 +232,21 @@ class Compressor: Adapted from stag019's C compressor. """ - table1 = [(2 << i) - 1 for i in xrange(16)] + table1 = [(2 << i) - 1 for i in range(16)] table2 = [ [0x0, 0x1, 0x3, 0x2, 0x6, 0x7, 0x5, 0x4, 0xc, 0xd, 0xf, 0xe, 0xa, 0xb, 0x9, 0x8], [0x8, 0x9, 0xb, 0xa, 0xe, 0xf, 0xd, 0xc, 0x4, 0x5, 0x7, 0x6, 0x2, 0x3, 0x1, 0x0], # reverse ] - table3 = [bitflip(i, 4) for i in xrange(16)] + table3 = [bitflip(i, 4) for i in range(16)] def __init__(self, image, width=None, height=None): self.image = bytearray(image) self.size = len(self.image) - planar_tile = 8 * 8 / 4 - tile_size = self.size / planar_tile - if height and not width: width = tile_size / height - elif width and not height: height = tile_size / width + planar_tile = 8 * 8 // 4 + tile_size = self.size // planar_tile + if height and not width: width = tile_size // height + elif width and not height: height = tile_size // width elif not width and not height: width = height = int(sqrt(tile_size)) self.width, self.height = width, height @@ -257,7 +258,7 @@ class Compressor: rams = [[],[]] datas = [] - for mode in xrange(3): + for mode in range(3): # Order is redundant for mode 0. @@ -270,10 +271,10 @@ class Compressor: # Using order 0 instead of 1 breaks this feature. - for order in xrange(2): + for order in range(2): if mode == 0 and order == 0: continue - for i in xrange(2): + for i in range(2): rams[i] = self.image[i::2] self._interpret_compress(rams, mode, order) datas += [(self.data[:], int(self.which_bit))] @@ -320,10 +321,10 @@ class Compressor: nums = 0 bitgroups = [] - for x in xrange(self.width): - for bit in xrange(0, 8, 2): + for x in range(self.width): + for bit in range(0, 8, 2): byte = x * self.height * 8 - for y in xrange(self.height * 8): + for y in range(self.height * 8): bitgroup = (ram[byte] >> (6 - bit)) & 3 if bitgroup == 0: if rle == 0: @@ -378,16 +379,16 @@ class Compressor: v >>= 1 bitcount += 1 - for j in xrange(bitcount): + for j in range(bitcount): self._writebit(1) self._writebit(0) - for j in xrange(bitcount, -1, -1): + for j in range(bitcount, -1, -1): self._writebit((number >> j) & 1) def _encode(self, ram, mirror=None): a = b = 0 - for i in xrange(len(ram)): - j = i / self.height + for i in range(len(ram)): + j = i // self.height j += i % self.height * self.width * 8 if i % self.height == 0: b = 0 @@ -403,7 +404,7 @@ class Compressor: ram[j] = (code_1 << 4) | code_2 def _xor(self, ram1, ram2): - for i in xrange(len(ram2)): + for i in range(len(ram2)): ram2[i] ^= ram1[i] def _writebit(self, bit): @@ -416,7 +417,7 @@ class Compressor: def _writeint(self, num, size=None): bits = [] if size: - for i in xrange(size): + for i in range(size): bits += [num & 1] num >>= 1 else: @@ -469,7 +470,7 @@ def compress_file(filename): pic = bytearray(pic) output_filename = os.path.splitext(filename)[0] + '.pic' with open(output_filename, 'wb') as out: - out.write(pic) + out.write(pic) def main(): diff --git a/pokemontools/preprocessor.py b/pokemontools/preprocessor.py index effbd2e..92b42b0 100644 --- a/pokemontools/preprocessor.py +++ b/pokemontools/preprocessor.py @@ -566,11 +566,11 @@ class Preprocessor(object): if show_original_lines: sys.stdout.write("; original_line: " + original_line) - # rgbasm can handle other macros too + # rgbasm can handle other macros too if "is_rgbasm_macro" in dir(macro): if macro.is_rgbasm_macro: sys.stdout.write(original_line) - return + return # certain macros don't need an initial byte written # do: all scripting macros |