private Color OnPlayerHair_GetHairColor(On.Celeste.PlayerHair.orig_GetHairColor orig, Celeste.PlayerHair self, int index)
        {
            if (Settings.Enabled && (self.Entity is Celeste.Player))
            {
                Celeste.Player player = self.Entity as Celeste.Player;

                if (player.StateMachine.State != 19 && (player.Sprite.Mode == PlayerSpriteMode.Madeline || player.Sprite.Mode == PlayerSpriteMode.MadelineNoBackpack))
                {
                    int colorIndex = 1;
                    if (player.Inventory.Dashes > 0)
                    {
                        colorIndex = player.Dashes;
                    }
                    switch (colorIndex)
                    {
                    case 0:
                        return(new Color(134, 135, 138));

                    case 1:
                        return(new Color(78, 60, 42));

                    case 2:
                        return(new Color(237, 194, 18));
                    }
                }
            }
            return(orig(self, index));
        }
        private void OnPlayerUpdate(On.Celeste.Player.orig_Update orig, Celeste.Player self)
        {
            if (Settings.Enabled)
            {
                var  wasOnGroundField = typeof(Celeste.Player).GetField("onGround", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                bool wasOnGround      = (bool)wasOnGroundField.GetValue(self);
                orig(self);
                var  isOnGroundField = typeof(Celeste.Player).GetField("onGround", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                bool isOnGround      = (bool)isOnGroundField.GetValue(self);

                if (self.InControl && isOnGround && (wasOnGround != isOnGround))
                {
                    ApplyRules(self.Scene, "Land");
                }

                if (Engine.Scene.OnInterval(Calc.LerpClamp(0.05f, 0, Math.Min(0.99f, Session.AnxietyBonus))))
                {
                    Session.AnxietyStutter = Calc.Random.NextFloat();
                }
            }
            else
            {
                orig(self);
            }
        }
 private void OnPlayerDuck(On.Celeste.Player.orig_Duck orig, Celeste.Player self)
 {
     orig(self);
     if (Settings.Enabled)
     {
         ApplyRules(self.Scene, "Duck");
     }
 }
 private void OnPlayerJump(On.Celeste.Player.orig_Jump orig, Celeste.Player self, bool particles, bool playSfx)
 {
     if (Settings.Enabled && self.InControl)
     {
         ApplyRules(self.Scene, "Jump");
     }
     orig(self, particles, playSfx);
 }
 private void OnPlayerDashBegin(On.Celeste.Player.orig_DashBegin orig, Celeste.Player self)
 {
     if (Settings.Enabled && self.InControl)
     {
         ApplyRules(self.Scene, "Dash");
     }
     orig(self);
 }
 private static bool Pickup(On.Celeste.Player.orig_Pickup orig, Celeste.Player self, Celeste.Holdable pickup)
 {
     if (self.Holding == null || !(self.Holding.Entity is ThrowBox))
     {
         return(orig(self, pickup));
     }
     return(false);
 }
        private Celeste.PlayerDeadBody OnPlayerDie(On.Celeste.Player.orig_Die orig, Celeste.Player self, Vector2 direction, bool evenIfInvincible, bool registerDeathInStats)
        {
            PlayerDeadBody result = orig(self, direction, evenIfInvincible, registerDeathInStats);

            if (Settings.Enabled && result != null)
            {
                ApplyRules(self.Scene, "Die");
            }
            return(result);
        }
        private bool OnPlayerUseRefill(On.Celeste.Player.orig_UseRefill orig, Celeste.Player self, bool twoDashes)
        {
            bool refilled = orig(self, twoDashes);

            if (refilled && Settings.Enabled)
            {
                ApplyRules(self.Scene, "Refill");
            }
            return(refilled);
        }
        private bool OnPlayerStartStarFly(On.Celeste.Player.orig_StartStarFly orig, Celeste.Player self)
        {
            bool startedFly = orig(self);

            if (startedFly && Settings.Enabled)
            {
                ApplyRules(self.Scene, "Feather");
            }
            return(startedFly);
        }
        public static IEnumerator OshiroSpawnRoutine(Celeste.Player player, int count)
        {
            while (count > 0)
            {
                yield return(0.5f);

                Celeste.AngryOshiro oshiro = new Celeste.AngryOshiro(new Vector2(player.SceneAs <Celeste.Level>().Bounds.Left - 64, player.Position.Y), false);
                player.Scene.Add(oshiro);
                Session.SpawnedOshiros.Add(oshiro);
                count--;
            }
        }
        private static void LoadLevel(On.Celeste.Level.orig_LoadLevel orig, Celeste.Level self, Celeste.Player.IntroTypes playerIntro, bool isFromLoader)
        {
            orig(self, playerIntro, isFromLoader);
            if (playerIntro != Celeste.Player.IntroTypes.Transition || isFromLoader)
            {
                Celeste.Player player = self.Tracker.GetEntity <Celeste.Player>();

                foreach (Celeste.EntityID key in (FactoryHelperModule.Instance._Session as FactoryHelperSession).Batteries)
                {
                    self.Add(new Battery(player, key));
                }
            }
        }
        private static void ctor(On.Celeste.Player.orig_ctor orig, Celeste.Player self, Vector2 position, PlayerSpriteMode spriteMode)
        {
            orig(self, position, spriteMode);
            var conveyorMover = new ConveyorMover();

            conveyorMover.OnMove = (amount) =>
            {
                if (self.StateMachine.State != 1)
                {
                    self.MoveH(amount * Engine.DeltaTime);
                }
            };
            self.Add(conveyorMover);
        }
        private void OnLevelLoadLevel(On.Celeste.Level.orig_LoadLevel orig, Celeste.Level self, Celeste.Player.IntroTypes playerIntro, bool isFromLoader)
        {
            orig(self, playerIntro, isFromLoader);

            Session.SpawnedOshiros.Clear();
            Session.SpawnedBadelineChasers.Clear();

            if (Settings.Enabled)
            {
                Celeste.Player player = self.Tracker.GetEntity <Celeste.Player>();

                if (!isFromLoader)
                {
                    ApplyRules(self, "ScreenChange");

                    if (self.NewLevel)
                    {
                        ApplyRules(self, "NewRoom");
                    }
                }

                if (player != null)
                {
                    int chaserCount = self.Tracker.CountEntities <BadelineOldsite>() + self.Tracker.CountEntities <EveryTimeCustomChaser>();
                    int added       = 0;
                    while (added < Session.ChaserCount)
                    {
                        if (chaserCount >= 7)
                        {
                            break;
                        }
                        EveryTimeCustomChaser chaser = new EveryTimeCustomChaser(player.Position + Vector2.UnitY * 32, chaserCount++);
                        self.Add(chaser);
                        Session.SpawnedBadelineChasers.Add(chaser);
                        added++;
                    }

                    player.Add(new Coroutine(OshiroSpawnRoutine(player, Session.OshiroCount)));
                }
            }
        }
        private static Celeste.PlayerDeadBody PlayerDie(On.Celeste.Player.orig_Die orig, Celeste.Player self, Vector2 direction, bool evenIfInvincible, bool registerDeathInStats)
        {
            Celeste.Session session = (self.Scene as Celeste.Level).Session;

            Celeste.PlayerDeadBody playerDeadBody = orig(self, direction, evenIfInvincible, registerDeathInStats);

            if (playerDeadBody != null)
            {
                Celeste.Strawberry goldenStrawb = null;
                foreach (Celeste.Follower follower in self.Leader.Followers)
                {
                    if (follower.Entity is Celeste.Strawberry && (follower.Entity as Celeste.Strawberry).Golden && !(follower.Entity as Celeste.Strawberry).Winged)
                    {
                        goldenStrawb = (follower.Entity as Celeste.Strawberry);
                    }
                }
                Vector2?specialBoxLevel = (FactoryHelperModule.Instance._Session as FactoryHelperSession).SpecialBoxPosition;
                if (goldenStrawb == null && specialBoxLevel != null)
                {
                    playerDeadBody.DeathAction = delegate
                    {
                        Engine.Scene = new Celeste.LevelExit(Celeste.LevelExit.Mode.Restart, session);
                    };
                }
            }
            return(playerDeadBody);
        }
示例#15
0
        private static IEnumerator LookRoutine(On.Celeste.Lookout.orig_LookRoutine orig, Celeste.Lookout self, Celeste.Player player)
        {
            SteamWall steamWall = self.Scene.Tracker.GetEntity <SteamWall>();

            if (steamWall != null)
            {
                steamWall.Halted = true;
            }
            yield return(orig(self, player));

            if (steamWall != null)
            {
                steamWall.Halted = false;
            }
        }
示例#16
0
 private static Celeste.PlayerDeadBody OnDeath(On.Celeste.Player.orig_Die orig, Celeste.Player self, Vector2 direction, bool evenIfInvincible, bool registerDeathInStats)
 {
     Celeste.PlayerDeadBody result = orig(self, direction, evenIfInvincible, registerDeathInStats);
     if (result != null)
     {
         string level = self.SceneAs <Celeste.Level>().Session.Level;
         if (TrollLandModule.Session.DeathCountPerLevel.ContainsKey(level))
         {
             TrollLandModule.Session.DeathCountPerLevel[level] += 1;
         }
         else
         {
             TrollLandModule.Session.DeathCountPerLevel[level] = 1;
         }
     }
     return(result);
 }
 private void OnPlayerDreamDashBegin(On.Celeste.Player.orig_DreamDashBegin orig, Celeste.Player self)
 {
     orig(self);
     if (Settings.Enabled)
     {
         ApplyRules(self.Scene, "DreamDash");
     }
 }
 private void OnKeyOnPlayer(On.Celeste.Key.orig_OnPlayer orig, Celeste.Key self, Celeste.Player player)
 {
     orig(self, player);
     if (Settings.Enabled)
     {
         ApplyRules(self.Scene, "CollectKey");
     }
 }
 private void OnHeartGemCollect(On.Celeste.HeartGem.orig_Collect orig, Celeste.HeartGem self, Celeste.Player player)
 {
     orig(self, player);
     if (Settings.Enabled)
     {
         ApplyRules(self.Scene, "CollectHeart");
     }
 }
        private static IEnumerator LookRoutine(On.Celeste.Lookout.orig_LookRoutine orig, Celeste.Lookout self, Celeste.Player player)
        {
            SteamWall steamWall = self.Scene.Tracker.GetEntity <SteamWall>();

            if (steamWall != null)
            {
                steamWall.Halted = true;
            }

            IEnumerator enumerator = orig(self, player);

            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }

            if (steamWall != null)
            {
                steamWall.Halted = false;
            }
        }
 private void OnSpringOnCollide(On.Celeste.Spring.orig_OnCollide orig, Celeste.Spring self, Celeste.Player player)
 {
     orig(self, player);
     if (Settings.Enabled)
     {
         var canUseField = typeof(Celeste.Spring).GetField("playerCanUse", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
         if (!(player.StateMachine.State == 9 || !(bool)canUseField.GetValue(self)))
         {
             ApplyRules(player.Scene, "Spring");
         }
     }
 }
示例#22
0
 private void modJump(On.Celeste.Player.orig_Jump orig, Celeste.Player self, bool particles, bool playSfx)
 {
     orig(self, particles, playSfx);
     forceUltra(self);
 }
        private IEnumerator OnLookoutLookRoutine(On.Celeste.Lookout.orig_LookRoutine orig, Celeste.Lookout self, Celeste.Player player)
        {
            IEnumerator enumerator = orig(self, player);

            while (enumerator.MoveNext())
            {
                yield return(enumerator.Current);
            }
            if (Settings.Enabled && player != null)
            {
                doTaxWipe = true;
                player.Die(-Vector2.UnitY);
            }
        }