diff --git a/src/library/Syroot.Worms.Armageddon/Scheme.cs b/src/library/Syroot.Worms.Armageddon/Scheme.cs index cc660c0..80c48da 100644 --- a/src/library/Syroot.Worms.Armageddon/Scheme.cs +++ b/src/library/Syroot.Worms.Armageddon/Scheme.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using Syroot.BinaryData; using Syroot.Worms.Core; @@ -23,57 +24,12 @@ namespace Syroot.Worms.Armageddon private const int _objectCount10Step = 44; private const int _objectCountLastStep = 59; - // Lookup tables. - private static readonly Dictionary _mapWaterRiseToRaw = new Dictionary() - { - [0] = 0, - [5] = 1, - [13] = 19, - [20] = 2, - [21] = 55, - [29] = 43, - [37] = 47, - [45] = 3, - [52] = 26, - [53] = 25, - [61] = 27, - [64] = 8, - [69] = 33, - [77] = 13, - [80] = 4, - [84] = 18, - [85] = 23, - [93] = 11, - [101] = 15, - [109] = 29, - [116] = 22, - [117] = 57, - [125] = 5, - [133] = 63, - [141] = 45, - [148] = 30, - [149] = 9, - [157] = 21, - [165] = 17, - [173] = 61, - [180] = 6, - [181] = 39, - [189] = 37, - [197] = 31, - [205] = 51, - [208] = 12, - [212] = 14, - [213] = 41, - [221] = 53, - [229] = 49, - [237] = 35, - [244] = 10, - [245] = 7, - [253] = 59 - }; + // ---- FIELDS ------------------------------------------------------------------------------------------------- - // ---- MEMBERS ------------------------------------------------------------------------------------------------ + private static readonly byte[] _waterRiseRates; + private byte _fallDamage; + private byte _waterRiseIndex; private byte _objectCount; private byte _mineDelay; private byte _turnTime; @@ -87,13 +43,21 @@ namespace Syroot.Worms.Armageddon // ---- CONSTRUCTORS & DESTRUCTOR ------------------------------------------------------------------------------ + static Scheme() + { + // Generate water rise rate lookup array. + _waterRiseRates = new byte[256]; + for (int i = 0; i < 256; i++) + _waterRiseRates[i] = (byte)(Math.Pow(i, 2) * 5 % 256); + } + /// /// Initializes a new instance of the class. /// public Scheme() { Version = SchemeVersion.Extended; - Weapons = new SchemeWeaponSetting[GetWeaponCount()]; + Weapons = new SchemeWeapon[GetWeaponCount()]; } /// @@ -111,6 +75,39 @@ namespace Syroot.Worms.Armageddon // ---- PROPERTIES --------------------------------------------------------------------------------------------- + /// + /// Gets the available mine or oil drum object counts. + /// + public static IEnumerable ValidObjectCounts + { + get + { + for (int i = 1; i < 30; i++) + yield return i; + for (int i = 30; i < 100; i += 5) + yield return i; + for (int i = 100; i <= 250; i += 10) + yield return i; + } + } + + /// + /// Gets the available fall damage percentages. + /// + public static IEnumerable ValidFallDamages + { + get + { + for (int i = 0; i <= 508; i += 4) + yield return i; + } + } + + /// + /// Gets the available unique and ordered water rise rates in pixels. + /// + public static IEnumerable ValidWateRiseRates => _waterRiseRates.Distinct().OrderBy(x => x); + /// /// Gets or sets the of this scheme, controlling whether super weapon settings /// are stored or not. @@ -146,9 +143,22 @@ namespace Syroot.Worms.Armageddon public bool AutomaticReplays { get; set; } /// - /// Gets or sets the percentual amount of fall damage applied, relative to normal fall damage being 100%. + /// Gets or sets the percentual amount of fall damage applied, relative to normal fall damage being 100%. Valid + /// values lie between 0-508, at a granularity of 4. Note that changing this value rounds it down to a valid + /// granularity. /// - public SchemeFallDamage FallDamage { get; set; } + /// Valid settings can be enumerated through . + /// The value is not between 0-508. + public int FallDamage + { + get => _fallDamage; + set + { + if (value < 0 || value > 508) + throw new ArgumentOutOfRangeException(nameof(value), "Fall damage must be between 0-508."); + _fallDamage = (byte)(value >> 2 << 2); + } + } /// /// Gets or sets a value indicating whether worms cannot walk and are mostly stuck at their current position @@ -179,8 +189,26 @@ namespace Syroot.Worms.Armageddon /// /// Gets or sets the amount in pixels which the water will rise between turns after Sudden Death was triggered. + /// Note that changing this value rounds it down to a valid setting. /// - public SchemeWaterRise WaterRiseRate { get; set; } + /// Valid settings can be enumerated through . + public byte WaterRiseRate + { + get => _waterRiseRates[_waterRiseIndex]; + set + { + int smallestDeviation = Int32.MaxValue; + for (int i = 0; i < _waterRiseRates.Length; i++) + { + int deviation = Math.Abs(value - _waterRiseRates[i]); + if (deviation >= 0 && smallestDeviation > deviation) + { + smallestDeviation = deviation; + _waterRiseIndex = (byte)i; + } + } + } + } /// /// Gets or sets the percentual probability of a weapon crate to drop between turns. Negative values might crash @@ -216,9 +244,10 @@ namespace Syroot.Worms.Armageddon public SchemeObjectType ObjectTypes { get; set; } /// - /// Gets or sets the maximum number of objects (mines or oil drums) on the map. Note that setting this value - /// rounds it valid count. + /// Gets or sets the maximum number of objects (mines or oil drums) on the map. Note that changing this value + /// rounds it down to a valid setting. /// + /// Valid settings can be enumerated through . public byte ObjectCount { get => _objectCount; @@ -238,13 +267,14 @@ namespace Syroot.Worms.Armageddon /// /// Gets or sets the number of seconds a mine requires to explode. Can be 1-3 and 5-127 seconds. /// + /// Value is not between 0-127 or 4. public byte MineDelay { get => _mineDelay; set { - if (value == 4 || value > 0x7F) - throw new ArgumentException("Mine delay must be between 0-127 and not be 4.", nameof(value)); + if (value == 4 || value > 127) + throw new ArgumentOutOfRangeException(nameof(value), "Mine delay must be between 0-127 and not be 4."); _mineDelay = value; } } @@ -274,13 +304,14 @@ namespace Syroot.Worms.Armageddon /// /// Gets or sets the turn time in seconds available for the player to move. Must be in the range of 0-127. /// + /// Value is not between 0-127. public byte TurnTime { get => _turnTime; set { - if (value > 0x7F) - throw new ArgumentException("Turn time must be between 0-127.", nameof(value)); + if (value > 127) + throw new ArgumentOutOfRangeException(nameof(value), "Turn time must be between 0-127."); _turnTime = value; } } @@ -294,13 +325,14 @@ namespace Syroot.Worms.Armageddon /// /// Gets or sets the round time before sudden death is triggered between 0-127 minutes. /// + /// Value is not between 0-127. public byte RoundTimeMinutes { get => _roundTimeMinutes; set { - if (value > 0x7F) - throw new ArgumentException("Round time must be between 0-127 minutes.", nameof(value)); + if (value > 127) + throw new ArgumentOutOfRangeException(nameof(value), "Round time must be between 0-127 minutes."); _roundTimeMinutes = value; } } @@ -309,13 +341,14 @@ namespace Syroot.Worms.Armageddon /// Gets or sets the round time before sudden death is triggered in between 0-128 seconds. When 0, /// is used instead. /// + /// Value is not between 0-128. public byte RoundTimeSeconds { get => _roundTimeSeconds; set { - if (value > 0x80) - throw new ArgumentException("Round time must be between 0-128 seconds.", nameof(value)); + if (value > 128) + throw new ArgumentOutOfRangeException(nameof(value), "Round time must be between 0-128 seconds."); _roundTimeSeconds = value; } } @@ -323,13 +356,14 @@ namespace Syroot.Worms.Armageddon /// /// Gets or sets the number of round wins required to win the game. Must not be 0. /// + /// Value is 0. public byte NumberOfWins { get => _numberOfWins; set { if (value == 0) - throw new ArgumentException("Number of wins must not be 0.", nameof(value)); + throw new ArgumentOutOfRangeException(nameof(value), "Number of wins must not be 0."); _numberOfWins = value; } } @@ -392,11 +426,11 @@ namespace Syroot.Worms.Armageddon public bool EnableSuperWeapons { get; set; } /// - /// Gets the array of instances, each mapping to one weapon at the index of - /// the enumeration. Depending on the scheme , super weapons + /// Gets the array of instances, each mapping to one weapon at the index of + /// the enumeration. Depending on the scheme , super weapons /// might not be stored in this array. /// - public SchemeWeaponSetting[] Weapons { get; set; } + public SchemeWeapon[] Weapons { get; set; } // ---- RubberWorm Settings ---- @@ -525,13 +559,14 @@ namespace Syroot.Worms.Armageddon /// Gets or sets the Kaos game scheme mod. 0 for none, 1-5 for the corresponding mod. Configurable with the /// /kaosmod command. /// + /// Value is bigger than 15. public byte RwKaosMod { get => _rwKaosMod; set { - if (value > 0xF) - throw new ArgumentException("Kaos mod must not be greater than 15."); + if (value > 15) + throw new ArgumentOutOfRangeException(nameof(value), "Kaos mod must not be greater than 15."); _rwKaosMod = value; } } @@ -635,13 +670,13 @@ namespace Syroot.Worms.Armageddon RetreatTimeRope = reader.Read1Byte(); ShowRoundTime = reader.ReadBoolean(); AutomaticReplays = reader.ReadBoolean(); - FallDamage = (SchemeFallDamage)(reader.ReadByte() * 50 % 0x100 * 2); + FallDamage = reader.ReadByte() * 50 % 256 * 2; ArtilleryMode = reader.ReadBoolean(); SchemeEditor = reader.ReadEnum(false); StockpilingMode = reader.ReadEnum(true); WormSelectMode = reader.ReadEnum(true); SuddenDeathEvent = reader.ReadEnum(true); - WaterRiseRate = (SchemeWaterRise)(Math.Pow(reader.ReadByte(), 2) * 5 % 0x100); + _waterRiseIndex = reader.Read1Byte(); WeaponCrateProbability = reader.ReadSByte(); DonorCards = reader.ReadBoolean(); HealthCrateProbability = reader.ReadSByte(); @@ -668,10 +703,10 @@ namespace Syroot.Worms.Armageddon EnableSuperWeapons = reader.ReadBoolean(); // Read the weapon settings. Old versions do not store super weapon settings. - Weapons = new SchemeWeaponSetting[64]; + Weapons = new SchemeWeapon[64]; int weaponCount = GetWeaponCount(); for (int i = 0; i < weaponCount; i++) - Weapons[i] = reader.ReadStruct(); + Weapons[i] = reader.ReadStruct(); // Ignore possible unknown WWP trash at the end of the file. @@ -714,13 +749,13 @@ namespace Syroot.Worms.Armageddon writer.Write(RetreatTimeRope); writer.Write(ShowRoundTime); writer.Write(AutomaticReplays); - writer.Write((byte)((int)FallDamage / 4 * 41 % 0x80)); + writer.Write((byte)(FallDamage / 4 * 41 % 128)); writer.Write(ArtilleryMode); writer.WriteEnum(SchemeEditor, false); writer.WriteEnum(StockpilingMode, true); writer.WriteEnum(WormSelectMode, true); writer.WriteEnum(SuddenDeathEvent, true); - writer.Write(_mapWaterRiseToRaw[(byte)WaterRiseRate]); + writer.Write(_waterRiseIndex); writer.Write(WeaponCrateProbability); writer.Write(DonorCards); writer.Write(HealthCrateProbability); @@ -751,7 +786,7 @@ namespace Syroot.Worms.Armageddon // Write the weapon settings. Old versions do not store super weapon settings. int weaponCount = GetWeaponCount(); - foreach (SchemeWeaponSetting weapon in Weapons) + foreach (SchemeWeapon weapon in Weapons) writer.WriteStruct(weapon); } @@ -774,6 +809,8 @@ namespace Syroot.Worms.Armageddon // ---- METHODS (PRIVATE) -------------------------------------------------------------------------------------- + private int GetWeaponCount() => Version == SchemeVersion.Extended ? 64 : 45; + private void LoadObjectTypesAndCount(BinaryStream reader) { byte raw = reader.Read1Byte(); @@ -800,31 +837,15 @@ namespace Syroot.Worms.Armageddon private void LoadMineDelayConfig(BinaryStream reader) { byte raw = reader.Read1Byte(); - if (raw == 4 || raw > 0x7F) - { - MineDelay = 0; - MineDelayRandom = true; - } - else - { - MineDelay = raw; - MineDelayRandom = false; - } + MineDelayRandom = raw == 4 || raw > 0x7F; + MineDelay = MineDelayRandom ? (byte)0 : raw; } private void LoadTurnTimeConfig(BinaryStream reader) { byte raw = reader.Read1Byte(); - if (raw > 0x7F) - { - TurnTime = 0; - TurnTimeInfinite = true; - } - else - { - TurnTime = raw; - TurnTimeInfinite = false; - } + TurnTimeInfinite = raw > 0x7F; + TurnTime = TurnTimeInfinite ? (byte)0 : raw; } private void LoadRoundTimeConfig(BinaryStream reader) @@ -844,18 +865,18 @@ namespace Syroot.Worms.Armageddon private void LoadRubberWormSettings() { - RwEarthquakeProb earthquakeProb = (RwEarthquakeProb)Weapons[(int)SchemeWeapon.Earthquake].Probability; + RwEarthquakeProb earthquakeProb = (RwEarthquakeProb)Weapons[(int)SchemeWeaponName.Earthquake].Probability; RwAntiLockPower = earthquakeProb.HasFlag(RwEarthquakeProb.AntiLockPower); RwAutoReaim = earthquakeProb.HasFlag(RwEarthquakeProb.AutoReaim); RwCircularAim = earthquakeProb.HasFlag(RwEarthquakeProb.CircularAim); RwShotDoesntEndTurnAll = earthquakeProb.HasFlag(RwEarthquakeProb.ShotDoesntEndTurnAll); RwKaosMod = ((byte)earthquakeProb).DecodeByte(4, 4); - RwAntiSink = Weapons[(int)SchemeWeapon.SheepStrike].Probability != 0; - RwCrateLimit = (byte)Weapons[(int)SchemeWeapon.MagicBullet].Probability; - RwCrateRate = (byte)Weapons[(int)SchemeWeapon.NuclearTest].Probability; + RwAntiSink = Weapons[(int)SchemeWeaponName.SheepStrike].Probability != 0; + RwCrateLimit = (byte)Weapons[(int)SchemeWeaponName.MagicBullet].Probability; + RwCrateRate = (byte)Weapons[(int)SchemeWeaponName.NuclearTest].Probability; - RwMoleSquadronProb moleSquadronProb = (RwMoleSquadronProb)Weapons[(int)SchemeWeapon.MoleSquadron] + RwMoleSquadronProb moleSquadronProb = (RwMoleSquadronProb)Weapons[(int)SchemeWeaponName.MoleSquadron] .Probability; RwCrateShower = moleSquadronProb.HasFlag(RwMoleSquadronProb.CrateShower); RwExtendedFuse = moleSquadronProb.HasFlag(RwMoleSquadronProb.ExtendedFuse); @@ -866,11 +887,11 @@ namespace Syroot.Worms.Armageddon RwUpgradedRope = moleSquadronProb.HasFlag(RwMoleSquadronProb.UpgradedRope); RwWeaponsDontChange = moleSquadronProb.HasFlag(RwMoleSquadronProb.WeaponsDontChange); - RwFlameLimit = (byte)Weapons[(int)SchemeWeapon.ScalesOfJustice].Probability; - RwFriction = (byte)Weapons[(int)SchemeWeapon.SalvationArmy].Probability; + RwFlameLimit = (byte)Weapons[(int)SchemeWeaponName.ScalesOfJustice].Probability; + RwFriction = (byte)Weapons[(int)SchemeWeaponName.SalvationArmy].Probability; // 8th and 7th bit control constant / proportional black hole gravity, otherwise normal gravity. - byte mailStrikeProb = (byte)Weapons[(int)SchemeWeapon.MailStrike].Probability; + byte mailStrikeProb = (byte)Weapons[(int)SchemeWeaponName.MailStrike].Probability; if (!mailStrikeProb.GetBit(7)) RwGravity = mailStrikeProb.DecodeSByte(7); else if (mailStrikeProb.GetBit(6)) @@ -878,24 +899,18 @@ namespace Syroot.Worms.Armageddon else RwGravityConstBlackHole = mailStrikeProb.DecodeSByte(6); - RwKnockForce = (byte)Weapons[(int)SchemeWeapon.SuperBananaBomb].Probability; - RwMaxRopeSpeed = (byte)Weapons[(int)SchemeWeapon.MineStrike].Probability; - RwSelectWormAnytime = ((byte)Weapons[(int)SchemeWeapon.MBBomb].Probability).GetBit(1); + RwKnockForce = (byte)Weapons[(int)SchemeWeaponName.SuperBananaBomb].Probability; + RwMaxRopeSpeed = (byte)Weapons[(int)SchemeWeaponName.MineStrike].Probability; + RwSelectWormAnytime = ((byte)Weapons[(int)SchemeWeaponName.MBBomb].Probability).GetBit(1); byte[] versionBytes = new byte[2]; - versionBytes[0] = (byte)Weapons[(int)SchemeWeapon.SelectWorm].Probability; - versionBytes[1] = (byte)Weapons[(int)SchemeWeapon.Freeze].Probability; + versionBytes[0] = (byte)Weapons[(int)SchemeWeaponName.SelectWorm].Probability; + versionBytes[1] = (byte)Weapons[(int)SchemeWeaponName.Freeze].Probability; RwVersionOverride = BitConverter.ToUInt16(versionBytes, 0); - RwViscosity = (byte)Weapons[(int)SchemeWeapon.ConcreteDonkey].Probability; - RwWindPower = (byte)Weapons[(int)SchemeWeapon.SuicideBomber].Probability; - RwWormBouncyness = (byte)Weapons[(int)SchemeWeapon.Armageddon].Probability; - } - - private int GetWeaponCount() - { - // Old versions do not store super weapon settings. - return Version == SchemeVersion.Extended ? 64 : 45; + RwViscosity = (byte)Weapons[(int)SchemeWeaponName.ConcreteDonkey].Probability; + RwWindPower = (byte)Weapons[(int)SchemeWeaponName.SuicideBomber].Probability; + RwWormBouncyness = (byte)Weapons[(int)SchemeWeaponName.Armageddon].Probability; } private void SaveObjectTypesAndCount(BinaryStream writer, SchemeSaveFormat format) @@ -921,29 +936,13 @@ namespace Syroot.Worms.Armageddon writer.Write(raw); } - private void SaveMineDelayConfig(BinaryStream writer) - { - if (MineDelayRandom) - writer.Write((byte)4); - else - writer.Write(MineDelay); - } + private void SaveMineDelayConfig(BinaryStream writer) => writer.Write(MineDelayRandom ? (byte)4 : MineDelay); - private void SaveTurnTimeConfig(BinaryStream writer) - { - if (TurnTimeInfinite) - writer.Write((byte)0xFF); - else - writer.Write(TurnTime); - } + private void SaveTurnTimeConfig(BinaryStream writer) => writer.Write(TurnTimeInfinite ? (byte)0xFF : TurnTime); - private void SaveRoundTimeConfig(BinaryStream writer) - { - if (RoundTimeSeconds > 0) - writer.Write((byte)(0xFF - (RoundTimeSeconds - 1))); - else - writer.Write(RoundTimeMinutes); - } + private void SaveRoundTimeConfig(BinaryStream writer) => writer.Write(RoundTimeSeconds > 0 + ? (byte)(0xFF - (RoundTimeSeconds - 1)) + : RoundTimeMinutes); private void SaveRubberWormSettings() { @@ -953,11 +952,11 @@ namespace Syroot.Worms.Armageddon if (RwCircularAim) earthquakeProb |= (byte)RwEarthquakeProb.CircularAim; if (RwShotDoesntEndTurnAll) earthquakeProb |= (byte)RwEarthquakeProb.ShotDoesntEndTurnAll; earthquakeProb = earthquakeProb.Encode(RwKaosMod, 4); - Weapons[(int)SchemeWeapon.Earthquake].Probability = (sbyte)earthquakeProb; + Weapons[(int)SchemeWeaponName.Earthquake].Probability = (sbyte)earthquakeProb; - Weapons[(int)SchemeWeapon.SheepStrike].Probability = (sbyte)(RwAntiSink ? 1 : 0); - Weapons[(int)SchemeWeapon.MagicBullet].Probability = (sbyte)RwCrateLimit; - Weapons[(int)SchemeWeapon.NuclearTest].Probability = (sbyte)RwCrateRate; + Weapons[(int)SchemeWeaponName.SheepStrike].Probability = (sbyte)(RwAntiSink ? 1 : 0); + Weapons[(int)SchemeWeaponName.MagicBullet].Probability = (sbyte)RwCrateLimit; + Weapons[(int)SchemeWeaponName.NuclearTest].Probability = (sbyte)RwCrateRate; RwMoleSquadronProb moleSquadronProb = RwMoleSquadronProb.None; if (RwCrateShower) moleSquadronProb |= RwMoleSquadronProb.CrateShower; @@ -968,10 +967,10 @@ namespace Syroot.Worms.Armageddon if (RwShotDoesntEndTurn) moleSquadronProb |= RwMoleSquadronProb.ShotDoesntEndTurn; if (RwUpgradedRope) moleSquadronProb |= RwMoleSquadronProb.UpgradedRope; if (RwWeaponsDontChange) moleSquadronProb |= RwMoleSquadronProb.WeaponsDontChange; - Weapons[(int)SchemeWeapon.MoleSquadron].Probability = (sbyte)moleSquadronProb; + Weapons[(int)SchemeWeaponName.MoleSquadron].Probability = (sbyte)moleSquadronProb; - Weapons[(int)SchemeWeapon.ScalesOfJustice].Probability = (sbyte)RwFlameLimit; - Weapons[(int)SchemeWeapon.SalvationArmy].Probability = (sbyte)RwFriction; + Weapons[(int)SchemeWeaponName.ScalesOfJustice].Probability = (sbyte)RwFlameLimit; + Weapons[(int)SchemeWeaponName.SalvationArmy].Probability = (sbyte)RwFriction; // 8th and 7th bit control constant / proportional black hole gravity, otherwise normal gravity. byte mailStrikeProb = 0; @@ -990,28 +989,28 @@ namespace Syroot.Worms.Armageddon mailStrikeProb = mailStrikeProb.EnableBit(6); mailStrikeProb = mailStrikeProb.Encode(RwGravityPropBlackHole, 6); } - Weapons[(int)SchemeWeapon.MailStrike].Probability = (sbyte)mailStrikeProb; + Weapons[(int)SchemeWeaponName.MailStrike].Probability = (sbyte)mailStrikeProb; - Weapons[(int)SchemeWeapon.SuperBananaBomb].Probability = (sbyte)RwKnockForce; - Weapons[(int)SchemeWeapon.MineStrike].Probability = (sbyte)RwMaxRopeSpeed; - byte mbBombProb = ((byte)Weapons[(int)SchemeWeapon.MBBomb].Probability).SetBit(0, RwSelectWormAnytime); - Weapons[(int)SchemeWeapon.MBBomb].Probability = (sbyte)mbBombProb; + Weapons[(int)SchemeWeaponName.SuperBananaBomb].Probability = (sbyte)RwKnockForce; + Weapons[(int)SchemeWeaponName.MineStrike].Probability = (sbyte)RwMaxRopeSpeed; + byte mbBombProb = ((byte)Weapons[(int)SchemeWeaponName.MBBomb].Probability).SetBit(0, RwSelectWormAnytime); + Weapons[(int)SchemeWeaponName.MBBomb].Probability = (sbyte)mbBombProb; byte[] versionBytes = BitConverter.GetBytes(RwVersionOverride); - Weapons[(int)SchemeWeapon.SelectWorm].Probability = (sbyte)versionBytes[0]; - Weapons[(int)SchemeWeapon.Freeze].Probability = (sbyte)versionBytes[1]; + Weapons[(int)SchemeWeaponName.SelectWorm].Probability = (sbyte)versionBytes[0]; + Weapons[(int)SchemeWeaponName.Freeze].Probability = (sbyte)versionBytes[1]; - Weapons[(int)SchemeWeapon.ConcreteDonkey].Probability = (sbyte)RwViscosity; - Weapons[(int)SchemeWeapon.SuicideBomber].Probability = (sbyte)RwWindPower; - Weapons[(int)SchemeWeapon.Armageddon].Probability = (sbyte)RwWormBouncyness; + Weapons[(int)SchemeWeaponName.ConcreteDonkey].Probability = (sbyte)RwViscosity; + Weapons[(int)SchemeWeaponName.SuicideBomber].Probability = (sbyte)RwWindPower; + Weapons[(int)SchemeWeaponName.Armageddon].Probability = (sbyte)RwWormBouncyness; } - // ---- ENUMERATIONS ------------------------------------------------------------------------------------------- + // ---- CLASSES, STRUCTS & ENUMS ------------------------------------------------------------------------------- [Flags] private enum RwEarthquakeProb : byte { - None = 0, + None, AutoReaim = 1 << 0, CircularAim = 1 << 1, AntiLockPower = 1 << 2, @@ -1022,7 +1021,7 @@ namespace Syroot.Worms.Armageddon [Flags] private enum RwMoleSquadronProb : byte { - None = 0, + None, ShotDoesntEndTurn = 1 << 0, LoseControlDoesntEndTurn = 1 << 1, FireDoesntPauseTimer = 1 << 2, diff --git a/src/library/Syroot.Worms.Armageddon/SchemeEnums.cs b/src/library/Syroot.Worms.Armageddon/SchemeEnums.cs index 295b74a..9981e13 100644 --- a/src/library/Syroot.Worms.Armageddon/SchemeEnums.cs +++ b/src/library/Syroot.Worms.Armageddon/SchemeEnums.cs @@ -7,14 +7,9 @@ namespace Syroot.Worms.Armageddon /// public enum SchemeVersion : byte { - /// - /// The standard format used by WA before version 3.6.28.0 and WWP. It does not store super weapon settings. - /// + /// Default format used by WA before version 3.6.28.0 and WWP. Standard = 1, - - /// - /// The extended format used by WA since version 3.6.28.0. - /// + /// Extended format used by WA since version 3.6.28.0, storing super weapon settings. Extended = 2 } @@ -23,676 +18,24 @@ namespace Syroot.Worms.Armageddon /// public enum SchemeSaveFormat { - /// - /// Represents the format. - /// + /// Represents . Standard, - - /// - /// Represents the format, and does not store object counts. - /// + /// Represents . Extended, - - /// - /// Represents the format, and stores object counts (supported since WA - /// 3.6.28.0). - /// + /// Represents and stores object counts since WA 3.6.28.0. ExtendedWithObjectCount } - /// - /// Represents the fall damage in percent, relative to the normal fall damage being 100%. - /// - public enum SchemeFallDamage - { - /// - /// No fall damage. - /// - None = 0, - - /// - /// 4% fall damage. - /// - Percent4 = 4, - - /// - /// 8% fall damage. - /// - Percent8 = 8, - - /// - /// 12% fall damage. - /// - Percent12 = 12, - - /// - /// 16% fall damage. - /// - Percent16 = 16, - - /// - /// 20% fall damage. - /// - Percent20 = 20, - - /// - /// 24% fall damage. - /// - Percent24 = 24, - - /// - /// 28% fall damage. - /// - Percent28 = 28, - - /// - /// 32% fall damage. - /// - Percent32 = 32, - - /// - /// 36% fall damage. - /// - Percent36 = 36, - - /// - /// 40% fall damage. - /// - Percent40 = 40, - - /// - /// 44% fall damage. - /// - Percent44 = 44, - - /// - /// 48% fall damage. - /// - Percent48 = 48, - - /// - /// 52% fall damage. - /// - Percent52 = 52, - - /// - /// 56% fall damage. - /// - Percent56 = 56, - - /// - /// 60% fall damage. - /// - Percent60 = 60, - - /// - /// 64% fall damage. - /// - Percent64 = 64, - - /// - /// 68% fall damage. - /// - Percent68 = 68, - - /// - /// 72% fall damage. - /// - Percent72 = 72, - - /// - /// 76% fall damage. - /// - Percent76 = 76, - - /// - /// 80% fall damage. - /// - Percent80 = 80, - - /// - /// 84% fall damage. - /// - Percent84 = 84, - - /// - /// 88% fall damage. - /// - Percent88 = 88, - - /// - /// 92% fall damage. - /// - Percent92 = 92, - - /// - /// 96% fall damage. - /// - Percent96 = 96, - - /// - /// 100% fall damage. - /// - Percent100 = 100, - - /// - /// 104% fall damage. - /// - Percent104 = 104, - - /// - /// 108% fall damage. - /// - Percent108 = 108, - - /// - /// 112% fall damage. - /// - Percent112 = 112, - - /// - /// 116% fall damage. - /// - Percent116 = 116, - - /// - /// 120% fall damage. - /// - Percent120 = 120, - - /// - /// 124% fall damage. - /// - Percent124 = 124, - - /// - /// 128% fall damage. - /// - Percent128 = 128, - - /// - /// 132% fall damage. - /// - Percent132 = 132, - - /// - /// 136% fall damage. - /// - Percent136 = 136, - - /// - /// 140% fall damage. - /// - Percent140 = 140, - - /// - /// 144% fall damage. - /// - Percent144 = 144, - - /// - /// 148% fall damage. - /// - Percent148 = 148, - - /// - /// 152% fall damage. - /// - Percent152 = 152, - - /// - /// 156% fall damage. - /// - Percent156 = 156, - - /// - /// 160% fall damage. - /// - Percent160 = 160, - - /// - /// 164% fall damage. - /// - Percent164 = 164, - - /// - /// 168% fall damage. - /// - Percent168 = 168, - - /// - /// 172% fall damage. - /// - Percent172 = 172, - - /// - /// 176% fall damage. - /// - Percent176 = 176, - - /// - /// 180% fall damage. - /// - Percent180 = 180, - - /// - /// 184% fall damage. - /// - Percent184 = 184, - - /// - /// 188% fall damage. - /// - Percent188 = 188, - - /// - /// 192% fall damage. - /// - Percent192 = 192, - - /// - /// 196% fall damage. - /// - Percent196 = 196, - - /// - /// 200% fall damage. - /// - Percent200 = 200, - - /// - /// 204% fall damage. - /// - Percent204 = 204, - - /// - /// 208% fall damage. - /// - Percent208 = 208, - - /// - /// 212% fall damage. - /// - Percent212 = 212, - - /// - /// 216% fall damage. - /// - Percent216 = 216, - - /// - /// 220% fall damage. - /// - Percent220 = 220, - - /// - /// 224% fall damage. - /// - Percent224 = 224, - - /// - /// 228% fall damage. - /// - Percent228 = 228, - - /// - /// 232% fall damage. - /// - Percent232 = 232, - - /// - /// 236% fall damage. - /// - Percent236 = 236, - - /// - /// 240% fall damage. - /// - Percent240 = 240, - - /// - /// 244% fall damage. - /// - Percent244 = 244, - - /// - /// 248% fall damage. - /// - Percent248 = 248, - - /// - /// 252% fall damage. - /// - Percent252 = 252, - - /// - /// 256% fall damage. - /// - Percent256 = 256, - - /// - /// 260% fall damage. - /// - Percent260 = 260, - - /// - /// 264% fall damage. - /// - Percent264 = 264, - - /// - /// 268% fall damage. - /// - Percent268 = 268, - - /// - /// 272% fall damage. - /// - Percent272 = 272, - - /// - /// 276% fall damage. - /// - Percent276 = 276, - - /// - /// 280% fall damage. - /// - Percent280 = 280, - - /// - /// 284% fall damage. - /// - Percent284 = 284, - - /// - /// 288% fall damage. - /// - Percent288 = 288, - - /// - /// 292% fall damage. - /// - Percent292 = 292, - - /// - /// 296% fall damage. - /// - Percent296 = 296, - - /// - /// 300% fall damage. - /// - Percent300 = 300, - - /// - /// 304% fall damage. - /// - Percent304 = 304, - - /// - /// 308% fall damage. - /// - Percent308 = 308, - - /// - /// 312% fall damage. - /// - Percent312 = 312, - - /// - /// 316% fall damage. - /// - Percent316 = 316, - - /// - /// 320% fall damage. - /// - Percent320 = 320, - - /// - /// 324% fall damage. - /// - Percent324 = 324, - - /// - /// 328% fall damage. - /// - Percent328 = 328, - - /// - /// 332% fall damage. - /// - Percent332 = 332, - - /// - /// 336% fall damage. - /// - Percent336 = 336, - - /// - /// 340% fall damage. - /// - Percent340 = 340, - - /// - /// 344% fall damage. - /// - Percent344 = 344, - - /// - /// 348% fall damage. - /// - Percent348 = 348, - - /// - /// 352% fall damage. - /// - Percent352 = 352, - - /// - /// 356% fall damage. - /// - Percent356 = 356, - - /// - /// 360% fall damage. - /// - Percent360 = 360, - - /// - /// 364% fall damage. - /// - Percent364 = 364, - - /// - /// 368% fall damage. - /// - Percent368 = 368, - - /// - /// 372% fall damage. - /// - Percent372 = 372, - - /// - /// 376% fall damage. - /// - Percent376 = 376, - - /// - /// 380% fall damage. - /// - Percent380 = 380, - - /// - /// 384% fall damage. - /// - Percent384 = 384, - - /// - /// 388% fall damage. - /// - Percent388 = 388, - - /// - /// 392% fall damage. - /// - Percent392 = 392, - - /// - /// 396% fall damage. - /// - Percent396 = 396, - - /// - /// 400% fall damage. - /// - Percent400 = 400, - - /// - /// 404% fall damage. - /// - Percent404 = 404, - - /// - /// 408% fall damage. - /// - Percent408 = 408, - - /// - /// 412% fall damage. - /// - Percent412 = 412, - - /// - /// 416% fall damage. - /// - Percent416 = 416, - - /// - /// 420% fall damage. - /// - Percent420 = 420, - - /// - /// 424% fall damage. - /// - Percent424 = 424, - - /// - /// 428% fall damage. - /// - Percent428 = 428, - - /// - /// 432% fall damage. - /// - Percent432 = 432, - - /// - /// 436% fall damage. - /// - Percent436 = 436, - - /// - /// 440% fall damage. - /// - Percent440 = 440, - - /// - /// 444% fall damage. - /// - Percent444 = 444, - - /// - /// 448% fall damage. - /// - Percent448 = 448, - - /// - /// 452% fall damage. - /// - Percent452 = 452, - - /// - /// 456% fall damage. - /// - Percent456 = 456, - - /// - /// 460% fall damage. - /// - Percent460 = 460, - - /// - /// 464% fall damage. - /// - Percent464 = 464, - - /// - /// 468% fall damage. - /// - Percent468 = 468, - - /// - /// 472% fall damage. - /// - Percent472 = 472, - - /// - /// 476% fall damage. - /// - Percent476 = 476, - - /// - /// 480% fall damage. - /// - Percent480 = 480, - - /// - /// 484% fall damage. - /// - Percent484 = 484, - - /// - /// 488% fall damage. - /// - Percent488 = 488, - - /// - /// 492% fall damage. - /// - Percent492 = 492, - - /// - /// 496% fall damage. - /// - Percent496 = 496, - - /// - /// 500% fall damage. - /// - Percent500 = 500, - - /// - /// 504% fall damage. - /// - Percent504 = 504, - - /// - /// 508% fall damage. - /// - Percent508 = 508 - } - /// /// Represents the known identifiers of scheme editors stored in schemes modified by them. /// public enum SchemeEditor : byte { - None = 0, + /// Default (Worms Armageddon internal editor or those that do not set a recognition byte. + None, + /// LeTotalKiller's PHP online editor. LeTotalKiller = 0x5F, + /// SchemeEddy's Win32 editor. SchemeEddy = 0x89 } @@ -701,9 +44,12 @@ namespace Syroot.Worms.Armageddon /// public enum SchemeStockpiling : byte { - Off = 0, - On = 1, - Anti = 2 + /// Each round starts with the exact amount of weapons set in the scheme. + Off, + /// Weapons collected additionally to the ones set in the scheme are transfered to the next round. + On, + /// Weapons are only given out at start of first round, and not renewed in following rounds. + Anti } /// @@ -711,20 +57,12 @@ namespace Syroot.Worms.Armageddon /// public enum SchemeWormSelect : byte { - /// - /// Worms are selected in the order in which they appear in the team. - /// - Sequential = 0, - - /// - /// Worms are selected by the player. - /// - Manual = 1, - - /// - /// Worms are selected randomly. - /// - Random = 2 + /// Worms are selected in the order in which they appear in the team. + Sequential, + /// Worms are selected by the player. + Manual, + /// Worms are selected randomly. + Random } /// @@ -732,251 +70,14 @@ namespace Syroot.Worms.Armageddon /// public enum SchemeSuddenDeathEvent : byte { - /// - /// The round ends and is drawn. - /// - RoundEnd = 0, - - /// - /// A nuklear test is triggered. - /// - NuclearStrike = 1, - - /// - /// The worms health is reduced to 1. - /// - HealthDrop = 2, - - /// - /// No special event is triggered and the water only rises in the rate specified in the scheme. - /// - WaterRise = 3 - } - - /// - /// Represents the water rise in pixels after sudden death was triggered. - /// - public enum SchemeWaterRise : byte - { - /// - /// No water rise. - /// - None = 0, - - /// - /// 5 pixels water rise. - /// - Pixels5 = 5, - - /// - /// 13 pixels water rise. - /// - Pixels13 = 13, - - /// - /// 20 pixels water rise. - /// - Pixels20 = 20, - - /// - /// 21 pixels water rise. - /// - Pixels21 = 21, - - /// - /// 29 pixels water rise. - /// - Pixels29 = 29, - - /// - /// 37 pixels water rise. - /// - Pixels37 = 37, - - /// - /// 45 pixels water rise. - /// - Pixels45 = 45, - - /// - /// 52 pixels water rise. - /// - Pixels52 = 52, - - /// - /// 53 pixels water rise. - /// - Pixels53 = 53, - - /// - /// 61 pixels water rise. - /// - Pixels61 = 61, - - /// - /// 64 pixels water rise. - /// - Pixels64 = 64, - - /// - /// 69 pixels water rise. - /// - Pixels69 = 69, - - /// - /// 77 pixels water rise. - /// - Pixels77 = 77, - - /// - /// 80 pixels water rise. - /// - Pixels80 = 80, - - /// - /// 84 pixels water rise. - /// - Pixels84 = 84, - - /// - /// 85 pixels water rise. - /// - Pixels85 = 85, - - /// - /// 93 pixels water rise. - /// - Pixels93 = 93, - - /// - /// 101 pixels water rise. - /// - Pixels101 = 101, - - /// - /// 109 pixels water rise. - /// - Pixels109 = 109, - - /// - /// 116 pixels water rise. - /// - Pixels116 = 116, - - /// - /// 117 pixels water rise. - /// - Pixels117 = 117, - - /// - /// 125 pixels water rise. - /// - Pixels125 = 125, - - /// - /// 133 pixels water rise. - /// - Pixels133 = 133, - - /// - /// 141 pixels water rise. - /// - Pixels141 = 141, - - /// - /// 148 pixels water rise. - /// - Pixels148 = 148, - - /// - /// 149 pixels water rise. - /// - Pixels149 = 149, - - /// - /// 157 pixels water rise. - /// - Pixels157 = 157, - - /// - /// 165 pixels water rise. - /// - Pixels165 = 165, - - /// - /// 173 pixels water rise. - /// - Pixels173 = 173, - - /// - /// 180 pixels water rise. - /// - Pixels180 = 180, - - /// - /// 181 pixels water rise. - /// - Pixels181 = 181, - - /// - /// 189 pixels water rise. - /// - Pixels189 = 189, - - /// - /// 197 pixels water rise. - /// - Pixels197 = 197, - - /// - /// 205 pixels water rise. - /// - Pixels205 = 205, - - /// - /// 208 pixels water rise. - /// - Pixels208 = 208, - - /// - /// 212 pixels water rise. - /// - Pixels212 = 212, - - /// - /// 213 pixels water rise. - /// - Pixels213 = 213, - - /// - /// 221 pixels water rise. - /// - Pixels221 = 221, - - /// - /// 229 pixels water rise. - /// - Pixels229 = 229, - - /// - /// 237 pixels water rise. - /// - Pixels237 = 237, - - /// - /// 244 pixels water rise. - /// - Pixels244 = 244, - - /// - /// 245 pixels water rise. - /// - Pixels245 = 245, - - /// - /// 253 pixels water rise. - /// - Pixels253 = 253 + /// The round ends and is drawn. + RoundEnd, + /// A nuklear test is triggered. + NuclearStrike, + /// The worms health is reduced to 1. + HealthDrop, + /// No special event is triggered and the water only rises in the rate specified in the scheme. + WaterRise } /// @@ -985,335 +86,148 @@ namespace Syroot.Worms.Armageddon [Flags] public enum SchemeObjectType { + /// Neither mines or oil drums are placed on the map. None, + /// Only mines are placed on the map. Mines = 1 << 0, + /// Only oil drums are placed on the map. OilDrums = 1 << 1, + /// Both mines and oil drums are placed on the map. Both = Mines | OilDrums } /// /// Represents the weapons in the game. /// - public enum SchemeWeapon + public enum SchemeWeaponName { - /// - /// The Bazooka weapon. - /// + /// The Bazooka weapon. Bazooka, - - /// - /// The Homing Missile weapon. - /// + /// The Homing Missile weapon. HomingMissile, - - /// - /// The Mortar weapon. - /// + /// The Mortar weapon. Mortar, - - /// - /// The Grenade weapon. - /// + /// The Grenade weapon. Grenade, - - /// - /// The Cluster Bomb weapon. - /// + /// The Cluster Bomb weapon. ClusterBomb, - - /// - /// The Skunk weapon. - /// + /// The Skunk weapon. Skunk, - - /// - /// The Petrol Bomb weapon. - /// + /// The Petrol Bomb weapon. PetrolBomb, - - /// - /// The Banana Bomb weapon. - /// + /// The Banana Bomb weapon. BananaBomb, - - /// - /// The Handgun weapon. - /// + /// The Handgun weapon. Handgun, - - /// - /// The Shotgun weapon. - /// + /// The Shotgun weapon. Shotgun, - - /// - /// The Uzi weapon. - /// + /// The Uzi weapon. Uzi, - - /// - /// The Minigun weapon. - /// + /// The Minigun weapon. Minigun, - - /// - /// The Longbow weapon. - /// + /// The Longbow weapon. Longbow, - - /// - /// The Airstrike weapon. - /// + /// The Airstrike weapon. Airstrike, - - /// - /// The Napalm Strike weapon. - /// + /// The Napalm Strike weapon. NapalmStrike, - - /// - /// The Mine weapon. - /// + /// The Mine weapon. Mine, - - /// - /// The Firepunch weapon. - /// + /// The Firepunch weapon. Firepunch, - - /// - /// The Dragonball weapon. - /// + /// The Dragonball weapon. Dragonball, - - /// - /// The Kamikaze weapon. - /// + /// The Kamikaze weapon. Kamikaze, - - /// - /// The Prod weapon. - /// + /// The Prod weapon. Prod, - - /// - /// The Battle Axe weapon. - /// + /// The Battle Axe weapon. BattleAxe, - - /// - /// The Blowtorch weapon. - /// + /// The Blowtorch weapon. Blowtorch, - - /// - /// The Pneumatic Drill weapon. - /// + /// The Pneumatic Drill weapon. PneumaticDrill, - - /// - /// The Girder weapon. - /// + /// The Girder weapon. Girder, - - /// - /// The Ninja Rope weapon. - /// + /// The Ninja Rope weapon. NinjaRope, - - /// - /// The Parachute weapon. - /// + /// The Parachute weapon. Parachute, - - /// - /// The Bungee weapon. - /// + /// The Bungee weapon. Bungee, - - /// - /// The Teleport weapon. - /// + /// The Teleport weapon. Teleport, - - /// - /// The Dynamite weapon. - /// + /// The Dynamite weapon. Dynamite, - - /// - /// The Sheep weapon. - /// + /// The Sheep weapon. Sheep, - - /// - /// The Baseball Bat weapon. - /// + /// The Baseball Bat weapon. BaseballBat, - - /// - /// The Flame Thrower weapon. - /// + /// The Flame Thrower weapon. Flamethrower, - - /// - /// The Homing Pigeon weapon. - /// + /// The Homing Pigeon weapon. HomingPigeon, - - /// - /// The Mad Cow weapon. - /// + /// The Mad Cow weapon. MadCow, - - /// - /// The Holy Hand Grenade weapon. - /// + /// The Holy Hand Grenade weapon. HolyHandGrenade, - - /// - /// The Old Woman weapon. - /// + /// The Old Woman weapon. OldWoman, - - /// - /// The Sheep Launcher weapon. - /// + /// The Sheep Launcher weapon. SheepLauncher, - - /// - /// The Super Sheep or Aqua Sheep weapon. - /// + /// The Super Sheep or Aqua Sheep weapon. SuperSheep, - - /// - /// The Mole Bomb weapon. - /// + /// The Mole Bomb weapon. MoleBomb, - - /// - /// The Jetpack utility. - /// + /// The Jetpack utility. Jetpack, - - /// - /// The Low Gravity utility. - /// + /// The Low Gravity utility. LowGravity, - - /// - /// The Laser Sight utility. - /// + /// The Laser Sight utility. LaserSight, - - /// - /// The Fast Walk utility. - /// + /// The Fast Walk utility. FastWalk, - - /// - /// The Invisibility utility. - /// + /// The Invisibility utility. Invisibility, - - /// - /// The Damage x2 utility. - /// + /// The Damage x2 utility. DamageX2, - - /// - /// The Freeze super weapon. - /// + /// The Freeze super weapon. Freeze, - - /// - /// The Super Banana Bomb super weapon. - /// + /// The Super Banana Bomb super weapon. SuperBananaBomb, - - /// - /// The Mine Strike super weapon. - /// + /// The Mine Strike super weapon. MineStrike, - - /// - /// The Girder Starter Pack super weapon. - /// + /// The Girder Starter Pack super weapon. GirderStarterPack, - - /// - /// The Earthquake super weapon. - /// + /// The Earthquake super weapon. Earthquake, - - /// - /// The Scales Of Justice super weapon. - /// + /// The Scales Of Justice super weapon. ScalesOfJustice, - - /// - /// The Ming Vase super weapon. - /// + /// The Ming Vase super weapon. MingVase, - - /// - /// The Mike's Carpet Bomb super weapon. - /// + /// The Mike's Carpet Bomb super weapon. MikesCarpetBomb, - - /// - /// The Patsy's Magic Bullet super weapon. - /// + /// The Patsy's Magic Bullet super weapon. MagicBullet, - - /// - /// The Indian Nuclear Test super weapon. - /// + /// The Indian Nuclear Test super weapon. NuclearTest, - - /// - /// The Select Worm super weapon. - /// + /// The Select Worm super weapon. SelectWorm, - - /// - /// The Salvation Army super weapon. - /// + /// The Salvation Army super weapon. SalvationArmy, - - /// - /// The Mole Squadron super weapon. - /// + /// The Mole Squadron super weapon. MoleSquadron, - - /// - /// The MB Bomb super weapon. - /// + /// The MB Bomb super weapon. MBBomb, - - /// - /// The Concrete Donkey super weapon. - /// + /// The Concrete Donkey super weapon. ConcreteDonkey, - - /// - /// The Suicide Bomber super weapon. - /// + /// The Suicide Bomber super weapon. SuicideBomber, - - /// - /// The Sheep Strike super weapon. - /// + /// The Sheep Strike super weapon. SheepStrike, - - /// - /// The Mail Strike super weapon. - /// + /// The Mail Strike super weapon. MailStrike, - - /// - /// The Armageddon super weapon. - /// + /// The Armageddon super weapon. Armageddon } } diff --git a/src/library/Syroot.Worms.Armageddon/SchemeWeapon.cs b/src/library/Syroot.Worms.Armageddon/SchemeWeapon.cs new file mode 100644 index 0000000..abab23b --- /dev/null +++ b/src/library/Syroot.Worms.Armageddon/SchemeWeapon.cs @@ -0,0 +1,25 @@ +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Syroot.Worms.Armageddon +{ + /// + /// Represents the configuration of a weapon. + /// + [DebuggerDisplay("Ammo={Ammunition} Power={Power} Delay={Delay} Prob={Probability}")] + [StructLayout(LayoutKind.Sequential)] + public struct SchemeWeapon + { + // ---- FIELDS ------------------------------------------------------------------------------------------------- + + /// Amount with which a team is equipped at game start. 10 and negative values represent infinity. + public sbyte Ammunition; + /// Power of this weapon. + public byte Power; + /// Number of turns required to be taken by each team before this weapon becomes available. Negative + /// values represent infinity. + public sbyte Delay; + /// Percentual chance of this weapon to appear in crates. Has no effect for super weapons. + public sbyte Probability; + } +} diff --git a/src/library/Syroot.Worms.Armageddon/SchemeWeaponSetting.cs b/src/library/Syroot.Worms.Armageddon/SchemeWeaponSetting.cs deleted file mode 100644 index 3f5d56f..0000000 --- a/src/library/Syroot.Worms.Armageddon/SchemeWeaponSetting.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace Syroot.Worms.Armageddon -{ - /// - /// Represents the configuration of a weapon. - /// - [DebuggerDisplay("Ammo={Ammunition} Power={Power} Delay={Delay} Prob={Probability}")] - [StructLayout(LayoutKind.Sequential)] - public struct SchemeWeaponSetting - { - /// - /// The amount of this weapon with which a team is equipped at game start. 10 and negative values represent - /// infinity. - /// - public sbyte Ammunition; - - /// - /// The power of this weapon. - /// - public byte Power; - - /// - /// The number of turns required to be taken by each team before this weapon becomes available. Negative values - /// represent infinity. - /// - public sbyte Delay; - - /// - /// The percentual chance of this weapon to appear in crates. Has no effect for super weapons. - /// - public sbyte Probability; - } -} diff --git a/src/library/Syroot.Worms.Armageddon/Syroot.Worms.Armageddon.csproj b/src/library/Syroot.Worms.Armageddon/Syroot.Worms.Armageddon.csproj index 5e460aa..e7e9c10 100644 --- a/src/library/Syroot.Worms.Armageddon/Syroot.Worms.Armageddon.csproj +++ b/src/library/Syroot.Worms.Armageddon/Syroot.Worms.Armageddon.csproj @@ -3,7 +3,7 @@ Syroot.Worms.Armageddon .NET library for loading and modifying files of Team17's Worms Armageddon. - Simplify scheme object count usage. Fix saving files. Uniquely leave open Stream instances when saving into them. + Simplify scheme fall damage and water rise usage. $(PackageTags);worms armageddon