Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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])
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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 = ''