mirror of
https://github.com/Kaisaan/lostkefin.git
synced 2025-06-19 00:55:42 -04:00
Update extract.py
This commit is contained in:
parent
a6ab1e475a
commit
0faa8602ae
81
extract.py
81
extract.py
@ -1,26 +1,24 @@
|
|||||||
|
# todo: extract all the files into their appropirate folders (using fileorder)
|
||||||
|
# also turn the functions into while loops? pass start and end address
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
slpm = open("extracted/SLPM_663.60", "rb")
|
slpm = open("extracted/SLPM_663.60", "rb")
|
||||||
datafile = open('extracted/DATA.BIN', 'rb')
|
|
||||||
|
|
||||||
fileptrstart = 0x001829D0
|
logfile = open("logfile.txt", "w", encoding="shift-jis")
|
||||||
fileptrend = 0x001875E0
|
|
||||||
|
|
||||||
fileptr = fileptrstart
|
|
||||||
|
|
||||||
baseptr = 0xFFF80
|
baseptr = 0xFFF80
|
||||||
sector = 0x800
|
sector = 0x800
|
||||||
|
|
||||||
fileorder = 0
|
|
||||||
filenamesize = 32
|
filenamesize = 32
|
||||||
terminator = "\x00"
|
terminator = "\x00"
|
||||||
|
|
||||||
logfile = open("logfile.txt", "w", encoding="shift-jis")
|
def extractfile(address, file):
|
||||||
logfile.write("\nDATA.BIN Files\n\n")
|
|
||||||
|
|
||||||
while fileptr < fileptrend:
|
os.makedirs(f"{file}", exist_ok=True)
|
||||||
|
|
||||||
slpm.seek(fileptr)
|
datafile = open(f"extracted/{file}.BIN", 'rb')
|
||||||
|
|
||||||
|
slpm.seek(address)
|
||||||
filenameptr = slpm.read(4)
|
filenameptr = slpm.read(4)
|
||||||
filesize = slpm.read(4)
|
filesize = slpm.read(4)
|
||||||
filesectorstart = slpm.read(4)
|
filesectorstart = slpm.read(4)
|
||||||
@ -43,25 +41,32 @@ while fileptr < fileptrend:
|
|||||||
datafile.seek(filesectorstart)
|
datafile.seek(filesectorstart)
|
||||||
filedata = datafile.read(filesize)
|
filedata = datafile.read(filesize)
|
||||||
|
|
||||||
newfile = open(f"DATA/{filename}", "wb")
|
newfile = open(f"{file}/{filename}", "wb")
|
||||||
newfile.write(filedata)
|
newfile.write(filedata)
|
||||||
newfile.close
|
newfile.close
|
||||||
|
|
||||||
logfile.write(f"Current Pointer: {fileptr:X}\tFile name: {fileorder:X} {filename}\tFilename location: {filenameloc:X}\tFilename pointer: {filenameptr:X}\tFile size: {filesize:X}\tFile data start in DATA.BIN: {filesectorstart:X}\tFile data sector size: {filesectorsize:X}\n")
|
return f"Address: {address:X}\tFile name: {filename}\tFilename location: {filenameloc:X}\tFilename pointer: {filenameptr:X}\tFile size: {filesize:X}\tFile data start in {file}.BIN: {filesectorstart:X}\tFile data sector size: {filesectorsize:X}"
|
||||||
|
|
||||||
|
|
||||||
|
fileorder = 0
|
||||||
|
|
||||||
|
fileptrstart = 0x001829D0
|
||||||
|
fileptrend = 0x001875E0
|
||||||
|
|
||||||
|
fileptr = fileptrstart
|
||||||
|
|
||||||
|
logfile.write("\nDATA.BIN Files\n\n")
|
||||||
|
|
||||||
|
while fileptr < fileptrend:
|
||||||
|
|
||||||
|
logfile.write(f"{extractfile(fileptr, "DATA")}\tindex {fileorder}\n")
|
||||||
|
|
||||||
fileptr += 16
|
fileptr += 16
|
||||||
fileorder += 1
|
fileorder += 1
|
||||||
|
|
||||||
logfile.write("\nDATA.BIN Folders\n\n")
|
def extractfolder(address, file):
|
||||||
|
|
||||||
folderptrstart = 0x001875E0
|
slpm.seek(address)
|
||||||
folderptrend = 0x00187A18
|
|
||||||
|
|
||||||
folderptr = folderptrstart
|
|
||||||
|
|
||||||
while folderptr < folderptrend:
|
|
||||||
|
|
||||||
slpm.seek(folderptr)
|
|
||||||
foldernameptr = slpm.read(4)
|
foldernameptr = slpm.read(4)
|
||||||
folderorderstart = slpm.read(4)
|
folderorderstart = slpm.read(4)
|
||||||
foldercount = slpm.read(4)
|
foldercount = slpm.read(4)
|
||||||
@ -76,8 +81,36 @@ while folderptr < folderptrend:
|
|||||||
foldername = foldername.decode(encoding="shift-jis", errors="backslashreplace")
|
foldername = foldername.decode(encoding="shift-jis", errors="backslashreplace")
|
||||||
foldername = foldername[:foldername.find(terminator)]
|
foldername = foldername[:foldername.find(terminator)]
|
||||||
|
|
||||||
os.makedirs(f"C:/Users/kaisaan/Downloads/ps2 stuff/lostkefin/DATA/{foldername}", exist_ok=True)
|
os.makedirs(f"{file}/{foldername}", exist_ok=True)
|
||||||
|
|
||||||
logfile.write(f"Current Pointer: {folderptr:X}\tFolder name: {foldername}\tFoldername location: {foldernameloc:X}\tFilename pointer: {foldernameptr:X}\tFolder Order start {folderorderstart}\tFolder file count: {foldercount}\n")
|
return f"Address: {address:X}\tFolder name: {foldername}\tFoldername location: {foldernameloc:X}\tFilename pointer: {foldernameptr:X}\tFolder Order start {folderorderstart}\tFolder file count: {foldercount}\n"
|
||||||
|
|
||||||
|
logfile.write("\nDATA.BIN Folders\n\n")
|
||||||
|
|
||||||
|
folderptrstart = 0x001875E0
|
||||||
|
folderptrend = 0x00187A18
|
||||||
|
|
||||||
|
folderptr = folderptrstart
|
||||||
|
|
||||||
|
while folderptr < folderptrend:
|
||||||
|
logfile.write(f"{extractfolder(folderptr, "DATA")}")
|
||||||
|
|
||||||
folderptr += 12
|
folderptr += 12
|
||||||
|
|
||||||
|
# DATA0.BIN extractions
|
||||||
|
|
||||||
|
fileorder = 0
|
||||||
|
|
||||||
|
fileptrstart = 0x187A40
|
||||||
|
fileptrend = 0x18E7C0
|
||||||
|
|
||||||
|
fileptr = fileptrstart
|
||||||
|
|
||||||
|
logfile.write("\nDATA.BIN Files\n\n")
|
||||||
|
|
||||||
|
while fileptr < fileptrend:
|
||||||
|
|
||||||
|
logfile.write(f"{extractfile(fileptr, "DATA0")}\tindex {fileorder}\n")
|
||||||
|
|
||||||
|
fileptr += 16
|
||||||
|
fileorder += 1
|
Loading…
Reference in New Issue
Block a user