Example #1
0
        private static void onLevelEnd(On.Celeste.Level.orig_End orig, Level self)
        {
            orig(self);

            // we're leaving the level: forget about the stored speed berry.
            storedSpeedBerry = null;
        }
Example #2
0
 private static void Player_Added(On.Celeste.Player.orig_Added orig, Player self, Scene scene)
 {
     orig(self, scene);
     if (storedSpeedBerry != null)
     {
         SpeedBerry berry;
         if (scene.Tracker.CountEntities <SpeedBerry>() == 0)
         {
             // create a new SpeedBerry in the current room
             EntityData newData = storedSpeedBerry.EntityData;
             Vector2    lastPos = newData.Position;
             newData.Position   = self.Position + new Vector2(8, -16);
             scene.Add(berry    = new SpeedBerry(newData, Vector2.Zero, storedSpeedBerry.ID, restored: true));
             newData.Position   = lastPos;
             berry.TimerDisplay = storedSpeedBerry.TimerDisplay;
             berry.TimerDisplay.TrackedBerry = berry;
             self.Leader.GainFollower(berry.Follower);
             storedSpeedBerry.RemoveSelf();
         }
         else
         {
             storedSpeedBerry.TimerDisplay?.RemoveSelf();
         }
         storedSpeedBerry = null;
     }
 }
Example #3
0
        private static void onTransitionEnd(On.Celeste.Player.orig_OnTransition orig, Player self)
        {
            orig(self);

            SpeedBerry speedBerry = self.Scene?.Tracker.GetEntity <SpeedBerry>();

            if (speedBerry != null)
            {
                speedBerry.TimerDisplay?.StartTimer();
            }
        }
Example #4
0
        private static PlayerDeadBody onPlayerDie(On.Celeste.Player.orig_Die orig, Player self, Vector2 direction, bool evenIfInvincible, bool registerDeathInStats)
        {
            bool       hasSilver  = false;
            SpeedBerry speedBerry = null;

            // check if the player is actually going to die first.
            if (!self.Dead && (evenIfInvincible || !SaveData.Instance.Assists.Invincible) && self.StateMachine.State != Player.StReflectionFall)
            {
                hasSilver = self.Leader.Followers.Any(follower => follower.Entity is SilverBerry);
                Follower speedBerryFollower = self.Leader.Followers.Find(follower => follower.Entity is SpeedBerry);
                if (speedBerryFollower != null)
                {
                    speedBerry = (SpeedBerry)speedBerryFollower.Entity;
                    // Don't restart the player to the starting room if there's still time left on the speed berry
                    if (!speedBerry.TimeRanOut)
                    {
                        DynData <Strawberry> data = new DynData <Strawberry>(speedBerry);
                        data["Golden"] = false;
                        // set the starting position to the spawn point
                        Level level = self.SceneAs <Level>();
                        data["start"] = level.GetSpawnPoint(new Vector2(level.Bounds.Left, level.Bounds.Top)) + new Vector2(8, -16);
                    }
                }
            }

            PlayerDeadBody body = orig(self, direction, evenIfInvincible, registerDeathInStats);

            if (body != null)
            {
                DynData <PlayerDeadBody> data = new DynData <PlayerDeadBody>(body);
                data["hasSilver"]     = hasSilver;
                data["hasSpeedBerry"] = (speedBerry != null);
                storedSpeedBerry      = speedBerry;
            }
            return(body);
        }