private static int Player_RedDashUpdate(On.Celeste.Player.orig_RedDashUpdate orig, Player self)
        {
            DreamBooster dreamBooster = self.LastBooster as DreamBooster;

            if (dreamBooster != null)
            {
                bool inSolid = self.CollideCheck <Solid, DreamBlock>();

                // Prevent the player from jumping or dashing out of the DreamBooster. May be reset in IL hook below.
                // If for whatever reason this becomes an actual option for DreamBoosters, this will need to be changed.
                if (inSolid)
                {
                    self.LastBooster.Ch9HubTransition = true;
                }

                dreamBooster.LoopingSfxParam("dream_tunnel", Util.ToInt(inSolid));
                if (Vector2.Distance(self.Center, dreamBooster.Start) >= dreamBooster.Length)
                {
                    self.Position = dreamBooster.Target;
                    self.SceneAs <Level>().DirectionalShake(dreamBooster.Dir, 0.175f);
                    return(0);
                }
            }

            int ret = orig(self);

            if (dreamBooster != null)
            {
                self.LastBooster.Ch9HubTransition = false;
            }

            return(ret);
        }
            public DreamBoosterPathRenderer(DreamBooster booster, float alpha)
            {
                Depth        = Depths.DreamBlocks + 1;
                dreamBooster = booster;

                Alpha = Percent = alpha;
                perp  = dreamBooster.Dir.Perpendicular();
            }