Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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);
     }
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 10
0
        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();
            }
        }
Ejemplo n.º 11
0
 public LuzPathConfig(BinaryReader reader)
 {
     ConfigName         = new NiString(reader, true, true);
     ConfigTypeAndValue = new NiString(reader, true, true);
 }
Ejemplo n.º 12
0
        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();
                        }
                    }
                }
            }
        }