Fix LuaSF big endian output..?

This commit is contained in:
Fierelier 2023-11-15 16:17:19 +01:00
parent 0829fd982e
commit 7dacdd7849
1 changed files with 46 additions and 0 deletions

46
run.py
View File

@ -79,12 +79,14 @@ def fchunkPack(fch,fchOut,pf = "pc"):
if pf == "x360":
callTool([p("LuaSF","LuaSF"),"--big","--compile",wp(fch),wp(fchOutDir)],cwd=p(sp,"bin","windows","LuaSF")) # ugly hack
os.replace(fchOutLsfName,fchOut + ".decomp")
fchunkFixBig(fchOut + ".decomp")
callTool([p("xbcompression","xbcompress"),"/F",wp(fchOut + ".decomp"),wp(fchOut)])
os.remove(fchOut + ".decomp")
return
if pf == "ps3":
callTool([p("LuaSF","LuaSF"),"--big","--compile",wp(fch),wp(fchOutDir)])
fchunkFixBig(fchOutLsfName)
if pf == "pc":
callTool([p("LuaSF","LuaSF"),"--compile",wp(fch),wp(fchOutDir)])
@ -93,6 +95,50 @@ def fchunkPack(fch,fchOut,pf = "pc"):
os.replace(fchOutLsfName,fchOut)
return
def fchunkFixBig(fchunk): # Fix SCRH (Script Package Header) and SCRC (Script Package Lookup) -- Thanks miru97 for the help!
fh = open(fchunk,"r+b")
# Find pointers
pointers = {}
fh.seek(0x810)
headerName = fh.read(4).decode("ascii")
pointers[headerName] = [0,0,0]
pointers[headerName][0] = int.from_bytes(fh.read(4),"little") # address
pointers[headerName][1] = int.from_bytes(fh.read(4),"little") # unknown
pointers[headerName][2] = int.from_bytes(fh.read(4),"little") # size
headerName = fh.read(4).decode("ascii")
pointers[headerName] = [0,0,0]
pointers[headerName][0] = int.from_bytes(fh.read(4),"little") # address
pointers[headerName][1] = int.from_bytes(fh.read(4),"little") # unknown
pointers[headerName][2] = int.from_bytes(fh.read(4),"little") # size
#headerName = fh.read(4).decode("ascii")
#pointers[headerName] = [0,0,0]
#pointers[headerName][0] = int.from_bytes(fh.read(4),"big") # address
#pointers[headerName][1] = int.from_bytes(fh.read(4),"big") # unknown
#pointers[headerName][2] = int.from_bytes(fh.read(4),"big") # size
# normalize addresses
pointers["SCRC"][0] = pointers["SCRH"][0] + pointers["SCRC"][0]
#pointers["SCRS"][0] = pointers["SCRC"][0] + pointers["SCRS"][0] # TODO: check if correct
for space in pointers:
cursor = pointers[space][0]
end = cursor + pointers[space][2]
fh.seek(cursor)
while cursor < end:
# invert bytes
data = fh.read(1)
data = fh.read(1) + data
data = fh.read(1) + data
data = fh.read(1) + data
fh.seek(cursor)
fh.write(data)
cursor += 4
fh.close()
def createPatchFromDir(dir1,dir2,output):
proc = popen(["diff","-crB",dir1,dir2],stdout=subprocess.PIPE)
with open(output,"w",encoding="utf-8") as fh: