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]
def read(self, filereader: BinaryFileReader): super().read(filereader) self.materialIndex: int = filereader.read_uint32() self.faceCount: int = filereader.read_uint32() self.faceNormals: List[List[float]] = [] self.faceDistancesFromOrigin: List[float] = [] for _ in range(self.faceCount): self.faceNormals.append(filereader.read_vec_f(3)) self.faceDistancesFromOrigin.append(filereader.read_float()) self.faceVertexIndices: List[List[int]] = [] for _ in range(self.faceCount): self.faceVertexIndices.append(filereader.read_vec_uint16(3)) self.faceVertexParamIndices: List[List[int]] = [] for _ in range(self.faceCount): self.faceVertexParamIndices.append(filereader.read_vec_uint16(3)) self.vertexParams: RSMAPVertexParameterCollection = RSMAPVertexParameterCollection( ) self.vertexParams.read(filereader)
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)
def read(self, filereader: BinaryFileReader): super().read(filereader) self.vertexCount = filereader.read_uint32() self.vertices = [] for _ in range(self.vertexCount): self.vertices.append(filereader.read_vec_f(3)) self.normalCount = filereader.read_uint32() self.normals = [] self.faceDistancesFromOrigin = [] for _ in range(self.normalCount): self.normals.append(filereader.read_vec_f(3)) self.faceDistancesFromOrigin.append(filereader.read_float()) self.faceCount = filereader.read_uint32() self.faces = [] for _ in range(self.faceCount): faceObject = RSMAPCollisionFaceInformation() faceObject.read(filereader) self.faces.append(faceObject) self.collisionMeshDefinitionsCount = filereader.read_uint32() self.collisionMeshDefinitions = [] for _ in range(self.collisionMeshDefinitionsCount): dataObject = RSMAPCollisionMesh() dataObject.read(filereader) self.collisionMeshDefinitions.append(dataObject)
def read(self, filereader: BinaryFileReader): super().read(filereader) self.normal = filereader.read_vec_f(3) self.UV = filereader.read_vec_f(2) self.unknown10 = filereader.read_float() # no idea? self.color = filereader.read_rgb_color_24bpp_uint()
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)
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: 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