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()); } }
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)); }
private static TextMenu.Item addToggleOptionToMenu(TextMenu menu, ExtendedVariantsModule.Variant variant) { return(addToggleOptionToMenu(menu, variant.ToString(), "MODOPTIONS_EXTENDEDVARIANTS_" + variant.ToString().ToUpperInvariant())); }
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)); }