예제 #1
0
        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);
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        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);
        }