92 lines
3.9 KiB
Python
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)) |