Exemplo n.º 1
0
        def read(self, stream, resource=None):
            """
            """
            s = StreamReader(stream)
            tag = s.chars(4)
            assert tag == self.MAGIC

            self.major_version = s.u32()
            self.minor_version = s.u32()

            self.unknown1 = s.u32()
            self.unknown2 = s.u32()
            self.unknown3 = s.u32()
            self.date_created = s.u32()
            self.date_modified = s.u32()
            self.index_major_version = s.u32()

            self.index_entry_count = s.u32()
            self.index_entry_offset = s.u32()
            self.index_size = s.u32()

            self.hole_count = s.u32()
            self.hole_offset = s.u32()
            self.hole_size = s.u32()

            self.index_minor_version = s.u32()

            self.index_offset = s.u32()
            self.unknown4 = s.u32()
            self.reserved = [0] * 24
            for i in range(24):
                self.reserved[i] = s.u32()
Exemplo n.º 2
0
        def read(self, stream, resource=None):
            """
            """
            s = StreamReader(stream)
            tag = s.chars(4)
            assert tag == self.MAGIC

            self.major_version = s.u32()
            self.minor_version = s.u32()

            self.unknown1 = s.u32()
            self.unknown2 = s.u32()
            self.unknown3 = s.u32()
            self.date_created = s.u32()
            self.date_modified = s.u32()
            self.index_major_version = s.u32()

            self.index_entry_count = s.u32()
            self.index_entry_offset = s.u32()
            self.index_size = s.u32()

            self.hole_count = s.u32()
            self.hole_offset = s.u32()
            self.hole_size = s.u32()

            self.index_minor_version = s.u32()

            self.index_offset = s.u32()
            self.unknown4 = s.u32()
            self.reserved = [0] * 24
            for i in range(24): self.reserved[i] = s.u32()
Exemplo n.º 3
0
    def read(self, stream, resource=None):
        s = StreamReader(stream)
        assert s.chars(4) == self.TAG
        self.version = s.u32()

        cBlends = s.i32()
        cLods = s.i32()
        cPointers = s.i32()
        cVectors = s.i32()
        assert s.i32() == 0x00000008
        assert s.i32() == 0x0000000C
        blend_ptr = StreamPtr.begin_read(s)
        vertex_ptr = StreamPtr.begin_read(s)
        vector_ptr = StreamPtr.begin_read(s)
        blend_ptr.end()
        lod_ptrs = []
        for blend_index in range(cBlends):
            blend = Blend()
            blend.age_gender_flags = s.u32()
            blend.blend_region = s.u32()
            self.blends.append(blend)
            blend.lods = [Blend.LOD() for lod_index in range(cLods)]
            lod_ptrs.append([self.LodPtr(s.u32(), s.u32(), s.u32()) for lod_index in range(cLods)])

        vertex_ptr.end()
        pointers = [self.VertexPtr(s.i16()) for pointer_index in range(cPointers)]
        vector_ptr.end()
        vectors = [[self.unpack(s.i16()) for i in range(3)] for vector_index in range(cVectors)]

        for blend_index, blend in enumerate(self.blends):
            start_vector_ptr = 0
            current_vector_offset = 0
            blend_ptr = lod_ptrs[blend_index]
            for lod_index, lod in enumerate(blend.lods):
                lod_blend_index = blend_index + lod_index
                if lod_blend_index >= len(blend_ptr):
                    print('Skipping missing LOD %s - %s'%(lod_blend_index,len(blend_ptr)))
                    continue
                lod_ptr = blend_ptr[blend_index + lod_index]
                current_vertex_id = lod_ptr.start_vertex_id
                for vector_ptr_index in range(lod_ptr.vertex_count):
                    vertex = Blend.Vertex()
                    vector_ptr = pointers[vector_ptr_index + start_vector_ptr]
                    current_vector_offset += vector_ptr.offset
                    vertex.id = current_vertex_id
                    vertex_vector_offset = 0
                    if vector_ptr.has_position:
                        vertex.position = vectors[current_vector_offset + vertex_vector_offset]
                        vertex_vector_offset += 1
                    if vector_ptr.has_normal:
                        vertex.normal = vectors[current_vector_offset + vertex_vector_offset]
                        vertex_vector_offset += 1
                    current_vertex_id += 1
                    lod.vertices.append(vertex)
                start_vector_ptr += lod_ptr.vertex_count
                current_vector_offset += lod_ptr.vector_count
Exemplo n.º 4
0
    def read(self, stream, resources=None):
        s = StreamReader(stream)
        tag = s.chars(8)
        if not tag == '_pilC3S_': raise Exception("Not a valid _S3Clip_")
        self.version = s.u32()
        self.unknown1 = s.u32()
        self.frame_duration = s.f32()
        self.max_frame_count = s.u16()
        self.unknown2 = s.u16()
        cCurves = s.u32()
        cFloats = s.u32()
        curveOffset = StreamPtr.begin_read(s)
        frameOffset = StreamPtr.begin_read(s)
        nameOffset = StreamPtr.begin_read(s)
        srcNameOffset = StreamPtr.begin_read(s)

        curveOffset.end()
        curves = []
        for curveIndex in range(cCurves):
            cdi = CurveDataInfo()
            cdi.read(stream)
            curves.append(cdi)
        nameOffset.end()
        self.name = s.zs()

        srcNameOffset.end()
        self.source_file_name = s.zs()

        frameOffset.end()
        indexedFloats = []
        for floatIndex in range(cFloats):
            indexedFloats.append(s.f32())
        trackMap = {}
        self.tracks = []
        for curveIndex,cdi in enumerate(curves):
            cdi.frame_data_ptr.end()
            if cdi.track_key not in trackMap.keys():
                t = Track(cdi.track_key)
                trackMap[cdi.track_key] = t
                self.tracks.append(t)
            track = trackMap[cdi.track_key]
            frames = []
            for frameIndex in range(cdi.frame_count):
                f = Frame()
                f.read(stream, cdi, indexedFloats)
                frames.append(f)
            curve = Curve(cdi.type)
            curve.flags = cdi.flags
            curve.frames = frames
            track[curve.type] = curve
        return self
Exemplo n.º 5
0
    def read(self, stream, resources=None):
        s = StreamReader(stream)
        tag = s.chars(8)
        if not tag == '_pilC3S_': raise Exception("Not a valid _S3Clip_")
        self.version = s.u32()
        self.unknown1 = s.u32()
        self.frame_duration = s.f32()
        self.max_frame_count = s.u16()
        self.unknown2 = s.u16()
        cCurves = s.u32()
        cFloats = s.u32()
        curveOffset = StreamPtr.begin_read(s)
        frameOffset = StreamPtr.begin_read(s)
        nameOffset = StreamPtr.begin_read(s)
        srcNameOffset = StreamPtr.begin_read(s)

        curveOffset.end()
        curves = []
        for curveIndex in range(cCurves):
            cdi = CurveDataInfo()
            cdi.read(stream)
            curves.append(cdi)
        nameOffset.end()
        self.name = s.zs()

        srcNameOffset.end()
        self.source_file_name = s.zs()

        frameOffset.end()
        indexedFloats = []
        for floatIndex in range(cFloats):
            indexedFloats.append(s.f32())
        trackMap = {}
        self.tracks = []
        for curveIndex, cdi in enumerate(curves):
            cdi.frame_data_ptr.end()
            if cdi.track_key not in trackMap.keys():
                t = Track(cdi.track_key)
                trackMap[cdi.track_key] = t
                self.tracks.append(t)
            track = trackMap[cdi.track_key]
            frames = []
            for frameIndex in range(cdi.frame_count):
                f = Frame()
                f.read(stream, cdi, indexedFloats)
                frames.append(f)
            curve = Curve(cdi.type)
            curve.flags = cdi.flags
            curve.frames = frames
            track[curve.type] = curve
        return self
Exemplo n.º 6
0
 def read(self, stream, resource=None):
     s = StreamReader(stream)
     assert s.chars(4) == self.TAG
     self.version = s.u32()
     cEvents = s.i32()
     length = s.u32()
     start_offset = s.u32()
     assert (start_offset == 4 and cEvents > 0) or (start_offset == 0 == cEvents)
     self.events = []
     start = stream.tell()
     for event_index in range(cEvents):
         type = s.u16()
         event = Event.get_event_class(type)()
         event.read(stream)
         self.events.append(event)
     actual = stream.tell() - start
Exemplo n.º 7
0
 def read(self, stream, resource=None):
     s = StreamReader(stream)
     assert s.chars(4) == self.TAG
     self.version = s.u32()
     cEvents = s.i32()
     length = s.u32()
     start_offset = s.u32()
     assert (start_offset == 4
             and cEvents > 0) or (start_offset == 0 == cEvents)
     self.events = []
     start = stream.tell()
     for event_index in range(cEvents):
         type = s.u16()
         event = Event.get_event_class(type)()
         event.read(stream)
         self.events.append(event)
     actual = stream.tell() - start
Exemplo n.º 8
0
    def read(self, stream, keys):
        s = StreamReader(stream)
        tag = s.chars(4)
        if not tag == self.TAG_TEXTURES or tag == self.TAG_NO_TEXTURES:
            raise IOError(
                "Invalid data, expected %s or %s, but got %s" % (self.TAG_TEXTURES, self.TAG_NO_TEXTURES, tag))
        zero = s.u32()
        assert zero == 0

        param_len = s.u32()
        cParams = s.i32()
        items = []
        for i in range(cParams):
            item = self.Item()
            item.read_pointer(stream)
            items.append(item)
        start = stream.tell()
        for item in items:
            self.__parameters[item.name] = item.read_data(stream, keys)
        end = stream.tell()
        assert (end - start) == param_len
Exemplo n.º 9
0
    def read(self, stream, keys):
        s = StreamReader(stream)
        tag = s.chars(4)
        if not tag == self.TAG_TEXTURES or tag == self.TAG_NO_TEXTURES:
            raise IOError("Invalid data, expected %s or %s, but got %s" %
                          (self.TAG_TEXTURES, self.TAG_NO_TEXTURES, tag))
        zero = s.u32()
        assert zero == 0

        param_len = s.u32()
        cParams = s.i32()
        items = []
        for i in range(cParams):
            item = self.Item()
            item.read_pointer(stream)
            items.append(item)
        start = stream.tell()
        for item in items:
            self.__parameters[item.name] = item.read_data(stream, keys)
        end = stream.tell()
        assert (end - start) == param_len
Exemplo n.º 10
0
 def read(self, stream, resources=None):
     s = StreamReader(stream)
     assert s.chars(4) == DGN
Exemplo n.º 11
0
 def read(self, stream, resources=None):
     s = StreamReader(stream)
     length = s.u32()
     complateStr = s.chars(length, 16)
     self.unknown = s.u32()
     self.read_xml(complateStr, resources)
Exemplo n.º 12
0
    def read(self, stream, resource=None):
        s = StreamReader(stream)
        assert s.chars(4) == self.TAG
        self.version = s.u32()

        cBlends = s.i32()
        cLods = s.i32()
        cPointers = s.i32()
        cVectors = s.i32()
        assert s.i32() == 0x00000008
        assert s.i32() == 0x0000000C
        blend_ptr = StreamPtr.begin_read(s)
        vertex_ptr = StreamPtr.begin_read(s)
        vector_ptr = StreamPtr.begin_read(s)
        blend_ptr.end()
        lod_ptrs = []
        for blend_index in range(cBlends):
            blend = Blend()
            blend.age_gender_flags = s.u32()
            blend.blend_region = s.u32()
            self.blends.append(blend)
            blend.lods = [Blend.LOD() for lod_index in range(cLods)]
            lod_ptrs.append([
                self.LodPtr(s.u32(), s.u32(), s.u32())
                for lod_index in range(cLods)
            ])

        vertex_ptr.end()
        pointers = [
            self.VertexPtr(s.i16()) for pointer_index in range(cPointers)
        ]
        vector_ptr.end()
        vectors = [[self.unpack(s.i16()) for i in range(3)]
                   for vector_index in range(cVectors)]

        for blend_index, blend in enumerate(self.blends):
            start_vector_ptr = 0
            current_vector_offset = 0
            blend_ptr = lod_ptrs[blend_index]
            for lod_index, lod in enumerate(blend.lods):
                lod_blend_index = blend_index + lod_index
                if lod_blend_index >= len(blend_ptr):
                    print('Skipping missing LOD %s - %s' %
                          (lod_blend_index, len(blend_ptr)))
                    continue
                lod_ptr = blend_ptr[blend_index + lod_index]
                current_vertex_id = lod_ptr.start_vertex_id
                for vector_ptr_index in range(lod_ptr.vertex_count):
                    vertex = Blend.Vertex()
                    vector_ptr = pointers[vector_ptr_index + start_vector_ptr]
                    current_vector_offset += vector_ptr.offset
                    vertex.id = current_vertex_id
                    vertex_vector_offset = 0
                    if vector_ptr.has_position:
                        vertex.position = vectors[current_vector_offset +
                                                  vertex_vector_offset]
                        vertex_vector_offset += 1
                    if vector_ptr.has_normal:
                        vertex.normal = vectors[current_vector_offset +
                                                vertex_vector_offset]
                        vertex_vector_offset += 1
                    current_vertex_id += 1
                    lod.vertices.append(vertex)
                start_vector_ptr += lod_ptr.vertex_count
                current_vector_offset += lod_ptr.vector_count
Exemplo n.º 13
0
 def read(self, stream, resources=None):
     s = StreamReader(stream)
     assert s.chars(4) == DGN