internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistInt32(ref _unknown1);
            reader.PersistInt32(ref _unknown2);
        }
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistVector3(ref _unknownPos);
            reader.PersistBoolean(ref _unknownBool);
        }
Beispiel #3
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(2);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistFrame(ref _unknownFrame);
            reader.PersistBoolean(ref _unknownBool1);
            reader.PersistBoolean(ref _unknownBool2);
        }
Beispiel #4
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(2);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.SkipUnknownBytes(12);

            reader.PersistUInt32(ref _unknown);
        }
Beispiel #5
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistBoolean(ref _unknown1);
            reader.PersistObject(_collideWeapon);
            reader.PersistBoolean(ref _unknown2);
        }
Beispiel #6
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistUInt32(ref _radarExtendEndFrame);
            reader.PersistBoolean(ref _isRadarExtended);
            reader.PersistBoolean(ref _isRadarExtending);
        }
Beispiel #7
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(4);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistVector3(ref _unknownPosition);
            reader.PersistUInt32(ref _stateMaybe);
            reader.PersistFrame(ref _unknownFrame1);

            var unknownInt1 = int.MaxValue;

            reader.PersistInt32(ref unknownInt1);
            if (unknownInt1 != int.MaxValue)
            {
                throw new InvalidStateException();
            }

            reader.PersistObjectID(ref _launcherObjectId);
            reader.PersistObjectID(ref _unknownObjectId);
            reader.PersistBoolean(ref _unknownBool1);
            reader.PersistFrame(ref _unknownFrame2);
            reader.PersistSingle(ref _unknownFloat1);

            var unknownFloat2 = 99999.0f;

            reader.PersistSingle(ref unknownFloat2);
            if (unknownFloat2 != 99999.0f)
            {
                throw new InvalidStateException();
            }

            var weaponTemplateName = _weaponTemplate?.Name;

            reader.PersistAsciiString(ref weaponTemplateName);
            _weaponTemplate = reader.AssetStore.WeaponTemplates.GetByName(weaponTemplateName);

            var exhaustParticleSystemTemplateName = _exhaustParticleSystemTemplate?.Name;

            reader.PersistAsciiString(ref exhaustParticleSystemTemplateName);
            if (reader.Mode == StatePersistMode.Read)
            {
                _exhaustParticleSystemTemplate = reader.AssetStore.FXParticleSystemTemplates.GetByName(exhaustParticleSystemTemplateName);
            }

            reader.PersistBoolean(ref _unknownBool2);
            reader.PersistVector3(ref _currentPositionMaybe);
            reader.PersistInt32(ref _unknownInt2); // 0, 0x20000
            reader.PersistInt32(ref _unknownInt3); // 1960
        }
Beispiel #8
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistObject(_upgradeLogic);
            reader.PersistBoolean(ref _unknown);

            reader.SkipUnknownBytes(13);
        }
Beispiel #9
0
        public override void Persist(StatePersister reader)
        {
            reader.PersistVersion(2);

            reader.BeginObject("Base");
            base.Persist(reader);
            reader.EndObject();

            reader.PersistObjectID(ref _guardObjectId);
            reader.PersistObjectID(ref _guardObjectId2);
            reader.PersistVector3(ref _guardPosition);
            reader.PersistAsciiString(ref _guardPolygonTriggerName);
        }
Beispiel #10
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistUInt32(ref _numShotsFiredAtLastTarget);
            reader.PersistObjectID(ref _lastTargetObjectId);

            reader.SkipUnknownBytes(4);
        }
Beispiel #11
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistFrame(ref _frameSinkStart);
            reader.PersistFrame(ref _frameMidpoint);
            reader.PersistFrame(ref _frameDestruction);
            reader.PersistSingle(ref _slowDeathScale);
            reader.PersistEnumFlags(ref _flags);
        }
Beispiel #12
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistObjectID(ref _launcherObjectId);
            reader.PersistObjectID(ref _targetObjectId);
            reader.PersistUInt32(ref _unknown1);

            reader.PersistArray(
                _unknownFloats,
Beispiel #13
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(2);
            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistVector3(ref _positionSomething);
            reader.PersistUInt32(ref _unknownInt1); // 11
            reader.PersistUInt32(ref _unknownInt2); // 11

            reader.SkipUnknownBytes(12);

            reader.PersistBoolean(ref _unknownBool1);

            reader.SkipUnknownBytes(12);

            reader.PersistUInt32(ref _unknownInt3);
            if (_unknownInt3 != 0x7FFFFFFF)
            {
                throw new InvalidStateException();
            }

            reader.PersistBoolean(ref _unknownBool2);

            reader.PersistUInt32(ref _unknownInt4);
            if (_unknownInt4 != 0x7FFFFFFF)
            {
                throw new InvalidStateException();
            }

            reader.PersistBoolean(ref _unknownBool3);
            reader.PersistBoolean(ref _unknownBool4);

            reader.SkipUnknownBytes(18);

            reader.PersistUInt32(ref _unknownInt5); // 1

            reader.SkipUnknownBytes(8);

            reader.PersistUInt32(ref _unknownInt6);  // 255, probably frameSomething
            reader.PersistUInt32(ref _unknownInt7);  // 255, probably frameSomething
            reader.PersistUInt32(ref _unknownInt8);  // 0
            reader.PersistUInt32(ref _unknownInt9);  // 1
            reader.PersistUInt32(ref _unknownInt10); // 0
            reader.PersistUInt32(ref _unknownInt11); // 6

            reader.PersistBoolean(ref _unknownBool5);
        }
Beispiel #14
0
            public override void Persist(StatePersister reader)
            {
                reader.PersistVersion(1);

                reader.BeginObject("Base");
                base.Persist(reader);
                reader.EndObject();

                reader.PersistVector3(ref _unknownPosition);
                reader.PersistFrame(ref _unknownFrame);
                reader.PersistBoolean(ref _unknownBool1);
                reader.PersistBoolean(ref _unknownBool2);
                reader.PersistBoolean(ref _unknownBool3);
                reader.PersistBoolean(ref _unknownBool4);
            }
Beispiel #15
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistUInt32(ref _frameStart);
            reader.PersistUInt32(ref _frameEnd);

            reader.SkipUnknownBytes(4);

            reader.PersistBoolean(ref _unknown);
        }
Beispiel #16
0
        public override void Persist(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Persist(reader);
            reader.EndObject();

            reader.PersistInt32(ref _unknownInt1);
            reader.PersistInt32(ref _unknownInt2);
            reader.PersistSingle(ref _unknownFloat1);
            reader.PersistSingle(ref _unknownFloat2);

            reader.SkipUnknownBytes(16);
        }
Beispiel #17
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistSingle(ref _unknownFloat1);
            reader.PersistSingle(ref _unknownFloat2);
            reader.PersistSingle(ref _unknownFloat3);
            reader.PersistSingle(ref _unknownFloat4);
            reader.PersistSingle(ref _unknownFloat5);
            reader.PersistUInt16(ref _unknownShort);
            reader.PersistBoolean(ref _isActive);
        }
Beispiel #18
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            var unknownFloat = 1.0f;

            reader.PersistSingle(ref unknownFloat);
            if (unknownFloat != 1.0f)
            {
                throw new InvalidStateException();
            }
        }
Beispiel #19
0
        // TODO

        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistEnum(ref _state);
            reader.PersistFrame(ref _aflameEndFrame);

            reader.SkipUnknownBytes(4);

            reader.PersistFrame(ref _nextDamageFrame);
            reader.PersistSingle(ref _remainingDamageBeforeCatchingFire);
            reader.PersistFrame(ref _startedTakingFlameDamageFrame);
        }
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistBoolean(ref _unknownBool1);
            reader.PersistUInt32(ref _unknownInt1);

            reader.SkipUnknownBytes(4);

            reader.PersistUInt32(ref _unknownInt2);

            reader.SkipUnknownBytes(16);

            var unknown1 = true;

            reader.PersistBoolean(ref unknown1);
            if (!unknown1)
            {
                throw new InvalidStateException();
            }

            reader.SkipUnknownBytes(7);

            reader.PersistUInt32(ref _unknownInt3);
            reader.PersistBoolean(ref _unknownBool2);

            reader.SkipUnknownBytes(1);

            reader.PersistBoolean(ref _unknownBool3);

            var unknown2 = true;

            reader.PersistBoolean(ref unknown2);
            if (!unknown2)
            {
                throw new InvalidStateException();
            }

            reader.PersistSingle(ref _unknownFloat);
        }
Beispiel #21
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistSingle(ref _toppleSpeed);
            reader.PersistSingle(ref _toppleAcceleration);
            reader.PersistVector3(ref _toppleDirection);
            reader.PersistEnum(ref _toppleState);
            reader.PersistSingle(ref _toppleAngle);
            reader.PersistSingle(ref _unknownFloat);

            reader.SkipUnknownBytes(9);

            reader.PersistUInt32(ref _stumpId);
        }
Beispiel #22
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            var unknownInt1 = 1;

            reader.PersistInt32(ref unknownInt1);
            if (unknownInt1 != 1)
            {
                throw new InvalidStateException();
            }

            reader.SkipUnknownBytes(1);

            reader.PersistFrame(ref _unknownFrame);
        }
Beispiel #23
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistFrame(ref _countdownStartFrame);

            reader.PersistUInt32(ref _unknown);
            if (_unknown != 1 && _unknown != 0)
            {
                throw new InvalidStateException();
            }

            reader.PersistFrame(ref _countdownEndFrame);

            reader.SkipUnknownBytes(4);
        }
Beispiel #24
0
        internal override void Load(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            base.Load(reader);
            reader.EndObject();

            reader.PersistUInt32(ref _unknown1);

            reader.SkipUnknownBytes(1);

            ushort unknown2 = 40;

            reader.PersistUInt16(ref unknown2);
            if (unknown2 != 40)
            {
                throw new InvalidStateException();
            }

            reader.SkipUnknownBytes(804);

            reader.PersistArray(
                _positions,
Beispiel #25
0
        public void Persist(StatePersister reader)
        {
            reader.PersistVersion(2);

            reader.BeginObject("Base");
            reader.PersistVersion(1);
            reader.EndObject();

            reader.PersistBoolean(ref _unknownBool);
            if (_unknownBool)
            {
                reader.BeginObject("UnknownThing");

                reader.PersistVersion(1);

                // Matches VertexWaterXGridCellsN and VertexWaterYGridCellsN in GameData.ini
                var gridCellsX = 0;
                reader.PersistInt32(ref gridCellsX);
                var gridCellsY = 0;
                reader.PersistInt32(ref gridCellsY);

                // Don't know why, but this gives the correct length for this array.
                var dataCount = (gridCellsX + 3) * (gridCellsY + 3) * 10;
                reader.SkipUnknownBytes(dataCount);

                reader.EndObject();
            }

            var game = reader.Game;

            var area = game.Scene3D.MapFile.HeightMapData.Area;

            reader.PersistUInt32(ref area);
            if (area != game.Scene3D.MapFile.HeightMapData.Area)
            {
                throw new InvalidStateException();
            }

            var width      = game.Scene3D.MapFile.HeightMapData.Width;
            var height     = game.Scene3D.MapFile.HeightMapData.Height;
            var elevations = game.Scene3D.MapFile.HeightMapData.Elevations;

            reader.BeginArray("Elevations");
            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    var elevation = (byte)elevations[x, y];
                    reader.PersistByteValue(ref elevation);
                    elevations[x, y] = elevation;
                }
            }
            reader.EndArray();

            if (reader.Mode == StatePersistMode.Read)
            {
                // TODO: Not great to create the initial patches,
                // then recreate them here.
                game.Scene3D.Terrain.OnHeightMapChanged();
            }
        }
Beispiel #26
0
        public void Persist(StatePersister reader)
        {
            reader.PersistVersion(1);

            reader.BeginObject("Base");
            reader.PersistVersion(1);
            reader.EndObject();

            var objectId = _gameObject?.ID ?? 0u;

            reader.PersistObjectID(ref objectId);
            if (reader.Mode == StatePersistMode.Read)
            {
                _gameObject = reader.Game.GameLogic.GetObjectById(objectId);
            }

            reader.PersistEnum(ref _geometryType);

            // Sometimes there's a 0xC, which is probably uninitialized data.
            byte geometryIsSmall = _geometryIsSmall ? (byte)1 : (byte)0;

            reader.PersistByte(ref geometryIsSmall);
            _geometryIsSmall = geometryIsSmall == 1;

            reader.PersistSingle(ref _geometryMajorRadius);
            reader.PersistSingle(ref _geometryMinorRadius);
            reader.PersistSingle(ref _angle);
            reader.PersistVector3(ref _position);

            reader.SkipUnknownBytes(12);

            reader.BeginArray("ModelsPerPlayer");
            for (var i = 0; i < Player.MaxPlayers; i++)
            {
                reader.BeginObject();

                byte numModels = (byte)_modelsPerPlayer[i].Count;
                reader.PersistByte(ref numModels);

                reader.BeginArray("Models");
                for (var j = 0; j < numModels; j++)
                {
                    reader.BeginObject();

                    var modelName = reader.Mode == StatePersistMode.Write
                        ? _modelsPerPlayer[i][j].Model.Name
                        : "";
                    reader.PersistAsciiString(ref modelName);

                    Model         model;
                    ModelInstance modelInstance;
                    if (reader.Mode == StatePersistMode.Read)
                    {
                        model         = reader.AssetStore.Models.GetByName(modelName);
                        modelInstance = model.CreateInstance(reader.AssetStore.LoadContext);

                        _modelsPerPlayer[i].Add(modelInstance);
                    }
                    else
                    {
                        modelInstance = _modelsPerPlayer[i][j];
                        model         = modelInstance.Model;
                    }

                    var scale = 1.0f;
                    reader.PersistSingle(ref scale);
                    if (scale != 1.0f)
                    {
                        throw new InvalidStateException();
                    }

                    reader.PersistColorRgba(ref modelInstance.HouseColor, "HouseColor");

                    reader.PersistVersion(1);

                    var modelTransform = reader.Mode == StatePersistMode.Write
                        ? Matrix4x3.FromMatrix4x4(modelInstance.GetWorldMatrix())
                        : Matrix4x3.Identity;
                    reader.PersistMatrix4x3(ref modelTransform, readVersion: false);

                    if (reader.Mode == StatePersistMode.Read)
                    {
                        modelInstance.SetWorldMatrix(modelTransform.ToMatrix4x4());
                    }

                    var numMeshes = (uint)model.SubObjects.Length;
                    reader.PersistUInt32(ref numMeshes);
                    if (numMeshes > 0 && numMeshes != model.SubObjects.Length)
                    {
                        throw new InvalidStateException();
                    }

                    reader.BeginArray("Meshes");
                    for (var k = 0; k < numMeshes; k++)
                    {
                        reader.BeginObject();

                        var meshName = model.SubObjects[k].FullName;
                        reader.PersistAsciiString(ref meshName);

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

                        reader.PersistBoolean(ref modelInstance.UnknownBools[k], "UnknownBool");

                        var meshTransform = reader.Mode == StatePersistMode.Write
                            ? Matrix4x3.FromMatrix4x4(modelInstance.RelativeBoneTransforms[model.SubObjects[k].Bone.Index])
                            : Matrix4x3.Identity;
                        reader.PersistMatrix4x3(ref meshTransform, readVersion: false);

                        if (reader.Mode == StatePersistMode.Read)
                        {
                            // TODO: meshTransform is actually absolute, not relative.
                            modelInstance.RelativeBoneTransforms[model.SubObjects[k].Bone.Index] = meshTransform.ToMatrix4x4();
                        }

                        reader.EndObject();
                    }
                    reader.EndArray();

                    reader.EndObject();
                }
                reader.EndArray();

                reader.EndObject();
            }
            reader.EndArray();

            reader.PersistBoolean(ref _hasUnknownThing);
            if (_hasUnknownThing)
            {
                reader.PersistByte(ref _unknownByte);
                reader.PersistUInt32(ref _unknownInt);
            }
        }