mirror of
https://github.com/pret/pokemon-reverse-engineering-tools.git
synced 2026-08-24 11:14:10 -05:00
Refactor get_pic_animation.
This commit is contained in:
@@ -1387,40 +1387,38 @@ def get_pic_animation(tmap, w, h):
|
|||||||
"""
|
"""
|
||||||
Generate pic animation data from a combined tilemap of each frame.
|
Generate pic animation data from a combined tilemap of each frame.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
frame_text = ''
|
frame_text = ''
|
||||||
bitmask_text = ''
|
bitmask_text = ''
|
||||||
|
|
||||||
frames = list(split(tmap, w * h))
|
frames = list(split(tmap, w * h))
|
||||||
|
base = frames.pop(0)
|
||||||
bitmasks = []
|
bitmasks = []
|
||||||
|
|
||||||
frame_text += ''.join(
|
for i in xrange(len(frames)):
|
||||||
'\tdw .frame{0}\n'.format(i + 1) for i, frame in enumerate(frames[1:])
|
frame_text += '\tdw .frame{}\n'.format(i + 1)
|
||||||
)
|
|
||||||
|
|
||||||
for i, frame in enumerate(frames[1:]):
|
for i, frame in enumerate(frames):
|
||||||
bitmask = map(
|
bitmask = map(operator.eq, frame, base)
|
||||||
lambda (i, x):
|
|
||||||
int(x != frames[0][i]),
|
|
||||||
enumerate(frame)
|
|
||||||
)
|
|
||||||
if bitmask not in bitmasks:
|
if bitmask not in bitmasks:
|
||||||
bitmasks.append(bitmask)
|
bitmasks.append(bitmask)
|
||||||
which_bitmask = bitmasks.index(bitmask)
|
which_bitmask = bitmasks.index(bitmask)
|
||||||
|
|
||||||
frame_ = [x for _, x in filter(lambda (i, x): bitmask[i], enumerate(frame))]
|
mask = iter(bitmask)
|
||||||
frame_text += '\n'.join([
|
masked_frame = filter(mask.next, frame)
|
||||||
'.frame{0}'.format(i + 1),
|
|
||||||
'\tdb ${0:02x} ; bitmask'.format(which_bitmask),
|
frame_text += '.frame{}\n'.format(i + 1)
|
||||||
('\tdb ' + ', '.join(map('${0:02x}'.format, frame_))) if frame_ else '',
|
frame_text += '\tdb ${:02x} ; bitmask\n'.format(which_bitmask)
|
||||||
]) + '\n'
|
if masked_frame:
|
||||||
|
frame_text += '\tdb {}\n'.format(', '.join(
|
||||||
|
map('${:02x}'.format, masked_frame)
|
||||||
|
))
|
||||||
|
frame_text += '\n'
|
||||||
|
|
||||||
for i, bitmask in enumerate(bitmasks):
|
for i, bitmask in enumerate(bitmasks):
|
||||||
bitmask_text += '; {0}\n'.format(i)
|
bitmask_text += '; {}\n'.format(i)
|
||||||
for byte in split(bitmask, 8):
|
for byte in split(bitmask, 8):
|
||||||
byte.reverse()
|
byte = int(''.join(map(int.__repr__, reversed(byte))), 2)
|
||||||
byte = int(''.join(map(str, byte)), 2)
|
bitmask_text += '\tdb %{:08b}\n'.format(byte)
|
||||||
bitmask_text += '\tdb %{0:08b}\n'.format(byte)
|
|
||||||
|
|
||||||
return frame_text, bitmask_text
|
return frame_text, bitmask_text
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user