first commit
This commit is contained in:
commit
acd31cdf9d
73 changed files with 650543 additions and 0 deletions
182
parsers/ai.py
Normal file
182
parsers/ai.py
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
||||
|
||||
import kaitaistruct
|
||||
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
||||
|
||||
|
||||
if getattr(kaitaistruct, 'API_VERSION', (0, 9)) < (0, 9):
|
||||
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
||||
|
||||
class AssetIndex(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.type_mapping_count = self._io.read_u4le()
|
||||
self.type_mapping = []
|
||||
for i in range(self.type_mapping_count):
|
||||
self.type_mapping.append(AssetIndex.TypeMappingEntry(self._io, self, self._root))
|
||||
|
||||
self.asset_count = self._io.read_u4le()
|
||||
self.assets = []
|
||||
for i in range(self.asset_count):
|
||||
self.assets.append(AssetIndex.AssetInfo(self._io, self, self._root))
|
||||
|
||||
self.dependency_count = self._io.read_u4le()
|
||||
self.magic_31 = self._io.read_u4le()
|
||||
self.magic_32 = self._io.read_u4le()
|
||||
self.dependencies = []
|
||||
for i in range(self.dependency_count):
|
||||
self.dependencies.append(AssetIndex.DependencyInfo(self._io, self, self._root))
|
||||
|
||||
self.preload_blocks_count = self._io.read_u4le()
|
||||
self.preload_blocks = []
|
||||
for i in range(self.preload_blocks_count):
|
||||
self.preload_blocks.append(self._io.read_u4le())
|
||||
|
||||
self.preload_shader_blocks_count = self._io.read_u4le()
|
||||
self.preload_shader_blocks = []
|
||||
for i in range(self.preload_shader_blocks_count):
|
||||
self.preload_shader_blocks.append(self._io.read_u4le())
|
||||
|
||||
self.block_group_count = self._io.read_u4le()
|
||||
self.block_groups = []
|
||||
for i in range(self.block_group_count):
|
||||
self.block_groups.append(AssetIndex.BlockGroup(self._io, self, self._root))
|
||||
|
||||
self.block_info_count = self._io.read_u4le()
|
||||
self.block_infos = []
|
||||
for i in range(self.block_info_count):
|
||||
self.block_infos.append(AssetIndex.BlockInfo(self._io, self, self._root))
|
||||
|
||||
|
||||
class BlockInfo(KaitaiStruct):
|
||||
"""Specifies which assets this specific block contains and their offsets in the BLK file."""
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.block_id = self._io.read_u4le()
|
||||
self.asset_offset_count = self._io.read_u4le()
|
||||
self.asset_offsets = []
|
||||
for i in range(self.asset_offset_count):
|
||||
self.asset_offsets.append(AssetIndex.AssetOffsetInfo(self._io, self, self._root))
|
||||
|
||||
|
||||
|
||||
class BlockListMagic(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.block_list = self._io.read_u4le()
|
||||
self.magic = self._io.read_u2le()
|
||||
self.magic_2 = self._io.read_u1()
|
||||
|
||||
|
||||
class TypeMappingEntry(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.name = AssetIndex.String(self._io, self, self._root)
|
||||
self.mapped_to = AssetIndex.String(self._io, self, self._root)
|
||||
|
||||
|
||||
class String(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.len = self._io.read_u4le()
|
||||
self.data = (self._io.read_bytes(self.len)).decode(u"UTF-8")
|
||||
|
||||
|
||||
class DependencyInfo(KaitaiStruct):
|
||||
"""Describes that asset asset_id depends on assets from the specified list."""
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.asset_id = self._io.read_u4le()
|
||||
self.dependency_info_count = self._io.read_u4le()
|
||||
self.dependencies_list = []
|
||||
for i in range(self.dependency_info_count):
|
||||
self.dependencies_list.append(self._io.read_u4le())
|
||||
|
||||
|
||||
|
||||
class AssetOffsetInfo(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.path_hash_pre = self._io.read_u4le()
|
||||
self.offset = self._io.read_u4le()
|
||||
self.size = self._io.read_u4le()
|
||||
|
||||
|
||||
class BlockGroup(KaitaiStruct):
|
||||
"""List of BLKs in a directory specified by the group_id."""
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.group_id = self._io.read_u4le()
|
||||
self.block_count = self._io.read_u4le()
|
||||
self.block_list = []
|
||||
for i in range(self.block_count):
|
||||
self.block_list.append(AssetIndex.BlockListMagic(self._io, self, self._root))
|
||||
|
||||
|
||||
|
||||
class AssetInfo(KaitaiStruct):
|
||||
def __init__(self, _io, _parent=None, _root=None):
|
||||
self._io = _io
|
||||
self._parent = _parent
|
||||
self._root = _root if _root else self
|
||||
self._read()
|
||||
|
||||
def _read(self):
|
||||
self.path_hash_pre = self._io.read_u1()
|
||||
self.path_hash_last = self._io.read_u4le()
|
||||
self.magic = []
|
||||
for i in range(3):
|
||||
self.magic.append(self._io.read_u1())
|
||||
|
||||
self.magic_real = self._io.read_u1()
|
||||
self.magic_2 = self._io.read_u1()
|
||||
self.sub_asset_id = self._io.read_u4le()
|
||||
if self.magic_real == 2:
|
||||
self.magic_conditional = []
|
||||
for i in range(5):
|
||||
self.magic_conditional.append(self._io.read_u1())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue