public LuzPropertyPath(BinaryReader reader, uint version, NiString pathName, PathType type) : base(reader, version, pathName, type) { reader.ReadInt32(); Price = reader.ReadInt32(); RentalTime = reader.ReadInt32(); AssociatedZone = reader.ReadUInt64(); DisplayName = new NiString(reader, true, true); DisplayDescription = new NiString(reader, true); reader.ReadInt32(); CloneLimit = reader.ReadInt32(); ReputationMultiplier = reader.ReadSingle(); TimeUnit = (RentalTimeUnit)reader.ReadInt32(); Achievement = (AchievementRequired)reader.ReadInt32(); PlayerZonePoint = new NiVector3(reader, null); MaxBuildHeight = reader.ReadSingle(); }
public LuzCameraPath(BinaryReader reader, uint version, NiString pathName, PathType type) : base(reader, version, pathName, type) { NextPath = new NiString(reader, true, true); if (Version >= 14) { reader.ReadByte(); } }
public LuzPathData(BinaryReader reader, uint version, NiString pathName, PathType type) { Version = version; PathName = pathName; Type = type; Behavior = (PathBehavior)reader.ReadUInt32(); }
public LuzMovingPlatformPath(BinaryReader reader, uint version, NiString pathName, PathType type) : base(reader, version, pathName, type) { if (Version >= 18) { reader.ReadByte(); } else if (Version >= 13) { MovingPlatformSound = new NiString(reader, true, true); } }
public LuzSpawnerPath(BinaryReader reader, uint version, NiString pathName, PathType type) : base(reader, version, pathName, type) { SpawnedLot = reader.ReadInt32(); RespawnTime = reader.ReadInt32(); MaxSpawnCount = reader.ReadInt32(); NumberToMaintain = reader.ReadUInt32(); SpawnerObjectId = reader.ReadInt64(); ActivateSpawnerNetworkOnLoad = new NiBoolean(reader); }
public LuzScene(BinaryReader reader) { FileName = new NiString(reader, false, true); SceneId = reader.ReadByte(); reader.ReadBytes(3); IsAudioScene = new NiBoolean(reader); reader.ReadBytes(3); SceneName = new NiString(reader, false, true); reader.ReadBytes(3); }
public LuzSceneTransition(BinaryReader reader, LuzFile file) { if (file.Version < 0x25) { SceneTransitionName = new NiString(reader, false, true); } var pointCount = file.Version <= 21 || file.Version >= 0x27 ? 2 : 5; TransitionPoints = new LuzSceneTransitionPoint[pointCount]; for (var i = 0; i < pointCount; i++) { TransitionPoints[i] = new LuzSceneTransitionPoint(reader); } }
public Chunk2000(BinaryReader reader) { var startPos = reader.BaseStream.Position; var headerSize = reader.ReadUInt32(); var skySectionAdr = reader.ReadUInt32(); var otherSectionAdr = reader.ReadUInt32(); for (var i = 0; i < (headerSize - 8) / 4; i++) { reader.ReadSingle(); } var idsCount = reader.ReadUInt32(); Ids = new uint[idsCount]; for (var i = 0; i < idsCount; i++) { Ids[i] = reader.ReadUInt32(); reader.ReadSingle(); reader.ReadSingle(); } for (var i = 0; i < 6; i++) { reader.ReadSingle(); } reader.BaseStream.Position = skySectionAdr; SkyFilePaths = new NiString[6]; for (var i = 0; i < 6; i++) { SkyFilePaths[i] = new NiString(reader); } reader.BaseStream.Position = otherSectionAdr; var otherSectionSize = reader.ReadUInt32(); }
public LuzMovingPlatformWaypoint(BinaryReader reader, LuzPathData data) : base(reader, data) { Rotation = new NiQuaternion(reader, null); LockPlayer = new NiBoolean(reader); Speed = reader.ReadSingle(); Wait = reader.ReadSingle(); if (data.Version < 13) { return; } DepartSound = new NiString(reader, true, true); ArriveSound = new NiString(reader, true, true); }
public NiHeader(BinaryReader reader, NiFile niFile) { var num = 0; var position = reader.BaseStream.Position; while (reader.ReadByte() != 0xA) { num++; } reader.BaseStream.Position = position; // // Get NIF file version string // NifVersionString = new string(reader.ReadChars(num)); // Skip byte reader.ReadByte(); // // Get NIF file version // NifVersion = (NiVersion)reader.ReadUInt32(); // // Get Endian type // EndianType = (Endian)reader.ReadByte(); // // Get user version // UserVersion = reader.ReadUInt32(); // // Get block count // BlockInfos = new BlockInfo[reader.ReadUInt32()]; // // Get number of object types // ObjectTypes = new NiString[reader.ReadUInt16()]; // // Read object types // for (var i = 0; i < ObjectTypes.Length; i++) { ObjectTypes[i] = new NiString(new string(reader.ReadChars((int)reader.ReadUInt32()))); } // // Get block types // for (var i = 0; i < BlockInfos.Length; i++) { BlockInfos[i] = new BlockInfo { TypeIndex = reader.ReadUInt16() }; } // // Get block size // foreach (var block in BlockInfos) { block.Size = reader.ReadUInt32(); } // // Get strings // Strings = new NiString[reader.ReadUInt32()]; // // Get string max length // MaxStringLength = reader.ReadUInt32(); // // Read strings // for (var i = 0; i < Strings.Length; i++) { Strings[i] = new NiString(reader); } // // Get groups // Groups = new uint[reader.ReadUInt32()]; for (var i = 0; i < Groups.Length; i++) { Groups[i] = reader.ReadUInt32(); } }
public LuzPathConfig(BinaryReader reader) { ConfigName = new NiString(reader, true, true); ConfigTypeAndValue = new NiString(reader, true, true); }
public LuzFile(string path) { var reader = new BinaryReader(File.OpenRead(path)); Version = reader.ReadUInt32(); if (Version >= 0x24) { reader.ReadUInt32(); } WorldId = reader.ReadUInt32(); if (Version >= 0x26) { SpawnPoint = new NiVector3(reader, null); SpawnRotation = new NiQuaternion(reader, null); } SceneCount = Version < 0x25 ? reader.ReadByte() : reader.ReadUInt32(); Scenes = new LuzScene[SceneCount]; LvlFiles = new LvlFile[SceneCount]; for (var i = 0; i < SceneCount; i++) { Scenes[i] = new LuzScene(reader); Debug.Log(Scenes[i].FileName); LvlFiles[i] = new LvlFile($"{Path.GetDirectoryName(path)}/{Scenes[i].FileName}"); } reader.ReadByte(); TerrainFileName = new NiString(reader, false, true); TerrainFile = new NiString(reader, false, true); TerrainDescription = new NiString(reader, false, true); if (Version >= 0x20) { SceneTransitionCount = reader.ReadUInt32(); Transitions = new LuzSceneTransition[SceneTransitionCount]; for (var i = 0; i < SceneTransitionCount; i++) { Transitions[i] = new LuzSceneTransition(reader, this); } } if (Version < 0x23) { return; } { reader.ReadUInt32(); reader.ReadUInt32(); PathDataCount = reader.ReadUInt32(); PathData = new LuzPathData[PathDataCount]; for (var i = 0; i < PathDataCount; i++) { var version = reader.ReadUInt32(); var name = new NiString(reader, true, true); var type = (PathType)reader.ReadUInt32(); reader.ReadUInt32(); switch (type) { case PathType.Movement: PathData[i] = new LuzPathData(reader, version, name, type); break; case PathType.MovingPlatform: PathData[i] = new LuzMovingPlatformPath(reader, version, name, type); break; case PathType.Property: PathData[i] = new LuzPropertyPath(reader, version, name, type); break; case PathType.Camera: PathData[i] = new LuzCameraPath(reader, version, name, type); break; case PathType.Spawner: PathData[i] = new LuzSpawnerPath(reader, version, name, type); break; case PathType.Showcase: PathData[i] = new LuzPathData(reader, version, name, type); break; case PathType.Race: PathData[i] = new LuzPathData(reader, version, name, type); break; case PathType.Rail: PathData[i] = new LuzPathData(reader, version, name, type); break; default: throw new ArgumentOutOfRangeException(); } var count = reader.ReadUInt32(); PathData[i].Waypoints = new LuzPathWaypoint[count]; for (var j = 0; j < count; j++) { switch (type) { case PathType.Movement: PathData[i].Waypoints[j] = new LuzMovementWaypoint(reader, PathData[i]); break; case PathType.MovingPlatform: PathData[i].Waypoints[j] = new LuzMovingPlatformWaypoint(reader, PathData[i]); break; case PathType.Property: PathData[i].Waypoints[j] = new LuzPathWaypoint(reader, PathData[i]); break; case PathType.Camera: PathData[i].Waypoints[j] = new LuzCameraWaypoint(reader, PathData[i]); break; case PathType.Spawner: PathData[i].Waypoints[j] = new LuzSpawnerWaypoint(reader, PathData[i]); break; case PathType.Showcase: PathData[i].Waypoints[j] = new LuzPathWaypoint(reader, PathData[i]); break; case PathType.Race: PathData[i].Waypoints[j] = new LuzRaceWaypoint(reader, PathData[i]); break; case PathType.Rail: PathData[i].Waypoints[j] = new LuzRailWaypoint(reader, PathData[i]); break; default: throw new ArgumentOutOfRangeException(); } } } } }