Exemple #1
0
        private void DupeChest(Chest chest, PlayerController user)
        {
            IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);

            ChestToolbox.ChestTier tier = chest.GetChestTier();
            if (tier == ChestToolbox.ChestTier.RAT)
            {
                tier = ChestToolbox.ChestTier.RED;
            }
            else if (tier == ChestToolbox.ChestTier.TRUTH)
            {
                tier = ChestToolbox.ChestTier.BLUE;
            }

            ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED;
            if (chest.IsMimic)
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCEYES;
            }
            else
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCENO;
            }

            ChestToolbox.SpawnChestEasy(bestRewardLocation, tier, chest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic);
        }
Exemple #2
0
        protected override void DoEffect(PlayerController user)
        {
            IPlayerInteractable nearestInteractable = user.CurrentRoom.GetNearestInteractable(user.CenterPosition, 1f, user);

            if (!(nearestInteractable is Chest))
            {
                return;
            }
            Chest dupeChest = nearestInteractable as Chest;

            IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);

            ChestToolbox.ChestTier tier = dupeChest.GetChestTier();

            if (tier == ChestToolbox.ChestTier.RAT)
            {
                tier = ChestToolbox.ChestTier.RED;
            }
            else if (tier == ChestToolbox.ChestTier.TRUTH)
            {
                tier = ChestToolbox.ChestTier.BLUE;
            }

            ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED;
            if (dupeChest.IsMimic)
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCEYES;
            }
            else
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCENO;
            }

            ChestToolbox.ThreeStateValue isFused = ChestToolbox.ThreeStateValue.UNSPECIFIED;
            if (dupeChest.GetFuse() != null)
            {
                isFused = ChestToolbox.ThreeStateValue.FORCEYES;
            }
            else
            {
                isFused = ChestToolbox.ThreeStateValue.FORCENO;
            }

            Chest spawnedChest = ChestToolbox.SpawnChestEasy(bestRewardLocation, tier, dupeChest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic, isFused);

            if (dupeChest.GetComponent <JammedChestBehav>())
            {
                spawnedChest.gameObject.AddComponent <JammedChestBehav>();
            }
            else if (dupeChest.GetComponent <PassedOverForJammedChest>())
            {
                spawnedChest.gameObject.AddComponent <PassedOverForJammedChest>();
            }
        }
Exemple #3
0
        private void UpgradeChest(Chest chest, PlayerController user)
        {
            ChestToolbox.ChestTier tier       = chest.GetChestTier();
            ChestToolbox.ChestTier targetTier = ChestToolbox.ChestTier.OTHER;
            switch (tier)
            {
            case ChestToolbox.ChestTier.BROWN:
                targetTier = ChestToolbox.ChestTier.BLUE;
                break;

            case ChestToolbox.ChestTier.BLUE:
                targetTier = ChestToolbox.ChestTier.GREEN;
                break;

            case ChestToolbox.ChestTier.GREEN:
                targetTier = ChestToolbox.ChestTier.RED;
                break;

            case ChestToolbox.ChestTier.RED:
                targetTier = ChestToolbox.ChestTier.BLACK;
                break;

            case ChestToolbox.ChestTier.BLACK:
                targetTier = ChestToolbox.ChestTier.RAINBOW;
                break;

            case ChestToolbox.ChestTier.SYNERGY:
                targetTier = ChestToolbox.ChestTier.BLACK;
                break;
            }

            ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED;
            if (chest.IsMimic)
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCEYES;
            }
            else
            {
                isMimic = ChestToolbox.ThreeStateValue.FORCENO;
            }

            if (targetTier != ChestToolbox.ChestTier.OTHER)
            {
                ChestToolbox.SpawnChestEasy(chest.sprite.WorldBottomLeft.ToIntVector2(), targetTier, chest.IsLocked, Chest.GeneralChestType.UNSPECIFIED, isMimic);
            }
            else
            {
                GameManager.Instance.RewardManager.SpawnRewardChestAt(chest.sprite.WorldBottomLeft.ToIntVector2());
            }
            user.CurrentRoom.DeregisterInteractable(chest);
            chest.DeregisterChestOnMinimap();
            Destroy(chest.gameObject);
        }
        protected override void DoEffect(PlayerController user)
        {
            ChestToolbox.ChestTier chestToSpawn = ChestToolbox.ChestTier.OTHER;
            switch (MemorisedTier)
            {
            case PocketChestTier.BROWN:
                chestToSpawn = ChestToolbox.ChestTier.BROWN;
                break;

            case PocketChestTier.BLUE:
                chestToSpawn = ChestToolbox.ChestTier.BLUE;
                break;

            case PocketChestTier.GREEN:
                chestToSpawn = ChestToolbox.ChestTier.GREEN;
                break;

            case PocketChestTier.RED:
                chestToSpawn = ChestToolbox.ChestTier.RED;
                break;

            case PocketChestTier.BLACK:
                chestToSpawn = ChestToolbox.ChestTier.BLACK;
                break;

            case PocketChestTier.SYNERGY:
                chestToSpawn = ChestToolbox.ChestTier.SYNERGY;
                break;

            case PocketChestTier.RAINBOW:
                chestToSpawn = ChestToolbox.ChestTier.RAINBOW;
                break;
            }
            if (chestToSpawn != ChestToolbox.ChestTier.OTHER)
            {
                IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                ChestToolbox.SpawnChestEasy(bestRewardLocation2, chestToSpawn, !(chestToSpawn == ChestToolbox.ChestTier.RAINBOW || chestToSpawn == ChestToolbox.ChestTier.BROWN), Chest.GeneralChestType.UNSPECIFIED);
            }
        }
Exemple #5
0
        protected override void DoEffect(PlayerController user)
        {
            bool hasDeterminedValidFloor = false;

            if (GameManager.Instance.Dungeon.IsGlitchDungeon) //GLITCHED FLOOR BONUS
            {
                IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                ChestToolbox.SpawnChestEasy(bestRewardLocation2, ChestToolbox.ChestTier.BLACK, true, Chest.GeneralChestType.UNSPECIFIED);
            }
            if (UnityEngine.Random.value <= 0.001f) //RANDOM RARE RAINBOW
            {
                IntVector2 bestRewardLocation = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                ChestToolbox.SpawnChestEasy(bestRewardLocation, ChestToolbox.ChestTier.RAINBOW, false, Chest.GeneralChestType.UNSPECIFIED, ChestToolbox.ThreeStateValue.FORCENO, ChestToolbox.ThreeStateValue.FORCENO);
            }
            else
            {
                switch (GameManager.Instance.Dungeon.tileIndices.tilesetId)
                {
                case GlobalDungeonData.ValidTilesets.CASTLEGEON:     //KEEP
                    int pickupID = 224;
                    if (UnityEngine.Random.value <= .50f)
                    {
                        pickupID = 120;
                    }
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(pickupID).gameObject, user);
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(pickupID).gameObject, user);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.SEWERGEON:     //OUBLIETTE
                    for (int i = 0; i < 3; i++)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(67).gameObject, user);
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.JUNGLEGEON:     //JUNGLE
                    for (int i = 0; i < 3; i++)
                    {
                        IntVector2 bestRewardLocation = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2);
                        ChestToolbox.SpawnChestEasy(bestRewardLocation, ChestToolbox.ChestTier.BROWN, false, Chest.GeneralChestType.UNSPECIFIED);
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.GUNGEON:     //GUNGEON PROPER
                    for (int i = 0; i < 3; i++)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(74).gameObject, user);
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.CATHEDRALGEON:     //ABBEY
                    ChangeStatPermanent(user, PlayerStats.StatType.Health, 2, StatModifier.ModifyMethod.ADDITIVE);
                    ChangeStatPermanent(user, PlayerStats.StatType.Curse, 2, StatModifier.ModifyMethod.ADDITIVE);
                    if (user.characterIdentity == PlayableCharacters.Robot)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user);
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user);
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.MINEGEON:     //MINES
                    IntVector2 bestRewardLocation2 = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                    ChestToolbox.SpawnChestEasy(bestRewardLocation2, ChestToolbox.ChestTier.RED, false, Chest.GeneralChestType.UNSPECIFIED);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.RATGEON:     //RAT LAIR
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(727).gameObject, user);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.CATACOMBGEON:     // HOLLOW
                    IntVector2 bestRewardLocation3      = user.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                    Chest      spawnedChestRandomHollow = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation3);
                    spawnedChestRandomHollow.RegisterChestOnMinimap(spawnedChestRandomHollow.GetAbsoluteParentRoom());
                    ChangeStatPermanent(user, PlayerStats.StatType.GlobalPriceMultiplier, 0.8f, StatModifier.ModifyMethod.MULTIPLICATIVE);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.OFFICEGEON:     //R&G DEPT
                    for (int i = 0; i < 2; i++)
                    {
                        IntVector2 bestRewardLocation4 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2);
                        Chest      spawnedChestRNG     = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation4);
                        spawnedChestRNG.RegisterChestOnMinimap(spawnedChestRNG.GetAbsoluteParentRoom());
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.WESTGEON:     //OLD WEST FLOOR (EXPAND)
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(727).gameObject, user);
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(137).gameObject, user);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.FORGEGEON:     //FORGE
                    for (int i = 0; i < 6; i++)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user);
                    }
                    PickupObject itemOfTypeAndQuality = LootEngine.GetItemOfTypeAndQuality <PickupObject>(BraveUtility.RandomElement(BToSItemTiers), GameManager.Instance.RewardManager.GunsLootTable, false);
                    LootEngine.SpawnItem(itemOfTypeAndQuality.gameObject, LastOwner.specRigidbody.UnitCenter, Vector2.left, 1f, false, true, false);
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.HELLGEON:     //BULLET HELL
                    if (GameManager.IsGunslingerPast)
                    {
                        for (int i = 0; i < 2; i++)
                        {
                            IntVector2 bestRewardLocation5 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2);
                            ChestToolbox.SpawnChestEasy(bestRewardLocation5, ChestToolbox.ChestTier.BLACK, true, Chest.GeneralChestType.UNSPECIFIED);
                        }
                        ChangeStatPermanent(user, PlayerStats.StatType.Curse, 5, StatModifier.ModifyMethod.ADDITIVE);
                    }
                    else
                    {
                        for (int i = 0; i < 2; i++)
                        {
                            IntVector2 bestRewardLocation4 = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2);
                            Chest      randomHellMagChest  = GameManager.Instance.RewardManager.SpawnRewardChestAt(bestRewardLocation4);
                            randomHellMagChest.RegisterChestOnMinimap(randomHellMagChest.GetAbsoluteParentRoom());
                        }
                        for (int i = 0; i < 2; i++)
                        {
                            IntVector2 bestRewardLocation4  = user.CurrentRoom.GetRandomVisibleClearSpot(2, 2);
                            Chest      randomHellRandoChest = GameManager.Instance.RewardManager.SpawnTotallyRandomChest(bestRewardLocation4);
                            randomHellRandoChest.RegisterChestOnMinimap(randomHellRandoChest.GetAbsoluteParentRoom());
                        }
                        ChangeStatPermanent(user, PlayerStats.StatType.Curse, 3, StatModifier.ModifyMethod.ADDITIVE);
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.BELLYGEON:     //BELLY
                    ChangeStatPermanent(user, PlayerStats.StatType.Health, 1, StatModifier.ModifyMethod.ADDITIVE);
                    user.healthHaver.ApplyHealing(100f);
                    if (user.characterIdentity == PlayableCharacters.Robot)
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, user);
                        }
                    }
                    hasDeterminedValidFloor = true;
                    break;
                }
                //-----------------------------------------DEFAULT CATCH EFFECT
                if (!hasDeterminedValidFloor)
                {
                    LootEngine.SpawnItem(PickupObjectDatabase.GetById(127).gameObject, user.specRigidbody.UnitCenter, Vector2.zero, 1f, false, true, false);
                }
            }
        }
Exemple #6
0
        public static void Accept(PlayerController player, GameObject shrine)
        {
            if (player.characterIdentity == PlayableCharacters.Robot)
            {
                player.healthHaver.Armor -= 2;
            }
            else
            {
                StatModifier HP = new StatModifier
                {
                    statToBoost = PlayerStats.StatType.Health,
                    amount      = -1f,
                    modifyType  = StatModifier.ModifyMethod.ADDITIVE
                };
                player.ownerlessStatModifiers.Add(HP);
                player.stats.RecalculateStats(player);
            }
            foreach (Chest chest in GetAllChests())
            {
                ChestToolbox.ChestTier targetTier = ChestToolbox.ChestTier.OTHER;
                ChestToolbox.ChestTier curTier    = chest.GetChestTier();
                switch (curTier)
                {
                case ChestToolbox.ChestTier.BROWN:
                    targetTier = ChestToolbox.ChestTier.BLUE;
                    break;

                case ChestToolbox.ChestTier.BLUE:
                    targetTier = ChestToolbox.ChestTier.GREEN;
                    break;

                case ChestToolbox.ChestTier.GREEN:
                    if (UnityEngine.Random.value <= 0.75f)
                    {
                        targetTier = ChestToolbox.ChestTier.RED;
                    }
                    else
                    {
                        targetTier = ChestToolbox.ChestTier.SYNERGY;
                    }
                    break;

                case ChestToolbox.ChestTier.RED:
                    targetTier = ChestToolbox.ChestTier.BLACK;
                    break;

                case ChestToolbox.ChestTier.BLACK:
                    if (UnityEngine.Random.value <= 0.05f)
                    {
                        targetTier = ChestToolbox.ChestTier.RAINBOW;
                    }
                    else
                    {
                        chest.ForceUnlock();
                    }
                    break;

                case ChestToolbox.ChestTier.SYNERGY:
                    if (UnityEngine.Random.value <= 0.5f)
                    {
                        targetTier = ChestToolbox.ChestTier.RED;
                    }
                    else
                    {
                        targetTier = ChestToolbox.ChestTier.BLACK;
                    }
                    break;
                }

                ChestToolbox.ThreeStateValue isMimic = ChestToolbox.ThreeStateValue.UNSPECIFIED;
                if (chest.IsMimic)
                {
                    isMimic = ChestToolbox.ThreeStateValue.FORCEYES;
                }
                else
                {
                    isMimic = ChestToolbox.ThreeStateValue.FORCENO;
                }

                if (targetTier != ChestToolbox.ChestTier.OTHER)
                {
                    Chest newChest = ChestToolbox.SpawnChestEasy(chest.sprite.WorldBottomLeft.ToIntVector2(), targetTier, chest.IsLocked, chest.ChestType, isMimic, ChestToolbox.ThreeStateValue.FORCENO);
                    if (chest.GetComponent <JammedChestBehav>())
                    {
                        newChest.gameObject.AddComponent <JammedChestBehav>();
                    }

                    player.CurrentRoom.DeregisterInteractable(chest);
                    chest.DeregisterChestOnMinimap();
                    UnityEngine.Object.Destroy(chest.gameObject);
                }

                shrine.GetComponent <CustomShrineController>().numUses++;
                GameUIRoot.Instance.notificationController.DoCustomNotification(
                    "Kliklok's Blessing",
                    "Chests Upgraded",
                    ShrineFactory.ShrineIconCollection,
                    spriteId,
                    UINotificationController.NotificationColor.SILVER,
                    true,
                    false
                    );
                AkSoundEngine.PostEvent("Play_OBJ_shrine_accept_01", shrine);
            }
        }