--- tags: Parsing --- # UAsset Schema - KaitaiStruct [kaitai.io](https://kaitai.io/) ``` yaml meta: id: uasset title: Unreal Engine Asset file-extension: uasset application: Unreal Engine endian: le seq: - id: tag type: u4 - id: legacy_ver type: s4 - id: ue_ver type: s4 - id: file_ver type: u4 - id: licensee_ver type: u4 - id: custom_versions type: custom_version_table - id: header_size type: u4 - id: package_group type: encoded_string - id: package_flags type: u4 - id: names_chunk type: chunk_pointer - id: exports_chunk type: chunk_pointer - id: imports_chunk type: chunk_pointer - id: depends_offset type: u4 - id: string_assets type: chunk_pointer - id: thumbnail_offset type: u4 - id: guid size: 16 - id: generations type: generation_info_table - id: engine_version_saved type: engine_version - id: compression_flags type: u4 - id: compressed_chunks type: compressed_chunk_table - id: package_source type: u4 - type: u8 #unknown_field, This field isn't present in some older ARK mods if: licensee_ver >= 10 - id: packages_to_cook type: string_table - type: s4 #texture_allocations, Legacy field that is not used anymore if: legacy_ver > -7 - id: asset_registry_data_offset type: u4 - id: bulk_data_start_offset type: u8 - id: world_tile_info_data_offset type: u8 instances: names: pos: names_chunk.offset type: encoded_string repeat: expr repeat-expr: names_chunk.count imports: pos: imports_chunk.offset type: import_table_item repeat: expr repeat-expr: imports_chunk.count exports: pos: exports_chunk.offset type: export_table_item repeat: expr repeat-expr: exports_chunk.count tile_info: pos: world_tile_info_data_offset type: world_tile_info if: (world_tile_info_data_offset != 0) none_name: value: package_group.value types: custom_version_table: seq: - id: count type: u4 - id: items type: custom_version repeat: expr repeat-expr: count custom_version: seq: - id: guid size: 16 - id: version type: u4 - id: friendly_name type: encoded_string generation_info_table: seq: - id: count type: u4 - id: items type: generation_info repeat: expr repeat-expr: count generation_info: seq: - id: export_count type: u4 - id: name_count type: u4 compressed_chunk_table: seq: - id: count type: u4 - id: items type: compressed_chunk repeat: expr repeat-expr: count compressed_chunk: seq: - id: uncompressed_offset type: u4 - id: uncompressed_size type: u4 - id: compressed_offset type: u4 - id: compressed_size type: u4 string_table: seq: - id: count type: u4 - id: items type: encoded_string repeat: expr repeat-expr: count engine_version: seq: - id: major type: u2 - id: minor type: u2 - id: patch type: u2 - id: changelist type: u4 - id: branch type: encoded_string encoded_string: seq: - id: length type: s4 - id: narrow type: strz size: length encoding: utf8 if: length >= 0 - id: wide type: strz size: length * -2 encoding: utf16 if: length < 0 instances: value: value: 'length < 0 ? wide.substring(0, -length - 1) : narrow.substring(0, length - 1)' chunk_pointer: seq: - id: count type: u4 - id: offset type: u4 name_index: seq: - id: index type: u4 - id: instance type: u4 instances: value: value: _root.names[index].value object_index: seq: - id: raw_value type: s4 instances: kind: value: 'raw_value == 0 ? "none" : raw_value < 0 ? "import" : "export"' index: value: 'raw_value < 0 ? -raw_value - 1 : raw_value - 1' if: raw_value != 0 value: value: 'raw_value < 0 ? _root.imports[index] : _root.exports[index]' if: raw_value != 0 import_table_item: seq: - id: package type: name_index - id: class type: name_index - id: namespace type: object_index - id: name type: name_index export_table_item: seq: - id: class type: s4 - id: super type: s4 - id: namespace type: s4 - id: name type: name_index - id: object_flags type: u4 - id: serial_size type: u4 - id: serial_offset type: u4 - id: force_export type: u4 - id: not_for_client type: u4 - id: not_for_server type: u4 - id: guid size: 16 - id: package_flags type: u4 - id: not_for_editor_game type: u4 instances: properties: pos: serial_offset #size: serial_size type: property repeat: until #repeat-expr: 1 repeat-until: _.has_value == false or _index == 2 property: seq: - id: name type: name_index - id: type type: name_index if: has_value - id: size type: u4 if: has_value - id: index type: u4 if: has_value - id: value if: has_value size: size type: switch-on: type.value cases: '"ObjectProperty"': object_index '"NameProperty"': name_index '"FloatProperty"': f4 '"DoubleProperty"': f8 '"BoolProperty"': u1 '"ByteProperty"': u1 '"IntProperty"': s4 '"UInt32Property"': u4 '"StrProperty"': encoded_string '"StringProperty"': encoded_string '"TextProperty"': text_property '"StringAssetReference"': encoded_string '"AssetObjectProperty"': encoded_string '"StructProperty"': encoded_string '"ArrayProperty"': encoded_string '"Guid"': guid '"Vector"': vector '"Vector2D"': vector_2d '"Rotator"': rotator '"Quat"': quat '"Color"': u4 '"LinearColor"': linear_color '"Box"': box '"IntPoint"': encoded_string _: unknown_property instances: has_value: value: name.value != _root.none_name text_property: seq: - id: flags type: u4 - id: history_type type: s1 - id: namespace type: encoded_string - id: key type: encoded_string - id: source_string type: encoded_string unknown_property: instances: value: value: ("<unsupported type " + _parent.type.value + ">") world_tile_info: seq: - type: u8 #unknown_field - id: bounds type: box - id: layer_name type: encoded_string - type: u4 #unknown_field - type: u4 #unknown_field - type: u4 #unknown_field - id: streaming_distance type: s4 - id: distance_streaming_enabled type: u2 box: seq: - id: min type: vector - id: max type: vector - id: is_valid type: u2 vector: seq: - id: 'x' size: 4 - id: 'y' size: 4 - id: 'z' size: 4 vector_2d: seq: - id: 'x' size: 4 - id: 'y' size: 4 int_point: seq: - id: 'x' type: s4 - id: 'y' type: s4 rotator: seq: - id: 'a' size: 4 - id: 'b' size: 4 - id: 'c' size: 4 quat: seq: - id: 'w' size: 4 - id: 'x' size: 4 - id: 'y' size: 4 - id: 'z' size: 4 guid: seq: - id: bytes size: 16 linear_color: seq: - id: 'r' size: 4 - id: 'g' size: 4 - id: 'b' size: 4 - id: 'a' size: 4 struct_property: params: - id: inside_array type: bool seq: - id: name type: name_index - id: value if: has_value type: switch-on: name.value cases: '"ObjectProperty"': object_index '"NameProperty"': name_index '"FloatProperty"': f4 '"DoubleProperty"': f8 '"BoolProperty"': u1 '"ByteProperty"': u1 '"IntProperty"': s4 '"UInt32Property"': u4 '"StrProperty"': encoded_string '"StringProperty"': encoded_string '"TextProperty"': text_property '"StringAssetReference"': encoded_string '"AssetObjectProperty"': encoded_string '"StructProperty"': encoded_string '"ArrayProperty"': encoded_string '"Guid"': guid '"Vector"': vector '"Vector2D"': vector_2d '"Rotator"': rotator '"Quat"': quat '"Color"': u4 '"LinearColor"': linear_color '"Box"': box '"IntPoint"': encoded_string _: unknown_property instances: has_value: value: name.value != _root.none_name ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up