def write_art(art_name): check_ext(art_name, '.ART') verbose = 0 # parts[0] -- dimensions + palette # parts[1] -- image data # load header h = load_header(art_name) # load image part1 = BytesIO() img = Image.open('{}.png'.format(art_name)) inds = [x for x in img.getdata()] assert len(inds) == h.width * h.height write_raw(part1, len(inds), inds) img.close() parts = load_madspack(art_name) part1.seek(0) parts[1] = part1 write_madspack(art_name, parts)
def write_cnv(cnv_name): check_ext(cnv_name, '.CNV') part0 = open("{}.s00.part".format(cnv_name), 'wb') part4 = open("{}.s04.part".format(cnv_name), 'wb') part5 = open("{}.s05.part".format(cnv_name), 'wb') msgs = load_cnv_messages(cnv_name) h = load_cnv_header(cnv_name) offset = 0 for msg in msgs: enc_msg = encode_string(msg, null_term=True) # offset first write_uint16(part4, offset) offset += write_raw(part5, len(enc_msg), enc_msg) h.msg_count = len(msgs) h.part5_size = offset write_cnv_header(part0, h) part0.close() part4.close() part5.close() # join to madspack parts = load_madspack(cnv_name) assert len(parts) == 7 write_madspack(cnv_name, parts) output(cnv_name)
def write_aa(aa_name): parts = load_madspack(aa_name) if verbose: print(len(parts)) if len(parts) > 1: part1 = BytesIO() write_aa_messages(part1, load_aa_messages(aa_name)) part1.seek(0) parts[1] = part1 if verbose: print('aa messages modified') write_madspack(aa_name, parts) output(aa_name)
def write_ff(ff_name): check_ext(ff_name, '.FF') h = load_ff_header(ff_name) f = BytesIO() f.seek(2 + 128 + 256) for i in range(1,128): write_glyph(f, ff_name, h, i) f.seek(0) write_ff_header(f, h) assert f.tell() == 2 + 128 + 256 write_madspack(ff_name, [f])
def write_ss(ss_name): f = open(ss_name, 'wb') ss_header = load_ss_header(ss_name) # pallete part2 = open('{}.s02.part'.format(ss_name), 'rb') pal = read_pallete(part2) # reverse pallete rpal = {} for i,col in enumerate(pal): rpal[col] = i part1 = BytesIO() part3 = BytesIO() size = 0 for i in range(ss_header.nsprites): sprite_name = '{}.{:03}'.format(ss_name, i) img = Image.open(sprite_name+'.png') spr_hd = load_sprite_header(sprite_name) size += write_sprite(part1, part3, spr_hd, img, rpal) ss_header.mode = 0 # only linemode without fab ss_header.data_size = size part0 = BytesIO() write_ss_header(part0, ss_header) parts = [part0, part1, part2, part3] for part in parts: part.seek(0) write_madspack(f, parts) f.close() print(ss_name)
def write_aa(aa_name): check_ext(aa_name, '.AA') parts = load_madspack(aa_name) if verbose: print(len(parts)) if len(parts) > 1: part1 = BytesIO() write_aa_messages(part1, load_aa_messages(aa_name)) part1.seek(0) parts[1] = part1 if verbose: print('aa messages modified') write_madspack(aa_name, parts) output(aa_name)
def call(fmt,cmd,path): odd = os.getcwd() ndd,arg1 = os.path.split(path) common.g_curr_dir = ndd if ndd: os.chdir(ndd) try: if cmd not in ['pack','unpack']: print('invalid command; use "pack" or "unpack"') sys.exit(1) if fmt == 'dat': if cmd == 'unpack': read_messagesdat(open(arg1, 'rb'), arg1) elif cmd == 'pack': write_messagesdat(open(arg1, 'wb'), arg1) elif fmt == 'hag': if cmd == 'unpack': read_madsconcat(open(arg1, 'rb'), arg1) elif cmd == 'pack': write_madsconcat(arg1) elif fmt == 'ss': if cmd == 'unpack': read_ss(open(arg1, 'rb'), arg1) elif cmd == 'pack': write_ss(arg1) else: print(usage) sys.exit(1) elif fmt == 'fab': if cmd == 'unpack': read_fab_unrestricted(arg1) elif cmd == 'pack': print("fab compression? what for?") # write_fab_unrestricted(arg1) else: print(usage) sys.exit(1) elif fmt == 'madspack': if cmd == 'unpack': save_madspack(arg1, read_madspack(open(arg1, 'rb'))) elif cmd == 'pack': write_madspack(arg1, load_madspack(arg1)) else: print(usage) sys.exit(1) elif fmt == 'aa': if cmd == 'unpack': read_aa(arg1) elif cmd == 'pack': write_aa(arg1) else: print(usage) sys.exit(1) elif fmt == 'ff': if cmd == 'unpack': read_ff(arg1) elif cmd == 'pack': write_ff(arg1) else: print(usage) sys.exit(1) else: raise External('invalid format specification') finally: os.chdir(odd) common.g_curr_dir = ''