def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.id: int = filereader.read_uint32()
        self.version_string: SizedCString = SizedCString(filereader)
        self.versionNumber: int = filereader.read_uint32()

        self.name_string: SizedCString = SizedCString(filereader)

        self.unknown1: int = filereader.read_bytes(1)[0]
        self.unknown2: int = filereader.read_bytes(1)[0]
        if self.unknown1 == 0:
            self.unknown3: int = filereader.read_bytes(1)[0]

        self.shermanLevelCount: int = filereader.read_uint32()
        self.shermanLevels: List[R6MAPShermanLevelDefinition] = []
        for _ in range(self.shermanLevelCount):
            newObject = R6MAPShermanLevelDefinition()
            newObject.read(filereader)
            self.shermanLevels.append(newObject)

        self.transitionCount: int = filereader.read_uint32()
        self.transitions: List[R6MAPShermanLevelTransitionDefinition] = []
        for _ in range(self.transitionCount):
            tempTransition = R6MAPShermanLevelTransitionDefinition()
            tempTransition.read(filereader)
            self.transitions.append(tempTransition)

        self.levelHeightsCount: int = filereader.read_uint32()
        self.levelHeights: List[float] = filereader.read_vec_f(
            self.levelHeightsCount * 2)

        self.unknown5Count: int = filereader.read_uint32()
        self.unknown5: List[float] = filereader.read_vec_f(self.unknown5Count)
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.lightSize: int = filereader.read_uint32()
        self.id: int = filereader.read_uint32()

        #Some maps store a version string, others don't, not quite sure why. Also makes unknown6 quite unclear as to whether they are separate fields or not
        self.name_string: SizedCString = SizedCString(filereader)
        if self.name_string.string == "Version":
            self.version_string: SizedCString = self.name_string
            self.versionNumber: int = filereader.read_uint32()

            self.name_string = SizedCString(filereader)
            self.unknown6: int = filereader.read_uint32()
        else:
            self.unknown7: bytes = filereader.read_bytes(3)

        #3x3 matrix = 9 elements
        self.transformMatrix: List[float] = filereader.read_vec_f(9)

        self.position: List[float] = filereader.read_vec_f(3)
        self.color: List[int] = filereader.read_vec_uint32(3)
        self.constantAttenuation: float = filereader.read_float()
        self.linearAttenuation: float = filereader.read_float()
        self.quadraticAttenuation: float = filereader.read_float()
        #maybe?
        self.falloff: float = filereader.read_float()
        self.energy: float = filereader.read_float()
        self.type: int = filereader.read_bytes(1)[0]
Ejemplo n.º 3
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.id: int = filereader.read_uint32()
        self.version_string: SizedCString = SizedCString(filereader)
        self.versionNumber: int = filereader.read_uint32()

        self.name_string: SizedCString = SizedCString(filereader)

        self.unknown1: int = filereader.read_bytes(1)[0]  #A
        self.unknown2: int = filereader.read_bytes(1)[0]  #B
        self.unknown3: int = filereader.read_bytes(1)[0]  #C
        if self.unknown1 == 0:
            self.unknown4: int = filereader.read_bytes(1)[0]  #D

        if self.unknown3 == 1:
            self.unknown5: List[float] = filereader.read_vec_f(6)

        if self.unknown1 == 0 and self.unknown4 == 1:
            self.unknown6: List[float] = filereader.read_vec_f(6)

        self.shermanLevelCount: int = filereader.read_uint32()
        self.shermanLevels: List[RSMAPShermanLevelDefinition] = []
        for _ in range(self.shermanLevelCount):
            newObject = RSMAPShermanLevelDefinition()
            newObject.read(filereader)
            self.shermanLevels.append(newObject)

        self.unknown4Count: int = filereader.read_uint32()

        self.unknown7: float = filereader.read_float()
        self.unknown8: List[List[float]] = []
        for _ in range(self.unknown4Count):
            newUnknown8 = filereader.read_vec_f(2)
            self.unknown8.append(newUnknown8)
Ejemplo n.º 4
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.unknown6 = filereader.read_uint32()

        #read header
        self.name_string = SizedCString(filereader)

        #read vertices
        self.numVertexIndices = filereader.read_uint32()
        self.vertexIndices = filereader.read_vec_uint32(self.numVertexIndices)

        #read faces
        self.numFaceIndices = filereader.read_uint32()
        self.faceIndices = filereader.read_vec_uint32(self.numFaceIndices)

        #read geometryFlags
        self.geometryFlags = filereader.read_uint32()
        self.geometryFlagsEvaluated = RSEGeometryFlags.EvaluateFlags(
            self.geometryFlags)

        #read unknown8
        self.unknown_8_string = SizedCString(filereader)

        #read unknown9
        self.unknown9 = filereader.read_uint32()
Ejemplo n.º 5
0
 def __init__(self):
     super(RSMAPGeometryData, self).__init__()
     self.size: int = 0
     self.id: int = 0
     self.version_string: SizedCString = SizedCString()
     self.versionNumber: int = 0
     self.name_string: SizedCString = SizedCString()
Ejemplo n.º 6
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.parent_room_string: SizedCString = SizedCString(filereader)

        self.name_string: SizedCString = SizedCString(filereader)
        if self.name_string.string == "Version":
            self.version_string: SizedCString = self.name_string
            self.versionNumber: int = filereader.read_uint32()
            self.name_string = SizedCString(filereader)

            self.unknown6: int = filereader.read_bytes(1)[0]

        self.lightType: int = filereader.read_uint32()
        self.direction: List[float] = filereader.read_vec_f(3)
        self.position: List[float] = filereader.read_vec_f(3)
        self.falloff: float = filereader.read_float()
        self.unknown2: List[float] = filereader.read_vec_f(2)
        self.unknown3: List[float] = filereader.read_vec_f(3)

        self.energy: float = filereader.read_float()
        self.diffuseColor: List[float] = filereader.read_vec_f(4)
        self.specularColor: List[float] = filereader.read_vec_f(4)
        self.ambientColor: List[float] = filereader.read_vec_f(4)
        self.constantAttenuation: float = filereader.read_float()
        self.linearAttenuation: float = filereader.read_float()
        self.quadraticAttenuation: float = filereader.read_float()
        self.spotlightConeAngle: float = filereader.read_float()
        self.type: int = filereader.read_bytes(1)[0]
    def read(self, filereader):
        super().read(filereader)

        self.name_string: SizedCString = SizedCString(filereader)

        self.level_A_string: SizedCString = SizedCString(filereader)
        self.level_B_string: SizedCString = SizedCString(filereader)

        self.coords = filereader.read_vec_f(4)
Ejemplo n.º 8
0
    def read_header_info(self, filereader: BinaryFileReader):
        """Reads top level information for this data structure"""
        self.size = filereader.read_uint32()
        self.id = filereader.read_uint32()

        self.version_string = SizedCString(filereader)
        self.versionNumber = filereader.read_uint32()

        self.name_string = SizedCString(filereader)
Ejemplo n.º 9
0
 def read_header_info(self, filereader: BinaryFileReader):
     """Reads top level information for this data structure"""
     self.size = filereader.read_uint32()
     self.ID = filereader.read_uint32()
     self.name_string = SizedCString(filereader)
     #If the version string was actually set to version, then a version number is stored, along with object name
     if self.name_string.string == 'Version':
         self.version_string = self.name_string
         self.versionNumber = filereader.read_uint32()
         self.name_string = SizedCString(filereader)
         self.unknown4 = filereader.read_uint32()
         self.unknown5 = filereader.read_uint32()
Ejemplo n.º 10
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.size = filereader.read_uint32()
        self.id = filereader.read_uint32()

        self.version_string = SizedCString(filereader)
        self.versionNumber = filereader.read_uint32()

        self.name_string = SizedCString(filereader)

        self.geometryData = RSMAPGeometryData()
        self.geometryData.read(filereader)
Ejemplo n.º 11
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.geometryListSize: int = filereader.read_uint32()
        self.id: int = filereader.read_uint32()
        self.geometry_list_string: SizedCString = SizedCString(filereader)
        self.count: int = filereader.read_uint32()
Ejemplo n.º 12
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.name_string: SizedCString = SizedCString(filereader)
        log.debug(self.name_string.string)

        self.coords: List[float] = filereader.read_vec_f(6)
    def read(self, filereader):
        super().read(filereader)

        self.size = filereader.read_uint32()
        self.unknown1 = filereader.read_uint32()
        self.material_list_string = SizedCString(filereader)
        self.numMaterials = filereader.read_uint32()
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.unknown1: int = filereader.read_uint32()
        self.id: int = filereader.read_uint32()

        self.name_string: SizedCString = SizedCString(filereader)
        if self.name_string.string == "Version":
            self.version_string: SizedCString = self.name_string
            self.versionNumber: int = filereader.read_uint32()
            self.name_string = SizedCString(filereader)

        self.unknown2_bytes: bytes = filereader.read_bytes(4)  #ABCD
        self.unknown3: int = filereader.read_uint32()  #U

        self.vertexCount: int = filereader.read_uint32()
        self.vertices: List[List[float]] = []  #coordinate
        for _ in range(self.vertexCount):
            self.vertices.append(filereader.read_vec_f(3))

        self.vertexParamCount: int = filereader.read_uint32()
        self.vertexParams: List[R6VertexParameterCollection] = []  #coordinate2
        for _ in range(self.vertexParamCount):
            newParams = R6VertexParameterCollection()
            newParams.read(filereader)
            self.vertexParams.append(newParams)

        self.faceCount: int = filereader.read_uint32()
        self.faces: List[R6FaceDefinition] = []  #coordinate3
        for _ in range(self.faceCount):
            newFace = R6FaceDefinition()
            newFace.read(filereader)
            self.faces.append(newFace)
        self.unknown5: int = filereader.read_uint32()
        self.unknown6: int = filereader.read_uint32()

        self.unknown_7_string: SizedCString = SizedCString(filereader)

        self.unknown8: int = filereader.read_uint32()
        self.faceIndicesCount: int = filereader.read_uint32()
        self.faceIndices: List[int] = filereader.read_vec_uint32(
            self.faceIndicesCount)

        self.unknown10: int = filereader.read_uint32()
        self.unknown_11_string: SizedCString = SizedCString(filereader)
        self.unknown12: int = filereader.read_uint32()
Ejemplo n.º 15
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.portalSize: int = filereader.read_uint32()
        self.id: int = filereader.read_uint32()

        self.version_string: SizedCString = SizedCString(filereader)
        self.versionNumber: int = filereader.read_uint32()

        self.name_string: SizedCString = SizedCString(filereader)

        self.vertexCount: int = filereader.read_uint32()
        self.vertices: List[List[float]] = []
        for _ in range(self.vertexCount):
            self.vertices.append(filereader.read_vec_f(3))

        self.roomA: int = filereader.read_uint32()
        self.roomB: int = filereader.read_uint32()
Ejemplo n.º 16
0
    def __init__(self):
        super(R6MeshDefinition, self).__init__()
        self.unknown6: int = 0

        self.name_string: SizedCString = SizedCString()

        self.numVertexIndices: int = 0
        self.vertexIndices: List[int] = []

        self.numFaceIndices: int = 0
        self.faceIndices: List[int] = []

        self.geometryFlags: int = 0
        self.geometryFlagsEvaluated: Dict[str, bool] = {}

        self.unknown_8_string: SizedCString = SizedCString()

        self.unknown9: int = 0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.levelNumber: float = filereader.read_float()  #A
        self.floorHeight: float = filereader.read_float()  #B
        self.roomCount: int = filereader.read_uint32()
        self.roomNames: List[SizedCString] = []
        for _ in range(self.roomCount):
            string = SizedCString(filereader)
            self.roomNames.append(string)
Ejemplo n.º 18
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.header_begin_message = SizedCString(filereader)
        self.timePOSIXRaw = filereader.read_uint32()
        #special case handling, some files have a zero timestamp recorded, which datetime.fromtimestamp() doesn't like
        if self.timePOSIXRaw == 0:
            self.time = datetime(1970, 1, 1)
        else:
            self.time = datetime.fromtimestamp(self.timePOSIXRaw)
Ejemplo n.º 19
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.name_string: SizedCString = SizedCString(filereader)

        self.geometryFlags: int = filereader.read_uint32()  #??
        self.geometryFlagsEvaluated: Dict[
            str, bool] = RSEGeometryFlags.EvaluateFlags(self.geometryFlags)

        self.faceCount: int = filereader.read_uint32()
        self.faceIndices: List[int] = filereader.read_vec_uint16(
            self.faceCount)
Ejemplo n.º 20
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.objectSize: int = filereader.read_uint32()
        self.objectType: int = filereader.read_uint32()
        self.version_string: SizedCString = SizedCString(filereader)
        self.versionNumber: int = filereader.read_uint32()
        self.name_string: SizedCString = SizedCString(filereader)

        if self.versionNumber >= self.RS_OBJECT_VERSION:
            self.bytes = filereader.read_bytes(self.objectSize)
        elif self.versionNumber == self.R6_OBJECT_VERSION:
            numberOfBytesToSkip = self.objectSize
            #skip 4 uints
            numberOfBytesToSkip = numberOfBytesToSkip - 4 * 4
            #skip the length of the 2 strings
            numberOfBytesToSkip = numberOfBytesToSkip - self.name_string.string_length
            numberOfBytesToSkip = numberOfBytesToSkip - self.version_string.string_length
            self.bytes = filereader.read_bytes(numberOfBytesToSkip)
        else:
            log.critical("Unsupported Map object version: %d",
                         self.versionNumber)
            return
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.name_string: SizedCString = SizedCString(filereader)
        self.AABB: List[float] = filereader.read_vec_f(6)

        self.unknown2Count: int = filereader.read_uint32()
        self.unknown2: List[float] = filereader.read_vec_f(self.unknown2Count)

        self.hasShermanLevelPlanArea: int = filereader.read_bytes(1)[0]
        if self.hasShermanLevelPlanArea == 1:
            self.shermanLevelPlanArea: R6MAPShermanLevelPlanAreaDefinition = R6MAPShermanLevelPlanAreaDefinition(
            )
            self.shermanLevelPlanArea.read(filereader)
Ejemplo n.º 22
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.name_string: SizedCString = SizedCString(filereader)
        self.transformCount: int = filereader.read_uint32()  # ACount
        self.transforms: List[RSMAPShermanLevelTransformInformation] = []
        for _ in range(self.transformCount):
            transformObj = RSMAPShermanLevelTransformInformation()
            transformObj.read(filereader)
            self.transforms.append(transformObj)

        self.unknown3Count: int = filereader.read_uint32()
        self.unknown3: List[float] = filereader.read_vec_f(self.unknown3Count)

        self.unknown4: int = filereader.read_bytes(1)[0]
Ejemplo n.º 23
0
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.header_begin_message = SizedCString(filereader)
Ejemplo n.º 24
0
 def read_header_info(self, filereader: BinaryFileReader):
     """Reads top level information for this data structure"""
     self.transitionListSize: int = filereader.read_uint32(
     )  #L, moved here to match other header structures
     self.id: int = filereader.read_uint32()
     self.section_string: SizedCString = SizedCString(filereader)
 def __init__(self):
     super().__init__()
     self.size: int = None
     self.unknown1: int = None
     self.material_list_string: SizedCString = SizedCString()
     self.numMaterials: int = None
    def read_header_info(self, filereader: BinaryFileReader):
        """Reads top level information for this data structure"""
        self.lightListSize: int = filereader.read_uint32()
        self.id: int = filereader.read_uint32()

        self.section_string: SizedCString = SizedCString(filereader)
Ejemplo n.º 27
0
 def read(self, filereader: BinaryFileReader):
     super().read(filereader)
     self.end_model_string = SizedCString(filereader)
    def read(self, filereader: BinaryFileReader):
        super().read(filereader)

        self.size = filereader.read_uint32()
        self.ID = filereader.read_uint32()

        self.version_string = SizedCString(filereader)
        if self.version_string.string == 'Version':
            self.versionNumber = filereader.read_uint32()
            self.material_name = SizedCString(filereader)
        else:
            self.material_name = self.version_string

        self.texture_name = SizedCString(filereader)

        self.opacity = filereader.read_float()
        self.emissiveStrength = filereader.read_float()
        self.textureAddressMode = filereader.read_uint32(
        )  #1 = WRAP, 3 = CLAMP. https://docs.microsoft.com/en-au/windows/desktop/direct3d9/d3dtextureaddress

        gameVer = self.get_material_game_version()

        #check if it's a rainbow six file, or rogue spear file
        if gameVer == RSEGameVersions.RAINBOW_SIX:
            # Rainbow Six files typically have material sizes this size, or contain no version number
            self.ambientColorUInt = filereader.read_rgb_color_24bpp_uint()
            self.ambientColorFloat = list(
                normalize_color(self.ambientColorUInt))

            self.diffuseColorUInt = filereader.read_rgb_color_24bpp_uint()
            self.diffuseColorFloat = list(
                normalize_color(self.diffuseColorUInt))

            self.specularColorUInt = filereader.read_rgb_color_24bpp_uint()
            self.specularColorFloat = list(
                normalize_color(self.specularColorUInt))

            self.normalizedColors = False
        elif gameVer == RSEGameVersions.ROGUE_SPEAR:
            #It's a Rogue Spear file
            self.ambientColorFloat = filereader.read_rgba_color_32bpp_float()
            self.ambientColorUInt = list(
                unnormalize_color(self.ambientColorFloat))

            self.diffuseColorFloat = filereader.read_rgba_color_32bpp_float()
            self.diffuseColorUInt = list(
                unnormalize_color(self.diffuseColorFloat))

            self.specularColorFloat = filereader.read_rgba_color_32bpp_float()
            self.specularColorUInt = list(
                unnormalize_color(self.specularColorFloat))

            self.normalizedColors = True
        else:
            log.warning("Unhandled case")

        self.specularLevel = filereader.read_float()
        self.twoSidedRaw = filereader.read_bytes(1)[0]
        #TODO: Find a better way to read floats, maybe make this a function
        self.twoSided = False
        if self.twoSidedRaw > 0:
            self.twoSided = True