Example #1
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.ID)
     s.u32(0)
     clip_stream = BytesIO()
     self.clip.write(clip_stream)
     s.u32(clip_stream.tell())
     clip_stream.seek(0, SEEK_SET)
     clip_ptr = StreamPtr.begin_write(s, True)
     ik_ptr = StreamPtr.begin_write(s, True)
     actor_ptr = StreamPtr.begin_write(s, True)
     event_ptr = StreamPtr.begin_write(s, True)
     s.u32(self.unknown1)
     s.u32(self.unknown2)
     vector_ptr = StreamPtr.begin_write(s, True)
     for i in range(16): s.u8(self.unknown3[i])
     clip_ptr.end()
     stream.write(clip_stream.read())
     s.align(char=self.PADDING_CHAR)
     if self.ik_info is not None:
         ik_ptr.end()
         self.ik_info.write(stream)
         s.align(char=self.PADDING_CHAR)
     actor_ptr.end()
     s.zs(self.actor_name)
     s.align(char=self.PADDING_CHAR)
     event_ptr.end()
     self.event_table.write(stream)
     s.align(char=self.PADDING_CHAR)
     vector_ptr.end()
     for i in range(4): s.f32(self.vector[i])
Example #2
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.ID)
     s.u32(0)
     clip_stream = BytesIO()
     self.clip.write(clip_stream)
     s.u32(clip_stream.tell())
     clip_stream.seek(0, SEEK_SET)
     clip_ptr = StreamPtr.begin_write(s, True)
     ik_ptr = StreamPtr.begin_write(s, True)
     actor_ptr = StreamPtr.begin_write(s, True)
     event_ptr = StreamPtr.begin_write(s, True)
     s.u32(self.unknown1)
     s.u32(self.unknown2)
     vector_ptr = StreamPtr.begin_write(s, True)
     for i in range(16):
         s.u8(self.unknown3[i])
     clip_ptr.end()
     stream.write(clip_stream.read())
     s.align(char=self.PADDING_CHAR)
     if self.ik_info != None:
         ik_ptr.end()
         self.ik_info.write(stream)
         s.align(char=self.PADDING_CHAR)
     actor_ptr.end()
     s.zs(self.actor_name)
     s.align(char=self.PADDING_CHAR)
     event_ptr.end()
     self.event_table.write(stream)
     s.align(char=self.PADDING_CHAR)
     vector_ptr.end()
     for i in range(4):
         s.f32(self.vector[i])
Example #3
0
    def write(self, stream, rcol):
        s = StreamWriter(stream)
        len_offset = stream.tell()
        s.u32(0)
        start = stream.tell()
        s.hash(self.name)
        s.u32(rcol.get_block_index(self.material))
        s.u32(rcol.get_block_index(self.vertex_format))
        s.u32(rcol.get_block_index(self.vertex_buffer))
        s.u32(rcol.get_block_index(self.index_buffer))

        flags = self.primitive_type
        flags |= (self.flags << 8)
        s.u32(flags)
        s.u32(self.stream_offset)
        s.i32(self.start_vertex)
        s.i32(self.start_index)
        s.i32(self.min_vertex_index)
        s.i32(self.vertex_count)
        s.i32(self.primitive_count)
        self.bounds.write(stream)
        s.u32(rcol.get_block_index(self.skin_controller))
        s.i32(len(self.bone_references))
        for bone in self.bone_references: s.u32(bone)
        s.u32(rcol.get_block_index(self.scale_offsets))
        s.i32(len(self.states))
        for state in self.states: state.write_rcol(self, rcol)
        if self.parent.version > ModelLod.VERSION.DEFAULT:
            s.hash(self.parent_name)
            for i in range(3): s.f32(self.mirror_plane_normal[i])
            s.f32(self.mirror_plane_offset)
        end = stream.tell()
        stream.seek(len_offset, SEEK_SET)
        s.u32(end - start)
        stream.seek(end, SEEK_SET)
Example #4
0
    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)
Example #5
0
    def write_rcol(self, stream, rcol):
        s = StreamWriter(stream)

        def write_names(slots):
            for slot in slots: s.hash(slot.name)

        def write_bones(slots):
            for slot in slots: s.hash(slot.bone_name)

        def write_transforms(slots):
            for slot in slots:
                s.m43(slot.transform)

        def write_offsets(slots):
            if any(slots):
                s.i32(len(list(filter(lambda slot: slot.offset != None, slots))))
                for i, slot in enumerate(slots):
                    if slot.offset != None:
                        s.i32(i)
                        for i in range(3): s.i32(slot.offset.position)
                        for i in range(3): s.i32(slot.offset.rotation)

        self.write_tag(stream)
        s.u32(self.version)
        s.i32(len(self.routing_slots))
        s.i32(len(self.container_slots))
        s.i32(len(self.effect_slots))
        s.i32(len(self.target_slots))
        s.i32(len(self.cone_slots))

        write_names(self.routing_slots)
        write_bones(self.routing_slots)
        write_transforms(self.routing_slots)
        write_offsets(self.routing_slots)

        write_names(self.container_slots)
        write_bones(self.container_slots)
        for slot in self.container_slots:
            s.u32(slot.flags)
        write_transforms(self.container_slots)
        write_offsets(self.container_slots)

        write_names(self.effect_slots)
        write_bones(self.effect_slots)
        write_transforms(self.effect_slots)
        write_offsets(self.effect_slots)

        write_names(self.target_slots)
        write_bones(self.target_slots)
        write_transforms(self.target_slots)
        write_offsets(self.target_slots)

        write_names(self.cone_slots)
        write_bones(self.cone_slots)
        write_transforms(self.cone_slots)
        for slot in self.cone_slots:
            s.f32(slot.radius)
            s.f32(slot.angle)
        write_offsets(self.cone_slots)
Example #6
0
    def write_rcol(self, stream, rcol):
        s = StreamWriter(stream)

        def write_names(slots):
            for slot in slots: s.hash(slot.name)

        def write_bones(slots):
            for slot in slots: s.hash(slot.bone_name)

        def write_transforms(slots):
            for slot in slots:
                s.m43(slot.transform)

        def write_offsets(slots):
            if any(slots):
                s.i32(len(list(filter(lambda slot: slot.offset != None, slots))))
                for i, slot in enumerate(slots):
                    if slot.offset != None:
                        s.i32(i)
                        for i in range(3): s.i32(slot.offset.position)
                        for i in range(3): s.i32(slot.offset.rotation)

        self.write_tag(stream)
        s.u32(self.version)
        s.i32(len(self.routing_slots))
        s.i32(len(self.container_slots))
        s.i32(len(self.effect_slots))
        s.i32(len(self.target_slots))
        s.i32(len(self.cone_slots))

        write_names(self.routing_slots)
        write_bones(self.routing_slots)
        write_transforms(self.routing_slots)
        write_offsets(self.routing_slots)

        write_names(self.container_slots)
        write_bones(self.container_slots)
        for slot in self.container_slots:
            s.u32(slot.flags)
        write_transforms(self.container_slots)
        write_offsets(self.container_slots)

        write_names(self.effect_slots)
        write_bones(self.effect_slots)
        write_transforms(self.effect_slots)
        write_offsets(self.effect_slots)

        write_names(self.target_slots)
        write_bones(self.target_slots)
        write_transforms(self.target_slots)
        write_offsets(self.target_slots)

        write_names(self.cone_slots)
        write_bones(self.cone_slots)
        write_transforms(self.cone_slots)
        for slot in self.cone_slots:
            s.f32(slot.radius)
            s.f32(slot.angle)
        write_offsets(self.cone_slots)
Example #7
0
 def write(self, stream, resources):
     s = StreamWriter(stream)
     s.u32(resources.get_block_index(self.model, RCOL.Reference.PUBLIC))
     s.u32(self.flags)
     s.u16(self.id)
     s.u16(int(self.is_sunshadow))
     s.f32(self.min_z)
     s.f32(self.max_z)
Example #8
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.at[i])
     s.f32(self.falloff_angle)
     s.f32(self.shade_light_rig_multiplier)
     s.f32(self.bottom_angle)
     for i in range(3): s.f32(self.shade_colour[i])
Example #9
0
 def write(self, stream, resources):
     s = StreamWriter(stream)
     s.u32(resources.get_block_index(self.model, RCOL.Reference.PUBLIC))
     s.u32(self.flags)
     s.u16(self.id)
     s.u16(int(self.is_sunshadow))
     s.f32(self.min_z)
     s.f32(self.max_z)
Example #10
0
 def write_rcol(self, stream, rcol):
     self.write_tag(stream)
     s = StreamWriter(stream)
     s.u32(self.version)
     s.tgi(self.rig.key, 'ITG')
     s.f32(self.unknown)
     for i in range(self.RESERVED_COUNT): s.u8(self.reserved[i])
     s.u32(len(self.bone_weights))
     for val in self.bone_weights: s.f32(val)
Example #11
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     self.frame_data_ptr = StreamPtr.begin_write(s)
     s.u32(self.track_key)
     s.f32(self.offset)
     s.f32(self.scale)
     s.u16(self.frame_count)
     self.flags.write(stream)
     s.u8(self.type)
     return self
Example #12
0
    def write(self, stream, resource=None):
        Event.write(self, stream)
        s = StreamWriter(stream)
        s.hash(self.prop_actor_name)
        s.hash(self.object_actor_name)
        s.hash(self.slot_name)
        s.u32(self.unknown4)

        for i in range(4):
            for j in range(4): s.f32(self.matrix[i][j])
Example #13
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     self.frame_data_ptr = StreamPtr.begin_write(s)
     s.u32(self.track_key)
     s.f32(self.offset)
     s.f32(self.scale)
     s.u16(self.frame_count)
     self.flags.write(stream)
     s.u8(self.type)
     return self
Example #14
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.at[i])
     s.f32(self.falloff_angle)
     s.f32(self.shade_light_rig_multiplier)
     s.f32(self.bottom_angle)
     for i in range(3):
         s.f32(self.shade_colour[i])
Example #15
0
 def write_rcol(self, stream, rcol):
     self.write_tag(stream)
     s = StreamWriter(stream)
     s.u32(self.version)
     s.tgi(self.rig.key, 'ITG')
     s.f32(self.unknown)
     for i in range(self.RESERVED_COUNT):
         s.u8(self.reserved[i])
     s.u32(len(self.bone_weights))
     for val in self.bone_weights:
         s.f32(val)
Example #16
0
    def write(self, stream, resources=None):
        s = StreamWriter(stream)
        indexedFloats = []
        curves = []
        curveMap = {}
        for t in self.tracks:
            assert isinstance(t, Track)
            for curve in t:
                assert isinstance(curve, Curve)
                if len(curve.frames) > self.max_frame_count:
                    self.max_frame_count = len(curve.frames) + 1
                cdi = CurveDataInfo()
                curve.flags.static = len(curve.frames) == 0
                cdi.frame_count = len(curve.frames)
                cdi.process_frames(curve.frames)
                cdi.flags = curve.flags
                cdi.type = curve.type
                cdi.track_key = t.track_key
                curveMap[cdi] = curve.frames
                curves.append(cdi)

        cCurves = len(curves)
        cFloats = len(indexedFloats)

        #Begin writing...
        s.chars('_pilC3S_')
        s.u32(self.version)
        s.u32(self.unknown1)
        s.f32(self.frame_duration)
        s.u16(self.max_frame_count)
        s.u16(self.unknown2)

        s.u32(cCurves)
        s.u32(cFloats)
        curveOffset = StreamPtr.begin_write(s)
        frameOffset = StreamPtr.begin_write(s)
        nameOffset = StreamPtr.begin_write(s)
        srcNameOffset = StreamPtr.begin_write(s)

        curveOffset.end()
        for curve in curves:
            curve.write(stream)
        nameOffset.end()
        s.zs(self.name)
        srcNameOffset.end()
        s.zs(self.source_file_name)

        frameOffset.end()
        for curve in curves:
            curve.frame_data_ptr.end()
            frames = curveMap[curve]
            for f in frames:
                f.write(stream, curve, indexedFloats)
        return self
Example #17
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.version)
     s.u32(len(self.bones))
     for bone in self.bones:
         s.s7(bone.name, 16, '>')
     s.u32(len(self.bones))
     for bone in self.bones:
         for i in range(3):
             for j in range(4):
                 s.f32(bone[i][j])
Example #18
0
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     s.u16(self.TAG)
     s.u32(self.id)
     s.f32(self.time_code)
     s.f32(self.unknown1)
     s.f32(self.unknown2)
     s.u32(self.unknown3)
     s.u32(len(self.name))
     s.zs(self.name)
     s.align()
Example #19
0
    def write(self, stream, resource=None):
        Event.write(self, stream)
        s = StreamWriter(stream)
        s.hash(self.prop_actor_name)
        s.hash(self.object_actor_name)
        s.hash(self.slot_name)
        s.u32(self.unknown4)

        for i in range(4):
            for j in range(4):
                s.f32(self.matrix[i][j])
Example #20
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.version)
     s.u32(len(self.bones))
     for bone in self.bones:
         s.s7(bone.name, 16, '>')
     s.u32(len(self.bones))
     for bone in self.bones:
         for i in range(3):
             for j in range(4):
                 s.f32(bone[i][j])
Example #21
0
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     s.u16(self.TAG)
     s.u32(self.id)
     s.f32(self.time_code)
     s.f32(self.unknown1)
     s.f32(self.unknown2)
     s.u32(self.unknown3)
     s.u32(len(self.name))
     s.zs(self.name)
     s.align()
Example #22
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.type)
     for i in range(3):
         s.f32(self.origin[i])
     for i in range(3):
         s.f32(self.normal[i])
     for i in range(3):
         s.f32(self.x_axis[i])
     for i in range(3):
         s.f32(self.y_axis[i])
     s.f32(self.pair_offset)
Example #23
0
    def write(self, stream, resources=None):
        s = StreamWriter(stream)
        indexedFloats = []
        curves = []
        curveMap = {}
        for t in self.tracks:
            assert isinstance(t,Track)
            for curve in t:
                assert isinstance(curve,Curve)
                if len(curve.frames) > self.max_frame_count: self.max_frame_count = len(curve.frames) + 1
                cdi = CurveDataInfo()
                curve.flags.static = len(curve.frames) == 0
                cdi.frame_count = len(curve.frames)
                cdi.process_frames(curve.frames)
                cdi.flags = curve.flags
                cdi.type = curve.type
                cdi.track_key = t.track_key
                curveMap[cdi] = curve.frames
                curves.append(cdi)

        cCurves = len(curves)
        cFloats = len(indexedFloats)

        #Begin writing...
        s.chars('_pilC3S_')
        s.u32(self.version)
        s.u32(self.unknown1)
        s.f32(self.frame_duration)
        s.u16(self.max_frame_count)
        s.u16(self.unknown2)

        s.u32(cCurves)
        s.u32(cFloats)
        curveOffset = StreamPtr.begin_write(s)
        frameOffset = StreamPtr.begin_write(s)
        nameOffset = StreamPtr.begin_write(s)
        srcNameOffset = StreamPtr.begin_write(s)

        curveOffset.end()
        for curve in curves:
            curve.write(stream)
        nameOffset.end()
        s.zs(self.name)
        srcNameOffset.end()
        s.zs(self.source_file_name)

        frameOffset.end()
        for curve in curves:
            curve.frame_data_ptr.end()
            frames = curveMap[curve]
            for f in frames: f.write(stream, curve, indexedFloats)
        return self
Example #24
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     self.write_tag(stream)
     s.u32(self.version)
     s.f32(self.framerate)
     cFrames = len(self.frames)
     s.i32(cFrames)
     data_pos = stream.tell() + (cFrames * 4)
     for frame in self.frames:
         s.u32(data_pos)
         data_pos += len(frame)
     for frame in self.frames:
         stream.write(frame)
Example #25
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     self.write_tag(stream)
     s.u32(self.version)
     s.f32(self.framerate)
     cFrames = len(self.frames)
     s.i32(cFrames)
     data_pos = stream.tell() + (cFrames * 4)
     for frame in self.frames:
         s.u32(data_pos)
         data_pos += len(frame)
     for frame in self.frames:
         stream.write(frame)
Example #26
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     self.write_tag(stream)
     s.u32(self.version)
     s.i32(len(self.lods))
     self.bounds.write(stream)
     if self.version >= self.VERSION.EXTENDED:
         s.i32(len(self.extra_bounds))
         for extra in self.extra_bounds:
             extra.write(stream)
         s.u32(self.fade_type)
         s.f32(self.custom_fade_distance)
     for lod in self.lods:
         lod.write_rcol(stream, rcol)
Example #27
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     self.write_tag(stream)
     s.u32(self.version)
     s.i32(len(self.lods))
     self.bounds.write(stream)
     if self.version >= self.VERSION.EXTENDED:
         s.i32(len(self.extra_bounds))
         for extra in self.extra_bounds:
             extra.write(stream)
         s.u32(self.fade_type)
         s.f32(self.custom_fade_distance)
     for lod in self.lods:
         lod.write_rcol(stream, rcol)
Example #28
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     self.bounds.clear()
     s.hash(self.name)
     s.i8(self.priority)
     s.u32(self.footprint_type_flags)
     s.i32(len(self.points))
     for point in self.points:
         self.bounds.add(point)
         s.f32(point[0])
         s.f32(point[1])
     s.u32(self.allow_intersection_flags)
     s.u32(self.surface_type_flags)
     s.u32(self.surface_attribute_flags)
     s.i8(self.level_offset)
     if self.ftpt.version >= Footprint.VERSION.EXTENDED: s.f32(self.elevation_offset)
     self.bounds.write(stream)
Example #29
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     self.bounds.clear()
     s.hash(self.name)
     s.i8(self.priority)
     s.u32(self.footprint_type_flags)
     s.i32(len(self.points))
     for point in self.points:
         self.bounds.add(point)
         s.f32(point[0])
         s.f32(point[1])
     s.u32(self.allow_intersection_flags)
     s.u32(self.surface_type_flags)
     s.u32(self.surface_attribute_flags)
     s.i8(self.level_offset)
     if self.ftpt.version >= Footprint.VERSION.EXTENDED: s.f32(self.elevation_offset)
     self.bounds.write(stream)
Example #30
0
 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)
Example #31
0
 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)
Example #32
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.at[i])
     s.f32(self.falloff_angle)
     s.f32(self.blur_scale)
Example #33
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.at[i])
     s.f32(self.tube_length)
     s.f32(self.blur_scale)
Example #34
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.transform[i])
     for i in range(3):
         s.f32(self.colour[i])
     s.f32(self.intensity)
Example #35
0
 def write_data(self, stream, keys):
     s = StreamWriter(stream)
     self.pointer.end()
     if self.type_code == self.TYPE.FLOAT:
         if self.size32 == 1:
             s.f32(self.value)
         else:
             for f in self.value: s.f32(f)
     elif self.type_code == self.TYPE.INT:
         if self.size32 == 1:
             s.i32(self.value)
         else:
             for i in self.value: s.i32(i)
     elif self.type_code == self.TYPE.TEXTURE:
         if not keys == None:
             s.u32(keys.get_resource_index(self.value))
             s.u32(0)
             s.u32(0)
             s.u32(0)
         else:
             s.tgi(self.value, 'ITG')
             s.u32(0)
Example #36
0
File: rig.py Project: garthand/s3py
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.position[i])
     for i in range(3):
         s.f32(self.scale[i])
     for i in range(4):
         s.f32(self.orientation[i])
Example #37
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.type)
     for i in range(3): s.f32(self.origin[i])
     for i in range(3): s.f32(self.normal[i])
     for i in range(3): s.f32(self.x_axis[i])
     for i in range(3): s.f32(self.y_axis[i])
     s.f32(self.pair_offset)
Example #38
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3):
         s.f32(self.at[i])
     for i in range(3):
         s.f32(self.right[i])
     s.f32(self.radius)
Example #39
0
    def write(self, stream, rcol):
        s = StreamWriter(stream)
        len_offset = stream.tell()
        s.u32(0)
        start = stream.tell()
        s.hash(self.name)
        s.u32(rcol.get_block_index(self.material))
        s.u32(rcol.get_block_index(self.vertex_format))
        s.u32(rcol.get_block_index(self.vertex_buffer))
        s.u32(rcol.get_block_index(self.index_buffer))

        flags = self.primitive_type
        flags |= (self.flags << 8)
        s.u32(flags)
        s.u32(self.stream_offset)
        s.i32(self.start_vertex)
        s.i32(self.start_index)
        s.i32(self.min_vertex_index)
        s.i32(self.vertex_count)
        s.i32(self.primitive_count)
        self.bounds.write(stream)
        s.u32(rcol.get_block_index(self.skin_controller))
        s.i32(len(self.bone_references))
        for bone in self.bone_references:
            s.u32(bone)
        s.u32(rcol.get_block_index(self.scale_offsets))
        s.i32(len(self.states))
        for state in self.states:
            state.write_rcol(self, rcol)
        if self.parent.version > ModelLod.VERSION.DEFAULT:
            s.hash(self.parent_name)
            for i in range(3):
                s.f32(self.mirror_plane_normal[i])
            s.f32(self.mirror_plane_offset)
        end = stream.tell()
        stream.seek(len_offset, SEEK_SET)
        s.u32(end - start)
        stream.seek(end, SEEK_SET)
Example #40
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     s.u32(self.version)
     s.i32(len(self.deltas))
     for delta in self.deltas:
         s.hash(delta.bone_name)
         for i in range(3): s.f32(delta.offset[i])
         for i in range(3): s.f32(delta.scale[i])
         for i in range(4): s.f32(delta.rotation[i])
Example #41
0
 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)
Example #42
0
 def write_data(self, stream, keys):
     s = StreamWriter(stream)
     self.pointer.end()
     if self.type_code == self.TYPE.FLOAT:
         if self.size32 == 1:
             s.f32(self.value)
         else:
             for f in self.value:
                 s.f32(f)
     elif self.type_code == self.TYPE.INT:
         if self.size32 == 1:
             s.i32(self.value)
         else:
             for i in self.value:
                 s.i32(i)
     elif self.type_code == self.TYPE.TEXTURE:
         if not keys == None:
             s.u32(keys.get_resource_index(self.value))
             s.u32(0)
             s.u32(0)
             s.u32(0)
         else:
             s.tgi(self.value, 'ITG')
             s.u32(0)
Example #43
0
 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)
Example #44
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     s.u32(self.version)
     s.i32(len(self.deltas))
     for delta in self.deltas:
         s.hash(delta.bone_name)
         for i in range(3):
             s.f32(delta.offset[i])
         for i in range(3):
             s.f32(delta.scale[i])
         for i in range(4):
             s.f32(delta.rotation[i])
Example #45
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     s.u32(self.flags)
     s.u32(self.priority)
     s.u32(0)
     s.f32(self.blend_in_time)
     s.f32(self.blend_out_time)
     s.u32(0)
     s.f32(self.speed)
     s.u32(rcol.get_block_index(self.actor, ActorDefinition))
     s.u32(self.timing_priority)
     s.u32(0x00000010)
     for i in range(5): s.u32(0)
     s.u32(DEADBEEF)
     MulticastDecisionGraphNode.write(self, stream, rcol)
Example #46
0
 def write_rcol(self, stream, rcol):
     s = StreamWriter(stream)
     s.u32(self.flags)
     s.u32(self.priority)
     s.u32(0)
     s.f32(self.blend_in_time)
     s.f32(self.blend_out_time)
     s.u32(0)
     s.f32(self.speed)
     s.u32(rcol.get_block_index(self.actor, ActorDefinition))
     s.u32(self.timing_priority)
     s.u32(0x00000010)
     for i in range(5):
         s.u32(0)
     s.u32(DEADBEEF)
     MulticastDecisionGraphNode.write(self, stream, rcol)
Example #47
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.version_major)
     s.u32(self.version_minor)
     s.i32(len(self.bones))
     for bone in self.bones:
         for i in range(3): s.f32(bone.position[i])
         for i in range(4): s.f32(bone.orientation[i])
         for i in range(3): s.f32(bone.scale[i])
         assert bone.name != None, "Bone %s must have a name"
         s.p32(bone.name)
         s.i32(-1 if not bone.opposite in self.bones else self.bones.index(bone.opposite))
         s.i32(-1 if not bone.parent in self.bones else self.bones.index(bone.parent))
         s.u32(FNV32.hash(bone.name))
         s.u32(bone.flags)
     if self.version_major >= 4: s.p32(self.name)
     s.i32(len(self.ik_chains))
     for chain in self.ik_chains:
         chain.write(stream)
Example #48
0
File: rig.py Project: garthand/s3py
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     s.u32(self.version_major)
     s.u32(self.version_minor)
     s.i32(len(self.bones))
     for bone in self.bones:
         for i in range(3):
             s.f32(bone.position[i])
         for i in range(4):
             s.f32(bone.orientation[i])
         for i in range(3):
             s.f32(bone.scale[i])
         assert bone.name != None, "Bone %s must have a name"
         s.p32(bone.name)
         s.i32(-1 if not bone.opposite in self.bones else self.bones.
               index(bone.opposite))
         s.i32(-1 if not bone.parent in self.bones else self.bones.
               index(bone.parent))
         s.u32(FNV32.hash(bone.name))
         s.u32(bone.flags)
     if self.version_major >= 4: s.p32(self.name)
     s.i32(len(self.ik_chains))
     for chain in self.ik_chains:
         chain.write(stream)
Example #49
0
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     for val in self.min:
         s.f32(val)
     for val in self.max:
         s.f32(val)
Example #50
0
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.position[i])
     for i in range(3): s.f32(self.scale[i])
     for i in range(4): s.f32(self.orientation[i])
Example #51
0
 def write(self, stream, resources=None):
     s = StreamWriter(stream)
     s.f32(self.weight)
     s.i32(len(self.decision_graph_nodes))
     for dgn in self.decision_graph_nodes:
         s.u32(resources.get_block_index(dgn))
Example #52
0
 def write(self, stream, resource=None):
     Event.write(self, stream)
     s = StreamWriter(stream)
     s.f32(self.visibility)
Example #53
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.at[i])
     s.f32(self.falloff_angle)
     s.f32(self.blur_scale)
Example #54
0
 def write(self, stream, resource=None):
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.transform[i])
     for i in range(3): s.f32(self.colour[i])
     s.f32(self.intensity)
Example #55
0
 def write(self, stream, tgi):
     s = StreamWriter(stream)
     s.u32(self.age_gender_flags)
     s.f32(self.amount)
     s.u32(tgi.get_resource_index(self.geom))
Example #56
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.at[i])
     for i in range(3): s.f32(self.right[i])
     s.f32(self.radius)
Example #57
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.at[i])
     for i in range(3): s.f32(self.right[i])
     s.f32(self.width)
     s.f32(self.height)
     s.f32(self.falloff_angle)
     s.f32(self.window_top_bottom_angle)
Example #58
0
 def write(self, stream, resource=None):
     Light.write(self, stream)
     s = StreamWriter(stream)
     for i in range(3): s.f32(self.at[i])
     s.f32(self.tube_length)
     s.f32(self.blur_scale)
Example #59
0
 def write(self, stream, resource=None):
     Event.write(self, stream)
     s = StreamWriter(stream)
     s.f32(self.visibility)