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; }
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; }
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]; } } }