summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Lexy Munroe) <eevee.git@veekun.com>2016-08-24 16:05:49 -0700
committerEevee (Lexy Munroe) <eevee.git@veekun.com>2016-08-24 16:05:49 -0700
commit39c0d6d94bddeff34293f72445fd9f28087960b6 (patch)
tree16e356634c0861425790aa51d57907220c583852
parentc71e7dd9778c7a2a563dbd1e780d79ea766a05d9 (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.py26
-rw-r--r--pokemontools/interval_map.py8
-rw-r--r--pokemontools/lz.py14
-rw-r--r--pokemontools/pic.py63
-rw-r--r--pokemontools/preprocessor.py4
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