1
0
mirror of https://github.com/blawar/ooot.git synced 2024-07-02 09:03:36 +00:00
ooot/tools/oot.py
2022-04-03 18:25:32 -04:00

130 lines
2.4 KiB
Python

import sys
import os
import os.path
import json
from pathlib import Path
_assetPath = None
_buildRom = None
_conf = None
class ConfSection:
def __init__(self, j):
self.offset = 0
self.size = 0
try:
self.offset = int(j['offset'], 16)
self.size = int(j['size'], 16)
except:
pass
class ConfRom:
def __init__(self, j):
try:
self.UNCOMPRESSED_SIZE = int(j['UNCOMPRESSED_SIZE'], 16)
except:
pass
try:
self.FILE_TABLE_OFFSET = int(j['FILE_TABLE_OFFSET'], 16)
except:
pass
self.hash_md5 = j['hash_md5']
self.FILE_NAMES = j['FILE_NAMES']
class ConfSections:
def __init__(self):
pass
class Conf:
def __init__(self, path):
self.path = path
self.sections = ConfSections()
with open(path, 'r') as f:
j = json.load(f)
for k,v in j['sections'].items():
self.sections.__dict__[k] = ConfSection(v)
self.rom = ConfRom(j['rom'])
def config():
global _conf
if _conf is None:
_conf = Conf(romPath('config.json'))
return _conf
def fixSlashPath(path):
return str(Path(path))
def validBuildOptions():
r = []
base = 'roms'
for f in os.listdir(Path(base)):
if os.path.exists(Path(base).joinpath(f).joinpath('zapd/Config.xml')):
r.append(f)
return r
def setBuildRom(p):
global _buildRom
_buildRom = p
def findBuildRom():
if len(validBuildOptions()) == 1:
return validBuildOptions()[0]
return 'EUR_MQD'
def buildRom():
global _buildRom
if _buildRom is not None:
return _buildRom
if len(sys.argv) < 2:
print('incorrect usage, pass rom name')
exit(0)
_buildRom = sys.argv[1]
return _buildRom
def romPath(rom = ''):
return fixSlashPath('roms/%s/%s' % (buildRom(), rom))
def getAssetPath():
global _assetPath
_assetPath = fixSlashPath('assets/%s' % buildRom())
return _assetPath
def assetPath(s = ''):
return fixSlashPath('%s/%s' % (getAssetPath(), s))
def zapdBinary():
return str(Path('tools/ZAPD/ZAPD.out'))
def yaz0Binary():
return str(Path('tools/yaz0'))
def createDir(path):
Path.mkdir(Path(path), parents=True, exist_ok = True)
def mkdir(path):
createDir(path)
def relPath(path, sub = None):
if sub is None:
sub = basedir
left = os.path.abspath(sub)
path = os.path.abspath(path)
if left.startswith(path):
raise IOError('path is not under this project:\n%s\n%s' % (left, path))
r = path[len(left):]
if r[0] == '/' or r[0] == '\\':
return r[1:]
return r
basedir = Path(__file__).absolute().parent.parent