Example #1
0
        public void AddWarMachine(string warMachine)
        {
            if (!WarMachines.Add(warMachine))
            {
                return;
            }

            int position = BytePosition + Constants.HeroOffsets[warMachine];

            _game.Bytes[position]     = Constants.WarMachines[warMachine];
            _game.Bytes[position + 1] = ON;
            _game.Bytes[position + 2] = ON;
            _game.Bytes[position + 3] = ON;
        }
Example #2
0
        public void RemoveWarMachine(string warMachine)
        {
            if (!WarMachines.Remove(warMachine))
            {
                return;
            }

            int currentBytePos = BytePosition + Constants.HeroOffsets[warMachine];

            _game.Bytes[currentBytePos]     = OFF;
            _game.Bytes[currentBytePos + 1] = OFF;
            _game.Bytes[currentBytePos + 2] = OFF;
            _game.Bytes[currentBytePos + 3] = OFF;
        }
Example #3
0
        public Hero(string name, Game game, int bytePosition)
        {
            Name         = name;
            _game        = game;
            BytePosition = bytePosition;

            for (int i = 0; i < 4; ++i)
            {
                Attributes[i] = _game.Bytes[BytePosition + Constants.HeroOffsets["Attributes"] + i];
            }

            NumOfSkills = _game.Bytes[BytePosition + Constants.HeroOffsets["NumOfSkills"]];
            for (int i = 0; i < 28; ++i)
            {
                var skillSlotIndex = _game.Bytes[BytePosition + Constants.HeroOffsets["SkillSlots"] + i];
                if (skillSlotIndex != 0)
                {
                    Skills[skillSlotIndex - 1]      = Constants.Skills[i];
                    SkillLevels[skillSlotIndex - 1] = _game.Bytes[BytePosition + Constants.HeroOffsets["Skills"] + i];
                }
            }

            for (int i = 0; i < 70; ++i)
            {
                if (_game.Bytes[BytePosition + Constants.HeroOffsets["Spells"] + i] == 1)
                {
                    Spells.Add(Constants.Spells[i]);
                }
            }

            for (int i = 0; i < 7; ++i)
            {
                var code = _game.Bytes[BytePosition + Constants.HeroOffsets["Creatures"] + i * 4];
                if (code != OFF)
                {
                    Creatures[i] = Constants.Creatures[code];
                    var amountBytes = _game.Bytes.AsSpan().Slice(BytePosition + Constants.HeroOffsets["CreatureAmounts"] + i * 4, 4);
                    CreatureAmounts[i] = BinaryPrimitives.ReadInt16LittleEndian(amountBytes);
                }
                else
                {
                    CreatureAmounts[i] = 0;
                }
            }

            foreach (var warMachine in Constants.WarMachines.Names)
            {
                if (_game.Bytes[BytePosition + Constants.HeroOffsets[warMachine]] == Constants.WarMachines[warMachine])
                {
                    WarMachines.Add(warMachine);
                }
            }

            var gears = new List <string>(EquippedArtifacts.Keys);

            foreach (var gear in gears)
            {
                var code = _game.Bytes[BytePosition + Constants.HeroOffsets[gear]];
                if (code != OFF)
                {
                    EquippedArtifacts[gear] = Constants.Artifacts[code];
                }
            }
        }