public static SettingSize GetExtendedOptionSettingSize(ExtendedOptionTypes extendedOption) { switch (extendedOption) { case ExtendedOptionTypes.Wind: case ExtendedOptionTypes.MaximumCrateCount: case ExtendedOptionTypes.PetrolTurnDecay: case ExtendedOptionTypes.MaximumFlameletCount: return(SettingSize.TwoBytes); case ExtendedOptionTypes.DataVersion: case ExtendedOptionTypes.Gravity: case ExtendedOptionTypes.Friction: case ExtendedOptionTypes.MaximumProjectileSpeed: case ExtendedOptionTypes.MaximumRopeSpeed: case ExtendedOptionTypes.MaximumJetPackSpeed: case ExtendedOptionTypes.GameEngineSpeed: case ExtendedOptionTypes.RubberWormBounciness: case ExtendedOptionTypes.RubberWormAirViscosity: case ExtendedOptionTypes.RubberWormWindInfluence: case ExtendedOptionTypes.RubberWormGravityStrength: return(SettingSize.FourBytes); } return(SettingSize.Byte); }
public void AddExtendedOptionNotAvailable(XElement element, ExtendedOptionTypes extendedOptionType, int version) { string errorString = String.Format("Extended option '{0}' is not available in data version {1}.", extendedOptionType.ToString(), version); Add(errorString, element); }
void ParseExtendedOptionElement(XElement extendedOptionElement, ExtendedOptionTypes extendedOptionType) { if ((int)extendedOptionType <= SchemeTypes.GetExtendedOptionsSettingsCount(_schemeGenerator.ExtendedOptionsDataVersion)) { ValueGenerator valueGenerator = CreateValueGenerator(extendedOptionElement, SchemeLimits.GetExtendedOptionLimits(extendedOptionType)); _schemeGenerator.Set(extendedOptionType, valueGenerator); } else { _errorCollection.AddExtendedOptionNotAvailable(extendedOptionElement, extendedOptionType, _schemeGenerator.ExtendedOptionsDataVersion); } }
public Scheme(SchemeVersion version, int extendedOptionsDataVersion = 0, bool setUpDefaults = true) { Version = version; Settings = new Setting[SchemeTypes.NumberOfNonWeaponSettings]; for (int i = 0; i < Settings.Length; ++i) { SettingTypes settingType = (SettingTypes)i; Settings[i] = new Setting(settingType.ToString(), SchemeLimits.GetSettingLimits(settingType)); } int weaponsCount = version >= SchemeVersion.Armageddon2 ? SchemeTypes.NumberOfWeapons : SchemeTypes.NumberOfNonSuperWeapons; Weapons = new Weapon[weaponsCount]; for (int i = 0; i < Weapons.Length; ++i) { Weapons[i] = new Weapon((WeaponTypes)i); } if (version >= SchemeVersion.Armageddon3) { int optionsCount = SchemeTypes.GetExtendedOptionsSettingsCount(extendedOptionsDataVersion); ExtendedOptions = new Setting[optionsCount]; for (int i = 0; i < ExtendedOptions.Length; ++i) { ExtendedOptionTypes extendedOption = (ExtendedOptionTypes)i; ExtendedOptions[i] = new Setting(extendedOption.ToString(), SchemeLimits.GetExtendedOptionLimits(extendedOption), SchemeTypes.GetExtendedOptionSettingSize(extendedOption)); } Access(ExtendedOptionTypes.DataVersion).SetValue(extendedOptionsDataVersion); } Access(SettingTypes.Version).SetValue(SchemeTypes.GetSchemeVersionNumber(version)); Access(SettingTypes.BountyMode).SetValue(SchemeGeneratorMagicNumber); if (setUpDefaults) { SetUpDefaults(); } }
public XElement Get(ExtendedOptionTypes extendedOptionType) { return(_extendedOptionTypes[extendedOptionType]); }
public void Add(ExtendedOptionTypes extendedOptionType, XElement element) { _extendedOptionTypes.Add(extendedOptionType, element); }
public bool Contains(ExtendedOptionTypes extendedOptionType) { return(_extendedOptionTypes.ContainsKey(extendedOptionType)); }
/// <summary> /// Gets the given extended option by reference. /// </summary> public Setting Access(ExtendedOptionTypes extendedOption) { Debug.Assert(extendedOption < ExtendedOptionTypes.Count); return(ExtendedOptions[(int)extendedOption]); }
public static SettingLimits GetExtendedOptionLimits(ExtendedOptionTypes extendedOption) { Debug.Assert(extendedOption < ExtendedOptionTypes.Count); return(extendedOption < ExtendedOptionTypes.Count ? _extendedOptionLimits[(int)extendedOption] : null); }
static SettingLimits InitialiseExtendedOptionLimit(ExtendedOptionTypes extendedOption) { switch (extendedOption) { case ExtendedOptionTypes.DataVersion: return(new SettingLimits(0, 0)); //Boolean properties. case ExtendedOptionTypes.ConstantWind: case ExtendedOptionTypes.UnrestrictRope: case ExtendedOptionTypes.AutoPlaceWormsByAlly: case ExtendedOptionTypes.SuddenDeathDisablesWormSelect: case ExtendedOptionTypes.CircularAim: case ExtendedOptionTypes.AntiLockAim: case ExtendedOptionTypes.AntiLockPower: case ExtendedOptionTypes.WormSelectionDoesntEndHotSeat: case ExtendedOptionTypes.WormSelectionNeverCancelled: case ExtendedOptionTypes.BattyRope: case ExtendedOptionTypes.KeepControlAfterBumpingHead: case ExtendedOptionTypes.FallDamageTriggeredByExplosions: case ExtendedOptionTypes.PauseTimerWhileFiring: case ExtendedOptionTypes.LossOfControlDoesntEndTurn: case ExtendedOptionTypes.WeaponUseDoesntEndTurn: case ExtendedOptionTypes.WeaponUseDoesntEndTurnDoesntBlockWeapons: case ExtendedOptionTypes.GirderRadiusAssist: case ExtendedOptionTypes.JetPackBungeeGlitch: case ExtendedOptionTypes.AngleCheatGlitch: case ExtendedOptionTypes.GlideGlitch: case ExtendedOptionTypes.FloatingWeaponGlitch: case ExtendedOptionTypes.RubberWormAirViscosityAppliesToWorms: case ExtendedOptionTypes.RubberWormWindInfluenceAppliesToWorms: case ExtendedOptionTypes.RubberWormCrateShower: case ExtendedOptionTypes.RubberWormAntiSink: case ExtendedOptionTypes.RubberWormRememberWeapons: case ExtendedOptionTypes.RubberWormExtendedFuses: case ExtendedOptionTypes.RubberWormAntiLockAim: case ExtendedOptionTypes.FractionalRoundTimer: case ExtendedOptionTypes.AutomaticEndOfTurnRetreat: case ExtendedOptionTypes.ConserveInstantUtilities: case ExtendedOptionTypes.ExpediteInstantUtilities: return(new SettingLimits(0, 1)); //Tri-state properties. case ExtendedOptionTypes.ExplosionsPushAllObjects: case ExtendedOptionTypes.UndeterminedCrates: case ExtendedOptionTypes.UndeterminedFuses: case ExtendedOptionTypes.PneumaticDrillImpartsVelocity: case ExtendedOptionTypes.IndianRopeGlitch: case ExtendedOptionTypes.HerdDoublingGlitch: case ExtendedOptionTypes.TerrainOverlapPhasingGlitch: return(new SettingLimits((int)ExtendedOptionsTriState.False, (int)ExtendedOptionsTriState.True, (int)ExtendedOptionsTriState.Default, (int)ExtendedOptionsTriState.Default)); //Byte properties. case ExtendedOptionTypes.WindBias: case ExtendedOptionTypes.RopeKnocking: case ExtendedOptionTypes.BloodLevel: case ExtendedOptionTypes.SuddenDeathWormDamagePerTurn: case ExtendedOptionTypes.RubberWormCrateRate: case ExtendedOptionTypes.DoubleTimeStackLimit: return(new SettingLimits(Byte.MinValue, Byte.MaxValue)); //Integer-wide properties. case ExtendedOptionTypes.Wind: return(new SettingLimits(Int16.MinValue, Int16.MaxValue)); case ExtendedOptionTypes.MaximumCrateCount: case ExtendedOptionTypes.PetrolTurnDecay: return(new SettingLimits(UInt16.MinValue, UInt16.MaxValue)); //Enum properties. case ExtendedOptionTypes.AlliedPhasedWorms: case ExtendedOptionTypes.EnemyPhasedWorms: return(new SettingLimits(0, (int)PhasedWormsModes.Count - 1)); case ExtendedOptionTypes.RopeRollDrops: return(new SettingLimits(0, (int)RopeRollDropModes.Count - 1)); case ExtendedOptionTypes.XImpactLossOfControl: return(new SettingLimits((int)XImpactLossOfControlModes.LossOfControl, (int)XImpactLossOfControlModes.LossOfControl, (int)XImpactLossOfControlModes.NoLossOfControl, (int)XImpactLossOfControlModes.NoLossOfControl)); case ExtendedOptionTypes.KeepControlAfterSkimming: return(new SettingLimits(0, (int)KeepControlAfterSkimmingModes.Count - 1)); case ExtendedOptionTypes.Skipwalking: return(new SettingLimits(0, (int)SkipwalkingModes.Faciliated, (int)SkipwalkingModes.Disabled, (int)SkipwalkingModes.Disabled)); case ExtendedOptionTypes.BlockRoofing: return(new SettingLimits(0, (int)BlockRoofingModes.Count - 1)); case ExtendedOptionTypes.RubberWormGravityType: return(new SettingLimits(0, (int)RubberWormGravityTypes.Count - 1)); case ExtendedOptionTypes.HealthCratesCurePoison: return(new SettingLimits(0, (int)HealthCratesCurePoisonModes.Allies, (int)HealthCratesCurePoisonModes.None, (int)HealthCratesCurePoisonModes.None)); case ExtendedOptionTypes.RubberWormKaosMod: return(new SettingLimits(0, (int)RubberWormKaosMods.Count - 1)); //Speed properties. case ExtendedOptionTypes.MaximumProjectileSpeed: case ExtendedOptionTypes.MaximumRopeSpeed: case ExtendedOptionTypes.MaximumJetPackSpeed: return(new SettingLimits(0, 0x7FFFFFFF)); //Other properties. case ExtendedOptionTypes.Gravity: return(new SettingLimits(0x01, 0xC80000)); case ExtendedOptionTypes.Friction: return(new SettingLimits(0, 0x28CCC)); case ExtendedOptionTypes.NoCrateProbability: return(new SettingLimits(0, 100, 255, 255)); case ExtendedOptionTypes.PetrolTouchDecay: return(new SettingLimits(1, Byte.MaxValue)); case ExtendedOptionTypes.MaximumFlameletCount: return(new SettingLimits(1, UInt16.MaxValue)); case ExtendedOptionTypes.GameEngineSpeed: return(new SettingLimits(0x1000, 0x800000)); case ExtendedOptionTypes.RubberWormBounciness: case ExtendedOptionTypes.RubberWormWindInfluence: return(new SettingLimits(0, 0x10000)); case ExtendedOptionTypes.RubberWormAirViscosity: return(new SettingLimits(0, 0x4000)); case ExtendedOptionTypes.RubberWormGravityStrength: return(new SettingLimits(-0x40000000, 0x40000000)); case ExtendedOptionTypes.SheepHeavensGate: return(new SettingLimits(1, 7)); } Debug.Fail("InitialiseExtendedOptionLimit - Invalid extended option " + extendedOption.ToString()); return(null); }
public Scheme GenerateScheme(Random rng, SchemeVersion version) { Scheme scheme = new Scheme(version, ExtendedOptionsDataVersion); //Generate values for every setting. int settingsCount = Math.Min(scheme.Settings.Length, _settingGenerators.Length); for (int i = 0; i < settingsCount; ++i) { ValueGenerator valueGenerator = _settingGenerators[i]; if (valueGenerator != null) { SettingTypes settingType = (SettingTypes)i; Setting setting = scheme.Access(settingType); Debug.Assert(setting != null); setting.SetValue(valueGenerator.GenerateValue(rng), valueGenerator); } } //Generate values for every weapon. int weaponsCount = Math.Min(scheme.Weapons.Length, _weaponGenerators.Length); for (int i = 0; i < weaponsCount; ++i) { WeaponGenerator weaponGenerator = _weaponGenerators[i]; for (int j = 0; j < (int)WeaponSettings.Count; ++j) { WeaponSettings weaponSetting = (WeaponSettings)j; ValueGenerator valueGenerator = weaponGenerator.Get(weaponSetting); if (valueGenerator != null) { WeaponTypes weaponType = (WeaponTypes)i; Weapon weapon = scheme.Access(weaponType); Debug.Assert(weapon != null); Setting setting = weapon.Access(weaponSetting); Debug.Assert(setting != null); //Check value generator range (range check is not done at XML parsing-time for default values). if (!valueGenerator.IsValueRangeWithinLimits(setting.Limits)) { throw new Exception(String.Format("Generatable values for setting '{0}' must be within the range(s): {1}.", setting.Name, setting.Limits.ToString())); } setting.SetValue(valueGenerator.GenerateValue(rng), valueGenerator); } } } //Generate values for every extended option. if (version >= SchemeVersion.Armageddon3) { int optionsCount = Math.Min(scheme.ExtendedOptions.Length, _extendedOptionGenerators.Length); for (int i = 0; i < optionsCount; ++i) { ValueGenerator valueGenerator = _extendedOptionGenerators[i]; if (valueGenerator != null) { ExtendedOptionTypes extendedOption = (ExtendedOptionTypes)i; Setting setting = scheme.Access(extendedOption); Debug.Assert(setting != null); setting.SetValue(valueGenerator.GenerateValue(rng), valueGenerator); } } } //Handle guarantees. foreach (Guarantee guarantee in _guarantees) { guarantee.ApplyGuarantee(scheme, rng); } return(scheme); }
/// <summary> /// Sets the given extended option's value generator. /// </summary> public void Set(ExtendedOptionTypes extendedOption, ValueGenerator valueGenerator) { Debug.Assert(extendedOption < ExtendedOptionTypes.Count); _extendedOptionGenerators[(int)extendedOption] = valueGenerator; }