Advertisement
joric

text_to_fym.py

Aug 31st, 2018
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | None | 0 0
  1. #!/bin/python3
  2.  
  3. # ayumi text dump to .fym converter, public domain
  4. # original author: Joric, https://github.com/joric
  5. # example: http://bmxplay.sourceforge.net/rage.html
  6.  
  7. import sys
  8. import struct
  9. import zlib
  10.  
  11. frame_data = []
  12.  
  13. def save_fym(name, frame_data):
  14.     data = bytearray()
  15.  
  16.     data.extend(struct.pack('i', 22)) # offset to data
  17.     data.extend(struct.pack('i', len(frame_data))) # frame count
  18.     data.extend(struct.pack('i', 512)) # loop frame
  19.     data.extend(struct.pack('i', 1750000)) # clock rate
  20.     data.extend(struct.pack('i', 50)) # frame rate
  21.     data.extend(struct.pack('B', 0)) # track name
  22.     data.extend(struct.pack('B', 0)) # author name
  23.  
  24.     # frame data is transposed
  25.     for j in range(14):
  26.         for i in range(len(frame_data)):
  27.             data.extend(struct.pack('B', frame_data[i][j]))
  28.  
  29.     if '.fym' in name:
  30.         data = zlib.compress(data, 9)
  31.     f = open(name, 'wb')
  32.     f.write(data)
  33.     f.close()
  34.  
  35. if __name__ == '__main__':
  36.     if len(sys.argv) != 3:
  37.       print('text_to_fym input.text output.fym')
  38.       sys.exit(0)
  39.  
  40.     filename = sys.argv[1]
  41.  
  42.     f = open(filename, 'r')
  43.     file_data = f.read()
  44.     f.close()
  45.  
  46.     lines = file_data.splitlines()
  47.     frame_count = 0
  48.     mode = 0
  49.  
  50.     for l in lines:
  51.         if mode==0 and 'frame_count' in l:
  52.             frame_count = int(l.split(' ')[1])
  53.         elif mode==0 and 'frame_data' in l:
  54.            mode = 1
  55.         elif mode==1:
  56.             frame_data.append([int(x) for x in l.split(' ')])
  57.  
  58.     save_fym(sys.argv[2], frame_data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement