Exemple #1
0
 /// <summary>
 /// Constructs a new UnitObject.
 /// </summary>
 /// <param name="reader">The SaveReader to read from.</param>
 /// <param name="entry">The object entry data.</param>
 internal UnitObject(Liberty.SaveIO.SaveReader reader, ObjectEntry entry)
     : base(reader, entry)
 {
     _roWeapons = _weapons.AsReadOnly();
 }
Exemple #2
0
 /// <summary>
 /// Constructs a new VehicleObject.
 /// </summary>
 /// <param name="reader">The SaveReader to read from.</param>
 /// <param name="entry">The object entry data.</param>
 internal VehicleObject(Liberty.SaveIO.SaveReader reader, ObjectEntry entry)
     : base(reader, entry)
 {
 }
Exemple #3
0
        /// <summary>
        /// Reads the data stored in the file header and some of the chunk data.
        /// </summary>
        /// <exception cref="ArgumentException">Thrown if the file format is invalid.</exception>
        /// <seealso cref="Verify"/>
        /// <seealso cref="ReadObjects"/>
        private void Process(Stream stream)
        {
            Liberty.SaveIO.SaveReader reader = new Liberty.SaveIO.SaveReader(stream);

            // Map name
            reader.Seek(8, SeekOrigin.Begin);
            _mapName = reader.ReadAscii();

            // Difficulty
            reader.Seek(0xFAFF, SeekOrigin.Begin);
            _difficulty = (Difficulty)reader.ReadByte();

            // Skulls
            reader.Seek(0xFB0C, SeekOrigin.Begin);
            _skulls = (Skulls)reader.ReadUInt32();

            // Gamertag
            reader.Seek(0x1D668, SeekOrigin.Begin);
            _gamertag = reader.ReadUTF16();

            // Service tag
            reader.Seek(0x1D6AC, SeekOrigin.Begin);
            _serviceTag = reader.ReadUTF16();

            // Gravity
            reader.Seek(0x68EBF4, SeekOrigin.Begin);
            _gravity = reader.ReadFloat();

            // Target locator ammo
            reader.Seek(0x915E1A, SeekOrigin.Begin);
            _targetLocatorAmmo = reader.ReadInt16();

            // Message
            reader.Seek(0x9DF9E0, SeekOrigin.Begin);
            _checkpointMsg = reader.ReadUTF16();

            // Read objects
            Chunk objectChunk = new Chunk(reader, ChunkOffset.Object);

            if (objectChunk.Name != "object")
            {
                throw new ArgumentException("The file format is invalid: the \"object\" chunk is missing or is at the wrong offset");
            }
            ReadObjects(reader, objectChunk);

            // Read players
            Chunk playersChunk = new Chunk(reader, ChunkOffset.Players);

            if (playersChunk.Name != "players")
            {
                throw new ArgumentException("The file format is invalid: the \"players\" chunk is missing or is at the wrong offset");
            }
            ReadPlayers(reader, playersChunk);

            // Read squads
            Chunk squadChunk = new Chunk(reader, ChunkOffset.Squad);

            if (squadChunk.Name != "squad")
            {
                throw new ArgumentException("The file format is invalid: the \"squad\" chunk is missing or is at the wrong offset");
            }
            ReadSquads(reader, squadChunk);

            // Read actors
            Chunk actorChunk = new Chunk(reader, ChunkOffset.Actor);

            if (actorChunk.Name != "actor")
            {
                throw new ArgumentException("The file format is invalid: the \"actor\" chunk is missing or is at the wrong offset");
            }
            ReadActors(reader, actorChunk);

            // Resolve actor references
            foreach (GameObject obj in _objects)
            {
                UnitObject unit = obj as UnitObject;
                if (unit != null)
                {
                    unit.ResolveActor(_actors);
                }
            }
        }
Exemple #4
0
 /// <summary>
 /// Constructs a new WeaponObject.
 /// </summary>
 /// <param name="reader">The SaveReader to read from.</param>
 /// <param name="entry">The object entry data.</param>
 internal WeaponObject(Liberty.SaveIO.SaveReader reader, ObjectEntry entry)
     : base(reader, entry)
 {
 }
Exemple #5
0
 /// <summary>
 /// Constructs a new EquipmentObject.
 /// </summary>
 /// <param name="reader">The SaveReader to read from.</param>
 /// <param name="entry">The object entry data.</param>
 internal EquipmentObject(Liberty.SaveIO.SaveReader reader, ObjectEntry entry)
     : base(reader, entry)
 {
 }