gb-tarot/misc.py

92 lines
3.9 KiB
Python

import re
def splitfour(the_string):
""" takes a block of sprites output by gb-export.lua from aseprite.
divides it into four line-by-line and returns them as separate sprite maps.
if you arranged your sprites horizontally, this divides them up."""
out = ["", "", "", ""]
for l in the_string.split("\n"):
sub = list(l.strip()[3:].split(","))
length = len(sub)
out[0] += "db " + ", ".join(sub[0:length//4]) + "\n"
out[1] += "db " + ", ".join(sub[length//4 : length//2]) + "\n"
out[2] += "db " + ", ".join(sub[length//2 : 3*length//4]) + "\n"
out[3] += "db " + ", ".join(sub[3*length//4 : length]) + "\n"
for d in out:
print(d)
return out
def splitn(n, the_string):
""" takes a block of sprites output by gb-export.lua from aseprite.
divides it into n line-by-line and returns them as separate sprite maps.
if you arranged your sprites horizontally, this divides them up."""
out = ["" for _ in range(n)]
for l in the_string.split("\n"):
sub = list(l.strip()[3:].split(", "))
length = len(sub)
for i in range(n):
out[i] += "db " + ", ".join(sub[(i*length)//n:((i+1)*length)//n]) + "\n"
for d in out:
print(d)
return out
def transpose_gb_tiles(the_string):
out = [[] for _ in range(max(map(lambda l: len(l.split(", ")), the_string.split("\n"))))]
for l in the_string.split("\n"):
sub = list(l.strip()[3:].split(", "))
for i, byte in enumerate(sub):
out[i].append(byte)
for d in out:
print("db " + ", ".join(d))
return out
def list_from_length_prefix(the_string):
""" converts a string containing a length-prefixed list of entries into a python list"""
raw_list = the_string.strip(', \t').split(",")
length = int(re.search(r'db ([0-9]+)', raw_list[0]).group(1))
rest = [int(s) for s in raw_list[1:]]
step = len(rest) // length
return [rest[i : i+step] for i in range(0, len(rest), step)]
def length_prefix_from_list(l, size=None):
"""converts a python list into a length-prefixed asssembly thing"""
flat_list = ", ".join(", ".join(f'{x}' for x in s) for s in l)
return f'db {len(l)}, {flat_list}'
def transpose_paths(paths):
"""takes a list of paths. returns a list of paths: the first element of each list, etc"""
new_paths = [[] for point in paths[0]]
for path in paths:
for i, point in enumerate(path):
new_paths[i].append(point)
return new_paths
def transpose_and_length_prefix_path(text):
lines = list(text.strip().splitlines())
paths = [list_from_length_prefix(s) for s in lines if s.strip()]
new_paths = transpose_paths(paths)
output = "\n".join(length_prefix_from_list(p) for p in new_paths)
return output
chain_lines = """
db 13, 37, 31, 43, 30, 51, 32, 56, 37, 61, 43, 67, 49, 71, 54, 76, 59, 83, 61, 91, 61, 98, 60, 105, 58, 110, 52,
db 13, 37, 31, 44, 30, 52, 34, 57, 39, 61, 44, 67, 50, 71, 55, 76, 59, 83, 61, 91, 61, 98, 60, 104, 57, 110, 52,
db 13, 37, 31, 45, 32, 53, 36, 58, 42, 61, 46, 66, 52, 71, 55, 77, 58, 84, 59, 92, 60, 98, 59, 104, 56, 110, 52,
db 13, 37, 31, 45, 33, 51, 37, 56, 42, 60, 47, 65, 51, 71, 54, 77, 57, 84, 58, 91, 58, 97, 57, 103, 55, 110, 52,
db 13, 37, 31, 43, 34, 48, 38, 53, 43, 59, 48, 66, 51, 71, 53, 77, 55, 84, 57, 91, 59, 98, 58, 104, 56, 110, 52,
db 13, 37, 31, 43, 35, 48, 39, 53, 45, 59, 49, 65, 52, 71, 54, 78, 55, 85, 56, 91, 57, 98, 56, 104, 55, 110, 52,
db 13, 37, 31, 43, 34, 49, 37, 54, 43, 60, 49, 66, 52, 72, 54, 78, 54, 84, 56, 91, 56, 97, 56, 104, 56, 110, 52,
db 13, 37, 31, 43, 32, 51, 35, 56, 41, 61, 46, 66, 51, 72, 53, 78, 55, 84, 57, 91, 58, 98, 57, 105, 57, 110, 52,
db 13, 37, 31, 43, 31, 50, 34, 56, 39, 61, 44, 66, 50, 71, 54, 77, 58, 84, 59, 91, 60, 98, 59, 106, 57, 110, 52,
"""
#db 13, 1, 4, 3, 3, 0, 3, 0, 0, 2, 3, 2, 4, 2, 3, 4, 2, 4, 3, 1, 1, 0, 1, 2, 1, 1, 2,
print(transpose_and_length_prefix_path(chain_lines))