def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList() tgi.begin_write(stream) if self.version >= 0x00000007: ProductBase.write_presets(stream,self.presets,tgi) self.product_info.write(stream,tgi) s.i32(tgi.get_resource_index(self.model)) s.i32(tgi.get_resource_index(self.diagonal_model)) s.i32(tgi.get_resource_index(self.post_model)) s.i32(self.post_tile_spacing) s.i8(1 if self.can_walk_over else 0) if self.version >= 0x00000008: if self.version >= 0x0000000A: s.i8(1 if self.should_not_get_thick_snow else 0) s.i8(1 if self.snow_post_shape_is_circle else 0) s.f32(self.snow_thickness_post_scale_factor) s.f32(self.snow_thickness_rail_scale_factor) s.f32(self.snow_thickness_post_vertical_offset) s.f32(self.snow_thickness_rail_vertical_offset) s.i8(1 if self.has_wall else 0) if self.version < 0x0000000A or self.has_wall: s.i8(1 if self.raise_fence_geometry_above_wall else 0) s.i32(tgi.get_resource_index(self.wall)) tgi.end_write(stream)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList() tgi.begin_write(stream) for shader_key in self.shader_keys: shader_key.write(stream, tgi) s.u32(tgi.get_resource_index(self.sub_skin_ramp)) s.u32(tgi.get_resource_index(self.tone_ramp)) for texture_key in self.texture_keys: texture_key.write(stream, tgi) s.u8(self.is_dominant)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList() tgi.begin_write(stream) if self.version >= 0x00000003: ProductBase.write_presets(stream,self.presets,tgi) self.product_info.write(stream,tgi) s.i32(tgi.get_resource_index(self.railing_4x_model)) s.i32(tgi.get_resource_index(self.railing_1x_model)) s.i32(tgi.get_resource_index(self.post_model)) tgi.end_write(stream)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = resources use_tgi = not isinstance(tgi, TGIList) if use_tgi: tgi = TGIList(order='IGT', use_length=False, package=resources, count_size=8) tgi.begin_write(self, stream) if self.version >= 7: s.i8(len(self.fabrics)) for fabric in self.fabrics: s.i8(tgi.get_resource_index(fabric)) fabric_len = 0 with BytesIO() as fabric_stream: fabric.write(fabric_stream, tgi) s.u32(fabric_stream.tell()) fabric_stream.seek(0, SEEK_SET) stream.write(fabric_stream.read(-1)) s.u32(self.target_size) s.u32(self.part_type) s.u8(0) s.i32(len(self.steps)) if self.version >= 0x08: s.u8(0) for step in self.steps: self.write_step(stream, tgi, step) if use_tgi: tgi.end_read(stream) else: s.u32(0)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList(package=resources) tgi.begin_write(stream) s.u64(self.locale_key) for indexer in self.indexers: s.u32(tgi.get_resource_index(indexer)) s.u32(0 if not self.is_bi_directional else 1) s.u32(self.cas_panel_group) s.i32(self.sort_index) s.u32(0) tgi.end_read(stream)
def write_rcol(self, stream, rcol): s = StreamWriter(stream) self.write_tag(stream) s.u32(self.version) tgi = TGIList(32, 'TGI') tgi.begin_write(stream) s.hash(self.shader) if self.shader: self.material.write(stream, tgi) s.u32(self.merge_group) s.u32(self.sort_order) s.u32(len(self.vertices)) self.vertex_format.from_vertex(self.vertices[0]) self.vertex_format.write(stream) for vertex in self.vertices: uv_index = 0 for declaration in self.vertex_format.declarations: if declaration.usage == self.VertexFormat.Declaration.USAGE.POSITION: for i in range(3): s.f32(vertex.position) elif declaration.usage == self.VertexFormat.Declaration.USAGE.NORMAL: for i in range(3): s.f32(vertex.normal) elif declaration.usage == self.VertexFormat.Declaration.USAGE.UV: for i in range(2): s.f32(vertex.uv[uv_index]) uv_index += 1 elif declaration.usage == self.VertexFormat.Declaration.USAGE.BLEND_INDEX: for i in range(4): s.i8(vertex.blend_indices) elif declaration.usage == self.VertexFormat.Declaration.USAGE.BLEND_WEIGHT: for i in range(4): s.f32(vertex.blend_weights) elif declaration.usage == self.VertexFormat.Declaration.USAGE.TANGENT: for i in range(3): s.f32(vertex.tangents) elif declaration.usage == self.VertexFormat.Declaration.USAGE.COLOUR: for i in range(4): s.i8(vertex.colour) elif declaration.usage == self.VertexFormat.Declaration.USAGE.ID: s.u32(vertex.id) s.u32(tgi.get_resource_index(self.skin_controller)) s.u32(len(self.bones)) for bone in self.bones: s.u32(bone)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList() tgi.begin_write(stream) self.product_info.write(stream,tgi) s.i8(self.fireplace_width) s.i32(tgi.get_resource_index(self.mantle)) s.i32(tgi.get_resource_index(self.chimney_mantle)) s.i32(tgi.get_resource_index(self.chimney_full_level)) s.i32(tgi.get_resource_index(self.chimney_ground_level)) s.i32(tgi.get_resource_index(self.chimney_body)) s.i32(tgi.get_resource_index(self.chimney_top)) s.i32(tgi.get_resource_index(self.chimney_cap)) tgi.end_write(stream)
def write(self, stream, resource=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList('igt', 8, False) tgi.begin_write(stream) for preset in self.presets: preset.write(stream) s.s7(self.part_name, 16, '>') s.f32(self.display_index) s.u8(self.has_unique_texture_space) s.u32(self.body_type) s.u32(self.part_flags) s.u32(self.age_gender_flags) s.u32(self.clothing_category) s.i8(tgi.get_resource_index(self.naked_cas_part)) s.i8(tgi.get_resource_index(self.base_cas_part)) s.i8(tgi.get_resource_index(self.blend_fat)) s.i8(tgi.get_resource_index(self.blend_fit)) s.i8(tgi.get_resource_index(self.blend_thin)) s.i8(tgi.get_resource_index(self.blend_special)) s.u32(self.draw_layer) s.i8(len(self.sources)) for source in self.sources: s.i8(tgi.get_resource_index(source)) s.i8(len(self.lod_infos)) for lod_info in self.lod_infos: lod_info.write(stream) s.i8(len(self.diffuse_refs)) for diffuse_ref in self.diffuse_refs: s.i8(tgi.get_resource_index(diffuse_ref)) s.i8(len(self.specular_refs)) for specular_ref in self.specular_refs: s.i8(tgi.get_resource_index(specular_ref)) s.u8(len(self.secondary_diffuse_refs)) for block in self.secondary_diffuse_refs: s.u8(tgi.get_resource_index(block)) s.u8(len(self.secondary_specular_refs)) for block in self.secondary_specular_refs: s.u8(tgi.get_resource_index(block)) s.u8(len(self.slot_poses)) for block in self.slot_poses: s.u8(tgi.get_resource_index(block)) s.s7(self.shoe_material, 16, '>') tgi.end_write(stream)
def write(self, stream, resources=None): s = StreamWriter(stream) s.u32(self.version) tgi = TGIList() tgi.begin_write(stream) ProductBase.write_presets(stream,self.presets,tgi) if self.version >= 0x00000016: s.s7(self.instance_name,size=16,order='>') self.product_info.write(stream,tgi) s.i32(tgi.get_resource(self.object_component)) s.u32(self.object_type_flags) if self.version >= 0x000001A: s.u32(self.object_type_flags_2) s.u32(self.wall_placement_flags) s.u32(self.movement_flags) s.i32(self.num_wall_cutout_tiles_per_level) s.i32(self.num_levels) s.i8(len(self.wall_masks)) for wall_mask in self.wall_masks: wall_mask.write(stream,tgi) s.i8(1 if self.script_enabled else 0) s.i32(tgi.get_resource_index(self.diagonal_object)) s.hash(self.ambiance_type) s.u32(self.room_flags) s.u32(self.function_category_flags) s.u64(self.sub_category_flags) if self.version >= 0x0000001C: s.u64(self.sub_category_flags_2) s.u64(self.sub_room_flags) s.u32(self.build_category_flags) s.i32(tgi.get_resource_index(self.wall_cutout_texture)) if self.version >= 0x00000017: s.i32(tgi.get_resource_index(self.floor_cutout_texture)) s.i32(self.floor_cutout_level_offset) s.f32(self.floor_cutout_bounds_length ) if self.version >= 0x00000020: s.f32(self.floor_cutout_bounds_width ) if self.version >= 0x0000021: s.f32(self.floor_cutout_offset_x ) s.f32(self.floor_cutout_offset_z ) if self.version >= 0x00000018: s.i32(len(self.shell_states)) for shell_state in self.shell_states: s.hash(shell_state) if self.version >= 0x00000019: s.i32(tgi.get_resource_index(self.shell_level_below )) if self.version >= 0x0000001B: s.i32(tgi.get_resource_index(self.shell_proxy )) if self.version >= 0x0000001D: s.i32(tgi.get_resource_index(self.blueprint_xml )) if self.version >= 0x0000001E: s.i32(tgi.get_resource_index(self.blueprint_icon )) if self.version >= 0x0000001F: s.f32(self.blueprint_icon_offset_min_x) s.f32(self.blueprint_icon_offset_min_z) s.f32(self.blueprint_icon_offset_max_x) s.f32(self.blueprint_icon_offset_max_z) s.u32(self.slot_placement_flags) s.s7(self.surface_type,size=16,order='>') s.s7(self.source_material,size=16,order='>') s.u32(self.moodlet_given) s.u32(self.moodlet_score) s.u32(5) for rating in self.ratings: rating.write(stream) s.i32(tgi.get_resource_index(self.fallback)) if self.version >= 0x00000022: s.i32(tgi.get_resource_index(self.modular_arch_end_east_model)) s.i32(tgi.get_resource_index(self.modular_arch_end_east_model)) s.i32(tgi.get_resource_index(self.modular_arch_connecting_model)) s.i32(tgi.get_resource_index(self.modular_arch_single_model)) tgi.end_write(stream)