Beispiel #1
0
        public override void AddComponents()
        {
            base.AddComponents();

            Width  = 7;
            Height = 17;

            AddComponent(new SensorBodyComponent(-Npc.Padding, -Npc.Padding, Width + Npc.Padding * 2, Height + Npc.Padding * 2, BodyType.Static));

            cost = Math.Min(99, Run.Depth * 15);
            paid = GlobalSave.GetInt("builder_paid", 0);

            AddComponent(new AnimationComponent("builder"));
            // GetComponent<DialogComponent>().Dialog.Voice = 15;

            var dl = GetComponent <DialogComponent>();

            dl.InitCallback = () => {
                dl.Dialog.Str.AddIcon(CommonAse.Ui.GetSlice("coin"));
                dl.Dialog.Str.SetVariable("need", GetPrice());
            };

            AddComponent(new InteractableComponent(e => {
                dl.Start("builder_0", e);
                return(true);
            })
            {
                CanInteract = e => !shouldDissappear
            });

            Dialogs.RegisterCallback("builder_0", (d, c) => {
                if (((ChoiceDialog)d).Choice == 0)
                {
                    if (!c.To.TryGetComponent <ConsumablesComponent>(out var component) || component.Coins == 0)
                    {
                        // Bro, you have no money!
                        return(Dialogs.Get("builder_1"));
                    }

                    var amount = Math.Min(GetPrice(), component.Coins);

                    paid            += amount;
                    component.Coins -= amount;
                    dl.Dialog.Str.SetVariable("need", GetPrice());

                    if (paid >= cost)
                    {
                        GlobalSave.Put("builder_paid", 0);
                        GlobalSave.Put($"shortcut_{Run.Depth}", true);

                        return(Dialogs.Get("builder_3"));
                    }
                    else
                    {
                        GlobalSave.Put("builder_paid", paid);
                    }

                    return(Dialogs.Get("builder_2"));
                }
Beispiel #2
0
        public override void Init()
        {
            base.Init();

            disk = GlobalSave.GetInt("disk");

            top    = CommonAse.Props.GetSlice("player_top");
            bottom = CommonAse.Props.GetSlice("player");
            tdisk  = CommonAse.Props.GetSlice("disk");
        }
Beispiel #3
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (from != null && TryGetComponent <HealthComponent>(out var h) && h.InvincibilityTimer <= 0.45f)
            {
                Done = true;

                if (from is Player)
                {
                    var count = GlobalSave.GetInt("paintings_destroyed", 0) + 1;

                    if (count >= 100)
                    {
                        Achievements.Unlock("bk:van_no_gogh");
                    }

                    GlobalSave.Put("paintings_destroyed", count);
                }

                for (var i = 0; i < 4; i++)
                {
                    var part = new ParticleEntity(Particles.Dust());

                    part.Position       = Center;
                    part.Particle.Scale = Lens.util.math.Rnd.Float(0.4f, 0.8f);

                    Area.Add(part);

                    part.Depth = Depth;
                }

                if (!HasComponent <AudioEmitterComponent>())
                {
                    AddComponent(new AudioEmitterComponent());
                }

                AudioEmitterComponent.Dummy(Area, Center).EmitRandomizedPrefixed("level_chair_break", 2, 0.5f);

                Particles.BreakSprite(Area, GetComponent <InteractableSliceComponent>().Sprite, Position, Depth);
                Camera.Instance.Shake(2f);
                Engine.Instance.Freeze = 1f;
            }
        }
        private bool DecideState()
        {
            if (lockInDemo && BK.Demo)
            {
                return(false);
            }

            switch (condition)
            {
            case 0: return(GlobalSave.IsTrue("played_once"));

            case 1: return(GlobalSave.IsTrue(ShopNpc.HatTrader));

            case 2: return(GlobalSave.IsTrue(ShopNpc.WeaponTrader));

            case 3: return(GlobalSave.IsTrue(ShopNpc.AccessoryTrader));

            case 4: return(GlobalSave.IsTrue(ShopNpc.ActiveTrader));

            case 5: return(GlobalSave.IsTrue(ShopNpc.Mike));

            case 6: return(GlobalSave.GetInt("challenges_completed") >= 10);

            case 7: return(GlobalSave.GetInt("challenges_completed") >= 20);

            case 8: return(GlobalSave.GetInt("challenges_completed") >= 30);

            case 9: return(Achievements.IsGroupComplete("a"));

            case 10: return(Achievements.IsGroupComplete("b"));

            case 11: return(Achievements.IsGroupComplete("c"));

            case 12: return(Achievements.IsGroupComplete("d"));
            }

            return(false);
        }
Beispiel #5
0
        private bool Interact(Entity e)
        {
            foreach (var s in Area.Tagged[Tags.Statue])
            {
                if (s.TryGetComponent <DialogComponent>(out var d))
                {
                    d.Close();
                }
            }

            string state;

            if (achievement != null && achievement.Unlocked)
            {
                var d = achievement.CompletionDate;

                if (d == "???")
                {
                    d = "~~???~~";
                }

                state = $"[sp 2][cl orange]{Locale.Get($"ach_{id}")}[cl]\n{Locale.Get($"ach_{id}_desc")}\n[cl gray]{Locale.Get("completed_on")} {d}[cl]";
            }
            else
            {
                state = $"[sp 2][cl orange]{Locale.Get($"ach_{id}")}[cl]";

                if (achievement.Max > 0)
                {
                    var p = GlobalSave.GetInt($"ach_{id}", 0);
                    state += $"\n[cl gray]{MathUtils.Clamp(0, achievement.Max, p)}/{achievement.Max} {Locale.Get("complete")}[cl]";
                }
            }

            GetComponent <DialogComponent>().Start(state);
            return(true);
        }
Beispiel #6
0
        public void RenderWindow()
        {
            ImGui.Separator();

            ImGui.Text($"Time: {Math.Floor(Time / 3600f)}h {Math.Floor(Time / 60f % 60f)}m {Math.Floor(Time % 60f)}s");
            ImGui.Text($"Won: {Won}");
            ImGui.Text($"Loop: {Run.Loop}");
            ImGui.Text($"Max Depth: {MaxDepth}");
            ImGui.Text($"Game Version: {GameVersion}");
            Run.CalculateScore();
            ImGui.Text($"Score: {Run.Score}");
            ImGui.Separator();

            if (ImGui.TreeNode("Items"))
            {
                foreach (var item in Items)
                {
                    ImGui.BulletText(item);
                }

                ImGui.TreePop();
            }

            if (ImGui.TreeNode("Banned items"))
            {
                foreach (var item in Banned)
                {
                    ImGui.BulletText(item);
                }

                ImGui.TreePop();
            }

            ImGui.Separator();
            ImGui.Text($"Coins Collected: {CoinsObtained}");
            ImGui.Text($"Keys Collected: {KeysObtained}");
            ImGui.Text($"Bombs Collected: {BombsObtained}");
            ImGui.Text($"Hearts Collected: {HeartsCollected}");
            ImGui.Text($"Heart Containers Collected: {MaxHealth}");
            ImGui.Separator();


            ImGui.Text($"Damage Taken: {DamageTaken}");
            ImGui.Text($"Damage Dealt: {DamageDealt}");
            ImGui.Text($"Mobs Killed: {MobsKilled}");
            ImGui.Text($"Rooms Explored: {RoomsExplored} / {RoomsTotal}");
            ImGui.Text($"Secret Rooms Explored: {SecretRoomsFound} / {SecretRoomsTotal}");
            ImGui.Separator();

            ImGui.Text($"Date Started: {Day} {Year}");
            ImGui.Text($"Tiles Walked: {TilesWalked}");
            ImGui.Text($"Pits Fallen: {PitsFallen}");
            ImGui.Text($"Bosses Defeated: {BossesDefeated}");
            ImGui.Text($"Spikes Triggered: {SpikesTriggered}");
            ImGui.Text($"Paintings Broke: {GlobalSave.GetInt("paintings_destroyed")}");

            ImGui.Separator();
            ImGui.Text($"Luck: {Run.Luck}");
            ImGui.Text($"Scourge: {Run.Scourge}");

            if (ImGui.TreeNode("Scourges"))
            {
                foreach (var curse in Scourge.Defined)
                {
                    var v = Scourge.IsEnabled(curse);

                    if (ImGui.Checkbox(curse, ref v))
                    {
                        if (v)
                        {
                            Scourge.Enable(curse);
                        }
                        else
                        {
                            Scourge.Disable(curse);
                        }
                    }
                }

                ImGui.TreePop();
            }
        }
Beispiel #7
0
 public static void Insert(List <RoomDef> rooms)
 {
     if ((Run.Type == RunType.Regular || Run.Type == RunType.Twitch) && !Run.CustomSeed && GlobalSave.GetInt("tomb_depth") == Run.Depth)
     {
         Log.Info("Adding tombstone");
         rooms.Add(new TombRoom());
     }
 }