Exemple #1
0
        internal override void Load(SaveFileReader reader)
        {
            reader.ReadVersion(2);

            base.Load(reader);

            var guardObjectId = reader.ReadObjectID();

            var guardObjectId2 = reader.ReadObjectID();

            var guardPosition = reader.ReadVector3();

            var guardPolygonTriggerName = reader.ReadAsciiString();
        }
Exemple #2
0
        internal override void Load(SaveFileReader reader)
        {
            reader.ReadVersion(1);

            base.Load(reader);

            var containerObjectId = reader.ReadObjectID();
        }
Exemple #3
0
        internal override void Load(SaveFileReader reader)
        {
            reader.ReadVersion(2);

            base.Load(reader);

            var guardObjectId = reader.ReadObjectID();

            var guardPosition = reader.ReadVector3();
        }
Exemple #4
0
        internal void Load(SaveFileReader reader, GameLogic gameLogic, Game game)
        {
            reader.ReadVersion(1);
            reader.ReadVersion(1);

            var unknown1 = reader.ReadUInt32();

            var ghostObjectCount = reader.ReadUInt16();

            for (var i = 0; i < ghostObjectCount; i++)
            {
                var objectId   = reader.ReadObjectID();
                var gameObject = gameLogic.GetObjectById(objectId);

                var ghostObject = new GhostObject(); // TODO
                ghostObject.Load(reader, gameLogic, game);
            }
        }
Exemple #5
0
        internal void Load(SaveFileReader reader, GameLogic gameLogic, Game game)
        {
            reader.ReadVersion(1);
            reader.ReadVersion(1);

            var objectId = reader.ReadObjectID();

            _gameObject = gameLogic.GetObjectById(objectId);

            _geometryType = reader.ReadEnum <ObjectGeometry>();

            // Sometimes there's a 0xC0, when it should be 0x0.
            _geometryIsSmall = reader.ReadByte() == 1;

            _geometryMajorRadius = reader.ReadSingle();
            _geometryMinorRadius = reader.ReadSingle();

            _angle    = reader.ReadSingle();
            _position = reader.ReadVector3();

            var unknown6 = reader.ReadUInt32();

            if (unknown6 != 0)
            {
                throw new InvalidDataException();
            }

            var unknown7 = reader.ReadUInt32();

            if (unknown7 != 0)
            {
                throw new InvalidDataException();
            }

            var unknown8 = reader.ReadUInt32();

            if (unknown8 != 0)
            {
                throw new InvalidDataException();
            }

            for (var i = 0; i < 16; i++)
            {
                var numModels = reader.ReadByte();

                if (numModels > 0 && i != 2)
                {
                    throw new InvalidDataException();
                }

                var modelInstances = new ModelInstance[numModels];

                for (var j = 0; j < numModels; j++)
                {
                    var modelName = reader.ReadAsciiString();

                    var model         = game.AssetStore.Models.GetByName(modelName);
                    var modelInstance = model.CreateInstance(game.AssetStore.LoadContext);
                    modelInstances[j] = modelInstance;

                    var scale = reader.ReadSingle();
                    if (scale != 1.0f)
                    {
                        throw new InvalidDataException();
                    }

                    var houseColor = reader.ReadColorRgba();
                    // TODO: Use house color.

                    reader.ReadVersion(1);

                    var modelTransform = reader.ReadMatrix4x3Transposed();

                    modelInstance.SetWorldMatrix(modelTransform.ToMatrix4x4());

                    var numMeshes = reader.ReadUInt32();
                    if (numMeshes > 0 && numMeshes != model.SubObjects.Length)
                    {
                        throw new InvalidDataException();
                    }

                    for (var k = 0; k < numMeshes; k++)
                    {
                        var meshName      = reader.ReadAsciiString();
                        var meshBool      = reader.ReadBoolean();
                        var meshTransform = reader.ReadMatrix4x3Transposed();

                        if (meshName != model.SubObjects[k].Name)
                        {
                            throw new InvalidDataException();
                        }

                        // TODO: meshTransform is actually absolute, not relative.
                        modelInstance.RelativeBoneTransforms[k] = meshTransform.ToMatrix4x4();
                    }
                }
            }

            var unknown = reader.ReadBoolean();

            if (unknown)
            {
                reader.ReadByte();
                reader.ReadUInt32();
            }
        }
Exemple #6
0
        internal void Load(SaveFileReader reader)
        {
            reader.ReadVersion(1);

            var id = reader.ReadUInt32();

            if (id != Id)
            {
                throw new InvalidDataException();
            }

            var numObjects = reader.ReadUInt16();

            for (var i = 0; i < numObjects; i++)
            {
                ObjectIds.Add(reader.ReadObjectID());
            }

            for (var i = 0; i < 1; i++)
            {
                var unknownByte = reader.ReadByte();
                if (unknownByte != 0)
                {
                    throw new InvalidDataException();
                }
            }

            _enteredOrExitedPolygonTrigger = reader.ReadBoolean();

            _isAlive = reader.ReadBoolean();

            for (var i = 0; i < 5; i++)
            {
                var unknown1 = reader.ReadBoolean();
                if (unknown1 != false)
                {
                    throw new InvalidDataException();
                }
            }

            _numDestroyedSomething = reader.ReadUInt32();

            var unknown11 = reader.ReadUInt32();

            if (unknown11 != 0 && unknown11 != ObjectIds.Count)
            {
                throw new InvalidDataException();
            }

            var waypointID = reader.ReadUInt32();

            var unknown13 = reader.ReadUInt16();

            if (unknown13 != 16)
            {
                throw new InvalidDataException();
            }

            for (var i = 0; i < unknown13; i++)
            {
                var unknown19 = reader.ReadBoolean();
                if (unknown19 != false)
                {
                    //throw new InvalidDataException();
                }
            }

            var unknown14 = reader.ReadBoolean();

            if (unknown14 != false)
            {
                throw new InvalidDataException();
            }

            var unknown15 = reader.ReadBoolean();

            if (unknown15 != false)
            {
                throw new InvalidDataException();
            }

            TargetObjectID = reader.ReadObjectID();

            TeamToTeamRelationships.Load(reader);
            TeamToPlayerRelationships.Load(reader);
        }
Exemple #7
0
        internal void Load(SaveFileReader reader)
        {
            reader.ReadVersion(1);

            var id = reader.ReadUInt32();

            if (id != ID)
            {
                throw new InvalidDataException();
            }

            var numObjects = reader.ReadUInt16();

            for (var i = 0; i < numObjects; i++)
            {
                ObjectIds.Add(reader.ReadObjectID());
            }

            for (var i = 0; i < 2; i++)
            {
                var unknown1 = reader.ReadBoolean();
                if (unknown1 != false)
                {
                    throw new InvalidDataException();
                }
            }

            var unknown2 = reader.ReadBoolean();

            if (unknown2 != true)
            {
                //throw new InvalidDataException();
            }

            for (var i = 0; i < 5; i++)
            {
                var unknown1 = reader.ReadBoolean();
                if (unknown1 != false)
                {
                    throw new InvalidDataException();
                }
            }

            var unknown10 = reader.ReadUInt32();

            if (unknown10 != 0)
            {
                throw new InvalidDataException();
            }

            var unknown11 = reader.ReadUInt32();

            if (unknown11 != 0 && unknown11 != ObjectIds.Count)
            {
                throw new InvalidDataException();
            }

            var waypointID = reader.ReadUInt32();

            var unknown13 = reader.ReadUInt16();

            if (unknown13 != 16)
            {
                throw new InvalidDataException();
            }

            for (var i = 0; i < unknown13; i++)
            {
                var unknown19 = reader.ReadBoolean();
                if (unknown19 != false)
                {
                    //throw new InvalidDataException();
                }
            }

            var unknown14 = reader.ReadBoolean();

            if (unknown14 != false)
            {
                throw new InvalidDataException();
            }

            var unknown15 = reader.ReadBoolean();

            if (unknown15 != false)
            {
                throw new InvalidDataException();
            }

            TargetObjectID = reader.ReadObjectID();

            TeamToTeamRelationships.Load(reader.Inner);
            TeamToPlayerRelationships.Load(reader.Inner);
        }