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); }
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(); } }
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); }