From cb3f9f284535770893e3bb5219615578098fddcf Mon Sep 17 00:00:00 2001 From: Mc-muffin <8714476+Mc-muffin@users.noreply.github.com> Date: Fri, 19 May 2023 07:35:32 -0500 Subject: [PATCH] Create scpk.py --- scpk.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 scpk.py diff --git a/scpk.py b/scpk.py new file mode 100644 index 0000000..9dd72a2 --- /dev/null +++ b/scpk.py @@ -0,0 +1,49 @@ +from dataclasses import dataclass +import FileIO +import comptolib + +MAGIC = b"SCPK" + + +@dataclass +class scpk_file(): + is_compressed: bool + type: int + data: bytes + + +class Scpk(FileIO): + def __init__(self, path="") -> None: + super().__init__(path, "r+b", "<") + super().__enter__() + if self.read(4) != MAGIC: + raise ValueError("Not an SCPK file!") + + self.unk1 = self.read_uint16() + self.unk2 = self.read_uint16() + file_amount = self.read_uint32() + self.read_uint32() # padding? + self.files = [] + + sizes = [] + for _ in range(file_amount): + sizes.append(self.read_uint32()) + + for size in sizes: + data = self.read(size) + is_compressed = comptolib.is_compressed(data) + c_type = 0 + if is_compressed: + c_type = data[0] + data = comptolib.decompress_data(data) + + if len(data) > 8 and data[0:8] == b"THEIRSCE": + self.rsce = data + + self.files.append(scpk_file(is_compressed, c_type, data)) + + def __getitem__(self, item): + return self.files[item] + + def __len__(self): + return len(self.files)