assets/nx/nzportable/nzp/textures/r4w/convert_all.py

89 lines
2.5 KiB
Python
Raw Normal View History

2022-02-08 18:58:09 +00:00
import os
import struct
def findall():
filelist = os.listdir()
#print(filelist)
try:
os.mkdir('out')
print("Starting conversion, created 'out' directory...")
except:
print("Starting conversion, 'out' directory exists...")
for filename in filelist:
splits = filename.split('.')
suffix = splits[-1]
cancel = False
if suffix is 'h':
print("- Processing " + filename + "...")
h = open(filename, 'r')
width = -1
height = -1
for line in h:
if line[0] is not '#':
continue
words = line.split()
if words[1][-13:] == 'TEXTURE_WIDTH':
width = int(words[2])
elif words[1][-14:] == 'TEXTURE_HEIGHT':
height = int(words[2])
elif words[1][-14:] == 'TEXTURE_FORMAT':
if words[2] != '4':
print("-- Texture format not supported, only accepting GU_PSM_T4 !")
cancel = True
elif words[1][-15:] == 'TEXTURE_SWIZZLE':
if words[2] != '1':
print("-- Non-swizzled textures not recommended!")
#cancel = True
elif words[1][-14:] == 'PALETTE_FORMAT':
if words[2] != '3':
print("-- Palette format not supported, only accepting GU_PSM_8888 !")
cancel = True
if width == -1 or height == -1:
print("Missing either width or height in header !")
cancel = True
newfile = open(filename[:-2] + '.r4w', 'wb')
newfile.write(bytes("c4fe", 'utf-8'))
newfile.write(struct.pack('i', width))
newfile.write(struct.pack('i', height))
newfile.write(bytes("xxxx", 'utf-8'))
# the raw file
try:
raw = open(filename[:-2] + '.raw', 'rb')
# (width * height / 2) bytes for 4bpp
newfile.write(raw.read(int((width * height) / 2)))
raw.close()
except Exception as e:
print('-- Couldn\'t read ' + filename[:-2] + '.raw')
print("--- Exception: %s" % e)
cancel = True
# the rawpal file
try:
rawpal = open(filename[:-2] + '.rawpal', 'rb')
# 4 bytes per color, 16 colors
newfile.write(rawpal.read(4 * 16))
rawpal.close()
except Exception as e:
print('-- Couldn\'t read ' + filename[:-2] + '.rawpal')
print("--- Exception: %s" % e)
cancel = True
newfile.close()
if cancel:
os.remove(filename[:-2] + '.r4w')
print('-- ' + filename[:-2] + '.r4w was NOT generated.')
else:
try:
os.rename(filename[:-2] + '.r4w', 'out/' + filename[:-2] + '.r4w')
except:
os.remove('out/' + filename[:-2] + '.r4w')
os.rename(filename[:-2] + '.r4w', 'out/' + filename[:-2] + '.r4w')
print('-- Created ./out/' + filename[:-2] + '.r4w')
findall()