private void onLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { if (Input.Aim == null || Input.MoveX == null || SaveData.Instance?.Assists == null || Settings == null) { orig(self); return; } // this is vanilla behavior Input.Aim.InvertedX = SaveData.Instance.Assists.MirrorMode; // there may be Crow Control here. if so, it will mess with Input.Aim.InvertedX orig(self); // at this point, Input.Aim.InvertedX is either the vanilla value, or what Crow Control wants. // either way, we should keep it or invert it based on our settings. bool expectedValue = Input.Aim.InvertedX; if (Settings.InvertHorizontalControls) { expectedValue = !expectedValue; } Input.Aim.InvertedX = expectedValue; Input.MoveX.Inverted = expectedValue; }
private static void onLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); // check if the player is in a color grade fade trigger Player player = self.Tracker.GetEntity <Player>(); ColorGradeFadeTrigger trigger = self.Tracker.GetEntities <ColorGradeFadeTrigger>().OfType <ColorGradeFadeTrigger>() .FirstOrDefault(t => t.evenDuringReflectionFall ? player?.Collider.Collide(t) ?? false : t.playerInside); if (player != null && trigger != null) { DynData <Level> selfData = new DynData <Level>(self); // the game fades from lastColorGrade to Session.ColorGrade using colorGradeEase as a lerp value. // let's hijack that! float positionLerp = trigger.GetPositionLerp(player, trigger.direction); if (positionLerp > 0.5f) { // we are closer to B. let B be the target color grade when player exits the trigger / dies in it selfData["lastColorGrade"] = trigger.colorGradeA; self.Session.ColorGrade = trigger.colorGradeB; selfData["colorGradeEase"] = positionLerp; } else { // we are closer to A. let A be the target color grade when player exits the trigger / dies in it selfData["lastColorGrade"] = trigger.colorGradeB; self.Session.ColorGrade = trigger.colorGradeA; selfData["colorGradeEase"] = 1 - positionLerp; } selfData["colorGradeEaseSpeed"] = 1f; } }
internal static void Level_Update(On.Celeste.Level.orig_Update orig, Level self) { //speed changing if (EmoteModMain.anim_by_game == 1) { foreach (Entity entity in self.Entities) { foreach (Sprite sprite in entity.Components.GetAll <Sprite>()) { if (sprite == player.Sprite && sprite.Animating) { DynData <Sprite> data = new DynData <Sprite>(sprite); if (EmoteModMain.Settings.AnimationSpeed != 9) { (data["currentAnimation"] as Sprite.Animation).Delay = currentDelay / speeds[EmoteModMain.Settings.AnimationSpeed]; } else { (data["currentAnimation"] as Sprite.Animation).Delay = sprite.Animations[sprite.CurrentAnimationID].Delay; } } } } } orig(self); }
private void ProcessButtons(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!SpeedrunToolModule.Enabled) { return; } if (GetVirtualButton(Mappings.ResetRoomPb).Pressed&& !self.Paused) { GetVirtualButton(Mappings.ResetRoomPb).ConsumePress(); ClearPbTimes(); } if (GetVirtualButton(Mappings.SwitchRoomTimer).Pressed&& !self.Paused) { GetVirtualButton(Mappings.SwitchRoomTimer).ConsumePress(); RoomTimerType roomTimerType = SpeedrunToolModule.Settings.RoomTimerType; SwitchRoomTimer(((int)roomTimerType + 1) % Enum.GetNames(typeof(RoomTimerType)).Length); SpeedrunToolModule.Instance.SaveSettings(); } if (GetVirtualButton(Mappings.SetEndPoint).Pressed&& !self.Paused) { GetVirtualButton(Mappings.SetEndPoint).ConsumePress(); ClearPbTimes(); CreateEndPoint(self); } }
private void Timing(On.Celeste.Level.orig_Update orig, Level self) { if (SpeedrunToolModule.LivesplitMode) { var currentRoom = Celeste.Instance.AutoSplitterInfo.Level; if (previousRoom != null && previousRoom != currentRoom) { UpdateTimerState(); } previousRoom = currentRoom; } else { if (!self.Completed && self.TimerStarted) { nextRoomTimerData.Timing(self); currentRoomTimerData.Timing(self); } else if (self.Completed) { UpdateTimerState(); } } orig(self); }
private void onLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (Settings.AnxietyEffect != -1) { anxietyCustomized = true; // set the anxiety intensity GFX.FxDistort.Parameters["anxiety"].SetValue(Celeste.Settings.Instance.DisableFlashes ? 0f : Settings.AnxietyEffect / 5f); Vector2 camera = self.Camera.Position; Player player = self.Tracker.GetEntity <Player>(); if (player != null) { // the anxiety comes from the player GFX.FxDistort.Parameters["anxietyOrigin"].SetValue(new Vector2((player.Center.X - camera.X) / 320f, (player.Center.Y - camera.Y) / 180f)); } else { // there is no player; the anxiety come from the screen center GFX.FxDistort.Parameters["anxietyOrigin"].SetValue(new Vector2(0.5f, 0.5f)); } } else if (anxietyCustomized) { // restore the anxiety to its default value anxietyCustomized = false; Distort.Anxiety = Distort.Anxiety; Distort.AnxietyOrigin = Distort.AnxietyOrigin; } }
// cancel if not on level public static void Level_Update(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!(Engine.Scene is Level) && EmoteModMain.anim_by_game == 1) { cancelEmote(); } }
private static void LevelOnUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (transitionFrames > 0) { transitionFrames--; } }
private static void OnLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!self.Paused) { // progressively fade in or out. alphaFade = Calc.Approach(alphaFade, SpringCollab2020Module.Instance.Session.LightSourcesDisabled ? 0f : 1f, Engine.DeltaTime * 3f); } }
private void CheckButtonsAndUpdateBackdrop(On.Celeste.Level.orig_Update orig, Level self) { orig(self); CheckButton(self); if (State == States.Waiting && self.Frozen) { self.Foreground.Update(self); self.Background.Update(self); } }
private static void onLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); float ambienceVolume = MaxHelpingHandModule.Instance.Session.AmbienceVolume; if (ambienceVolume < 1) { Audio.CurrentAmbienceEventInstance?.setVolume(ambienceVolume); } }
private void Level_Update(On.Celeste.Level.orig_Update orig, Level self) { orig(self); // Seems modified the Settings.SimplifiedGraphics property will mess key config. if (lastSimplifiedGraphics != Settings.SimplifiedGraphics) { OnSimplifiedGraphicsChanged(Settings.SimplifiedGraphics); lastSimplifiedGraphics = Settings.SimplifiedGraphics; } }
private void Timing(On.Celeste.Level.orig_Update orig, Level self) { if (!self.Completed && self.TimerStarted) { nextRoomTimerData.Timing(self.Session); currentRoomTimerData.Timing(self.Session); } else if (self.Completed) { UpdateTimerState(); } orig(self); }
private void LevelOnUpdate(On.Celeste.Level.orig_Update orig, Level level) { orig(level); if (!SpeedrunToolModule.Enabled) { return; } if (level.Paused) { return; } CheckDeathStatisticsButton(level); }
private static void AddedOpenDebugMapButton(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!SpeedrunToolModule.Enabled) { return; } if (GetVirtualButton(Mappings.OpenDebugMap).Pressed&& !self.Paused) { GetVirtualButton(Mappings.OpenDebugMap).ConsumePress(); Engine.Commands.FunctionKeyActions[5](); } }
private static void LevelOnUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!SpeedrunToolModule.Enabled) { return; } if (GetVirtualButton(Mappings.LastRoom).Pressed&& !self.Paused) { GetVirtualButton(Mappings.LastRoom).ConsumePress(); TeleportToLastRoom(self); } else if (GetVirtualButton(Mappings.NextRoom).Pressed&& !self.Paused) { GetVirtualButton(Mappings.NextRoom).ConsumePress(); TeleportToNextRoom(self); } }
private void ProcessButtons(On.Celeste.Level.orig_Update orig, Level self) { orig(self); if (!SpeedrunToolModule.Enabled || self.Paused) { return; } if (Mappings.ResetRoomPb.Pressed() && !self.Paused) { Mappings.ResetRoomPb.ConsumePress(); ClearPbTimes(); } if (Mappings.SwitchRoomTimer.Pressed() && !self.Paused) { Mappings.SwitchRoomTimer.ConsumePress(); RoomTimerType roomTimerType = SpeedrunToolModule.Settings.RoomTimerType; SwitchRoomTimer(((int)roomTimerType + 1) % Enum.GetNames(typeof(RoomTimerType)).Length); SpeedrunToolModule.Instance.SaveSettings(); } if (Mappings.SetEndPoint.Pressed() && !self.Paused) { Mappings.SetEndPoint.ConsumePress(); ClearPbTimes(); CreateEndPoint(self); } if (Mappings.SetAdditionalEndPoint.Pressed() && !self.Paused) { Mappings.SetAdditionalEndPoint.ConsumePress(); if (!EndPoint.IsExist) { ClearPbTimes(); } CreateEndPoint(self, true); } }
private void LevelOnUpdate(On.Celeste.Level.orig_Update orig, Level level) { if (!SpeedrunToolModule.Enabled) { orig(level); return; } Player player = level.Entities.FindFirst <Player>(); if (CheckButton(level, player)) { return; } // 章节切换时清除保存的状态以及房间计时器自定终点 // Clear the savestate and custom end point when switching chapters if (IsSaved && (savedSession.Area.ID != level.Session.Area.ID || savedSession.Area.Mode != level.Session.Area.Mode)) { ClearState(); RoomTimerManager.Instance.ClearPbTimes(); } // 尽快设置人物的位置与镜头,然后冻结游戏等待人物复活 // Set player position ASAP, then freeze game and wait for the player to respawn (? - euni) if (IsSaved && IsLoadStart && player != null) { LoadStart(level); // 调用 Level.Update 多次使所有 Entity 更新绘完毕后后再冻结游戏 // Wait for some frames so entities can be updated and rendered, then freeze game. for (int i = 0; i < 3; i++) { orig(level); } // 等所有 Entity 创建完毕并渲染完成后再统一在此时机还原状态 RestoreEntityUtils.AfterEntityAwake(level); // 冻结游戏等待 Madeline 复活 // Freeze the game wait for madeline respawn. if (player.StateMachine.State == Player.StIntroRespawn) { level.Frozen = true; level.PauseLock = true; loadState = SaveLoad.LoadState.Frozen; } else { loadState = SaveLoad.LoadState.PlayerRespawned; } return; } // 冻结时允许人物 Update 以便复活 // Allow player to respawn while level is frozen if (IsSaved && IsLoadFrozen) { UpdatePlayerWhenFreeze(level, player); } // 人物复活完毕后设置人物相关属性 // Set more player data after the player respawns if (IsSaved && (IsPlayerRespawned || IsLoadFrozen) && player != null && (player.StateMachine.State == Player.StNormal || player.StateMachine.State == Player.StSwim || player.StateMachine.State == Player.StFlingBird)) { RestoreEntityUtils.AfterPlayerRespawn(level); level.Frozen = false; level.PauseLock = false; // BadelinOldsite 追踪需要 level.TimeActive = SavedLevel.TimeActive; loadState = SaveLoad.LoadState.Complete; RestoreEntityUtils.OnLoadComplete(level); } orig(level); }
private void Level_Update(On.Celeste.Level.orig_Update orig, Level self) { Level newLevel = self; actionHelper.SetLevel(newLevel); spawnHelper.SetLevel(newLevel); currentLevel = newLevel; if (Settings.Blur && Settings.BlurEnabled) { BlurCurrentLevel(newLevel, Settings.BlurLevel); } else { BlurCurrentLevel(newLevel, 1); } if (Settings.DisableGrab && Settings.DisableGrabEnabled) { SaveData.Instance.Assists.NoGrabbing = true; } else { SaveData.Instance.Assists.NoGrabbing = false; } if (Settings.Mirror && Settings.MirrorEnabled) { SaveData.Instance.Assists.MirrorMode = true; if (Settings.Invert && Settings.InvertEnabled) { Input.MoveX.Inverted = false; Input.Aim.InvertedX = false; } else { Input.MoveX.Inverted = true; Input.Aim.InvertedX = true; } } else { SaveData.Instance.Assists.MirrorMode = false; if (Settings.Invert && Settings.InvertEnabled) { Input.MoveX.Inverted = true; Input.Aim.InvertedX = true; } else { Input.MoveX.Inverted = false; Input.Aim.InvertedX = false; } } if (Settings.Invisible && Settings.InvisibleEnabled) { SaveData.Instance.Assists.InvisibleMotion = true; } else { SaveData.Instance.Assists.InvisibleMotion = false; } if (Settings.LowFriction && Settings.LowFrictionEnabled) { SaveData.Instance.Assists.LowFriction = true; } else { SaveData.Instance.Assists.LowFriction = false; } if (Settings.GodMode && Settings.GodModeEnabled) { SaveData.Instance.Assists.Invincible = true; } else { SaveData.Instance.Assists.Invincible = false; } if (spawnKevin) { CrushBlock crushBlock = new CrushBlock(ply.Position - new Vector2(12, 50), 25, 25, CrushBlock.Axes.Vertical, false); currentLevel.Add(crushBlock); currentLevel.Entities.UpdateLists(); crushBlock.OnDashCollide(ply, new Vector2(0, -1)); spawnKevin = false; } if (newLevel.Entities.AmountOf <PlayerSeeker>() > 0 || inCredits || ascending) { disableCommands = true; } else { disableCommands = false; } orig(newLevel); }
private void CheckButtonsOnLevelUpdate(On.Celeste.Level.orig_Update orig, Level self) { orig(self); CheckButton(self); }