public int OnEnteredInTrigger(ExtendedVariantsModule.Variant variantChange, int newValue, bool revertOnLeave, bool isFade, bool revertOnDeath)
        {
            // change the variant value
            if (variantChange == ExtendedVariantsModule.Variant.ColorGrading && modColorGradeBeforeOverride == null)
            {
                modColorGradeBeforeOverride = ExtendedVariantsModule.Settings.ModColorGrade;
            }

            int oldValue = setVariantValue(variantChange, newValue, out int actualNewValue);

            if (!variantValuesBeforeOverride.ContainsKey(variantChange))
            {
                variantValuesBeforeOverride[variantChange] = oldValue;
            }

            if (revertOnDeath)
            {
                // store the fact that the variant was changed within the room
                // so that it can be reverted if we die, or saved if we save & quit later
                // fade triggers get a special tag, because it can very quickly flood logs (1 line per frame) and needs to be turned on only when necessary.
                Logger.Log("ExtendedVariantMode/ExtendedVariantTriggerManager" + (isFade ? "-fade" : ""), $"Triggered ExtendedVariantTrigger: changed {variantChange} from {oldValue} to {newValue} (revertOnLeave = {revertOnLeave}) => variant set to {actualNewValue}");

                if (!oldVariantsInRoom.ContainsKey(variantChange))
                {
                    oldVariantsInRoom[variantChange] = oldValue;
                }
                if (revertOnLeave)
                {
                    overridenVariantsInRoomRevertOnLeave[variantChange] = actualNewValue;
                }
                else
                {
                    overridenVariantsInRoom[variantChange] = actualNewValue;
                }
            }
            else
            {
                Logger.Log("ExtendedVariantMode/ExtendedVariantTriggerManager", $"Triggered ExtendedVariantTrigger: changed and committed {variantChange} from {oldValue} to {newValue} => variant set to {actualNewValue}");

                // remove the variant from the room state if it was in there...
                oldVariantsInRoom.Remove(variantChange);
                overridenVariantsInRoom.Remove(variantChange);
                overridenVariantsInRoomRevertOnLeave.Remove(variantChange);

                // ... and save it straight into session.
                ExtendedVariantsModule.Session.VariantsEnabledViaTrigger[variantChange] = actualNewValue;
            }

            return(oldValue);
        }
        public static int GetDefaultValueForVariant(ExtendedVariantsModule.Variant variant)
        {
            switch (variant)
            {
            case ExtendedVariantsModule.Variant.ChaserCount: return(1);

            case ExtendedVariantsModule.Variant.AffectExistingChasers: return(0);

            case ExtendedVariantsModule.Variant.HiccupStrength: return(10);

            case ExtendedVariantsModule.Variant.RefillJumpsOnDashRefill: return(0);

            case ExtendedVariantsModule.Variant.SnowballDelay: return(8);

            case ExtendedVariantsModule.Variant.BadelineLag: return(0);

            case ExtendedVariantsModule.Variant.DelayBetweenBadelines: return(4);

            case ExtendedVariantsModule.Variant.OshiroCount: return(1);

            case ExtendedVariantsModule.Variant.ReverseOshiroCount: return(0);

            case ExtendedVariantsModule.Variant.DisableOshiroSlowdown: return(0);

            case ExtendedVariantsModule.Variant.DisableSeekerSlowdown: return(0);

            case ExtendedVariantsModule.Variant.BadelineAttackPattern: return(0);

            case ExtendedVariantsModule.Variant.ChangePatternsOfExistingBosses: return(0);

            case ExtendedVariantsModule.Variant.FirstBadelineSpawnRandom: return(0);

            case ExtendedVariantsModule.Variant.BadelineBossCount: return(1);

            case ExtendedVariantsModule.Variant.BadelineBossNodeCount: return(1);

            case ExtendedVariantsModule.Variant.RisingLavaSpeed: return(10);

            case ExtendedVariantsModule.Variant.AllowThrowingTheoOffscreen: return(0);

            case ExtendedVariantsModule.Variant.AllowLeavingTheoBehind: return(0);

            case ExtendedVariantsModule.Variant.DisableSuperBoosts: return(0);

            case ExtendedVariantsModule.Variant.DontRefillStaminaOnGround: return(0);

            default: return(ExtendedVariantsModule.Instance.VariantHandlers[variant].GetDefaultValue());
            }
        }
示例#3
0
        public ExtendedVariantTrigger(EntityData data, Vector2 offset) : base(data, offset)
        {
            // parse the trigger parameters
            variantChange = data.Enum("variantChange", ExtendedVariantsModule.Variant.Gravity);
            newValue      = data.Int("newValue", 10);
            revertOnLeave = data.Bool("revertOnLeave", false);
            revertOnDeath = data.Bool("revertOnDeath", true);

            if (!data.Bool("enable", true))
            {
                // "disabling" a variant is actually just resetting its value to default
                newValue = GetDefaultValueForVariant(variantChange);
            }

            // failsafe
            oldValueToRevertOnLeave = newValue;
        }
        public int GetCurrentVariantValue(ExtendedVariantsModule.Variant variant)
        {
            switch (variant)
            {
            case ExtendedVariantsModule.Variant.ChaserCount: return(ExtendedVariantsModule.Settings.ChaserCount);

            case ExtendedVariantsModule.Variant.AffectExistingChasers: return(ExtendedVariantsModule.Settings.AffectExistingChasers ? 1 : 0);

            case ExtendedVariantsModule.Variant.RefillJumpsOnDashRefill: return(ExtendedVariantsModule.Settings.RefillJumpsOnDashRefill ? 1 : 0);

            case ExtendedVariantsModule.Variant.HiccupStrength: return(ExtendedVariantsModule.Settings.HiccupStrength);

            case ExtendedVariantsModule.Variant.SnowballDelay: return(ExtendedVariantsModule.Settings.SnowballDelay);

            case ExtendedVariantsModule.Variant.BadelineLag: return(ExtendedVariantsModule.Settings.BadelineLag);

            case ExtendedVariantsModule.Variant.DelayBetweenBadelines: return(ExtendedVariantsModule.Settings.DelayBetweenBadelines);

            case ExtendedVariantsModule.Variant.OshiroCount: return(ExtendedVariantsModule.Settings.OshiroCount);

            case ExtendedVariantsModule.Variant.ReverseOshiroCount: return(ExtendedVariantsModule.Settings.ReverseOshiroCount);

            case ExtendedVariantsModule.Variant.DisableOshiroSlowdown: return(ExtendedVariantsModule.Settings.DisableOshiroSlowdown ? 1 : 0);

            case ExtendedVariantsModule.Variant.DisableSeekerSlowdown: return(ExtendedVariantsModule.Settings.DisableSeekerSlowdown ? 1 : 0);

            case ExtendedVariantsModule.Variant.BadelineAttackPattern: return(ExtendedVariantsModule.Settings.BadelineAttackPattern);

            case ExtendedVariantsModule.Variant.ChangePatternsOfExistingBosses: return(ExtendedVariantsModule.Settings.ChangePatternsOfExistingBosses ? 1 : 0);

            case ExtendedVariantsModule.Variant.FirstBadelineSpawnRandom: return(ExtendedVariantsModule.Settings.FirstBadelineSpawnRandom ? 1 : 0);

            case ExtendedVariantsModule.Variant.BadelineBossCount: return(ExtendedVariantsModule.Settings.BadelineBossCount);

            case ExtendedVariantsModule.Variant.BadelineBossNodeCount: return(ExtendedVariantsModule.Settings.BadelineBossNodeCount);

            case ExtendedVariantsModule.Variant.RisingLavaSpeed: return(ExtendedVariantsModule.Settings.RisingLavaSpeed);

            case ExtendedVariantsModule.Variant.AllowThrowingTheoOffscreen: return(ExtendedVariantsModule.Settings.AllowThrowingTheoOffscreen ? 1 : 0);

            case ExtendedVariantsModule.Variant.AllowLeavingTheoBehind: return(ExtendedVariantsModule.Settings.AllowLeavingTheoBehind ? 1 : 0);

            default: return(ExtendedVariantsModule.Instance.VariantHandlers[variant].GetValue());
            }
        }
 public int GetExpectedVariantValue(ExtendedVariantsModule.Variant variant)
 {
     if (overridenVariantsInRoomRevertOnLeave.ContainsKey(variant))
     {
         // variant was replaced in current room in "revert on leave" mode: we expect this value to be set.
         return(overridenVariantsInRoomRevertOnLeave[variant]);
     }
     if (overridenVariantsInRoom.ContainsKey(variant))
     {
         // variant was replaced in current room: we expect this value to be set.
         return(overridenVariantsInRoom[variant]);
     }
     if (ExtendedVariantsModule.Session.VariantsEnabledViaTrigger.ContainsKey(variant))
     {
         // variant was replaced in a previous room: we expect this value to be set.
         return(ExtendedVariantsModule.Session.VariantsEnabledViaTrigger[variant]);
     }
     // no variant trigger has been used: we expect the default value.
     return(ExtendedVariantTrigger.GetDefaultValueForVariant(variant));
 }
示例#6
0
 private static TextMenu.Item addToggleOptionToMenu(TextMenu menu, ExtendedVariantsModule.Variant variant)
 {
     return(addToggleOptionToMenu(menu, variant.ToString(), "MODOPTIONS_EXTENDEDVARIANTS_" + variant.ToString().ToUpperInvariant()));
 }
示例#7
0
        private bool isDefaultValue(ExtendedVariantsModule.Variant variant)
        {
            AbstractExtendedVariant variantHandler = ExtendedVariantsModule.Instance.VariantHandlers[variant];

            return(variantHandler.GetValue() == variantHandler.GetDefaultValue());
        }
        /// <summary>
        /// Sets a variant value.
        /// </summary>
        /// <param name="variantChange">The variant to change</param>
        /// <param name="newValue">The new value</param>
        /// <returns>The old value for this variant</returns>
        private int setVariantValue(ExtendedVariantsModule.Variant variantChange, int newValue, out int actualNewValue)
        {
            int oldValue;

            switch (variantChange)
            {
            case ExtendedVariantsModule.Variant.ChaserCount:
                oldValue = ExtendedVariantsModule.Settings.ChaserCount;
                ExtendedVariantsModule.Settings.ChaserCount = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.AffectExistingChasers:
                oldValue = ExtendedVariantsModule.Settings.AffectExistingChasers ? 1 : 0;
                ExtendedVariantsModule.Settings.AffectExistingChasers = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.RefillJumpsOnDashRefill:
                oldValue = ExtendedVariantsModule.Settings.RefillJumpsOnDashRefill ? 1 : 0;
                ExtendedVariantsModule.Settings.RefillJumpsOnDashRefill = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.HiccupStrength:
                oldValue = ExtendedVariantsModule.Settings.HiccupStrength;
                ExtendedVariantsModule.Settings.HiccupStrength = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.SnowballDelay:
                oldValue = ExtendedVariantsModule.Settings.SnowballDelay;
                ExtendedVariantsModule.Settings.SnowballDelay = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.BadelineLag:
                oldValue = ExtendedVariantsModule.Settings.BadelineLag;
                ExtendedVariantsModule.Settings.BadelineLag = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.DelayBetweenBadelines:
                oldValue = ExtendedVariantsModule.Settings.DelayBetweenBadelines;
                ExtendedVariantsModule.Settings.DelayBetweenBadelines = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.OshiroCount:
                oldValue = ExtendedVariantsModule.Settings.OshiroCount;
                ExtendedVariantsModule.Settings.OshiroCount = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.ReverseOshiroCount:
                oldValue = ExtendedVariantsModule.Settings.ReverseOshiroCount;
                ExtendedVariantsModule.Settings.ReverseOshiroCount = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.DisableOshiroSlowdown:
                oldValue = ExtendedVariantsModule.Settings.DisableOshiroSlowdown ? 1 : 0;
                ExtendedVariantsModule.Settings.DisableOshiroSlowdown = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.DisableSeekerSlowdown:
                oldValue = ExtendedVariantsModule.Settings.DisableSeekerSlowdown ? 1 : 0;
                ExtendedVariantsModule.Settings.DisableSeekerSlowdown = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.BadelineAttackPattern:
                oldValue = ExtendedVariantsModule.Settings.BadelineAttackPattern;
                ExtendedVariantsModule.Settings.BadelineAttackPattern = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.ChangePatternsOfExistingBosses:
                oldValue = ExtendedVariantsModule.Settings.ChangePatternsOfExistingBosses ? 1 : 0;
                ExtendedVariantsModule.Settings.ChangePatternsOfExistingBosses = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.FirstBadelineSpawnRandom:
                oldValue = ExtendedVariantsModule.Settings.FirstBadelineSpawnRandom ? 1 : 0;
                ExtendedVariantsModule.Settings.FirstBadelineSpawnRandom = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.BadelineBossCount:
                oldValue = ExtendedVariantsModule.Settings.BadelineBossCount;
                ExtendedVariantsModule.Settings.BadelineBossCount = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.BadelineBossNodeCount:
                oldValue = ExtendedVariantsModule.Settings.BadelineBossNodeCount;
                ExtendedVariantsModule.Settings.BadelineBossNodeCount = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.RisingLavaSpeed:
                oldValue = ExtendedVariantsModule.Settings.RisingLavaSpeed;
                ExtendedVariantsModule.Settings.RisingLavaSpeed = newValue;
                actualNewValue = newValue;
                break;

            case ExtendedVariantsModule.Variant.AllowThrowingTheoOffscreen:
                oldValue = ExtendedVariantsModule.Settings.AllowThrowingTheoOffscreen ? 1 : 0;
                ExtendedVariantsModule.Settings.AllowThrowingTheoOffscreen = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            case ExtendedVariantsModule.Variant.AllowLeavingTheoBehind:
                oldValue = ExtendedVariantsModule.Settings.AllowLeavingTheoBehind ? 1 : 0;
                ExtendedVariantsModule.Settings.AllowLeavingTheoBehind = (newValue != 0);
                actualNewValue = (newValue != 0 ? 1 : 0);
                break;

            default:
                AbstractExtendedVariant variant = ExtendedVariantsModule.Instance.VariantHandlers[variantChange];
                oldValue = variant.GetValue();
                variant.SetValue(newValue);
                actualNewValue = variant.GetValue();
                break;
            }

            return(oldValue);
        }
 public int OnEnteredInTrigger(ExtendedVariantsModule.Variant variantChange, int newValue, bool revertOnLeave, bool isFade)
 {
     return(OnEnteredInTrigger(variantChange, newValue, revertOnLeave, isFade, revertOnDeath: true));
 }