Exemplo n.º 1
0
        private void InitObjectMods(Dungeon dungeon)
        {
            // Disable victory music for Ser Manuel if not on tutorial floor. (it can cause double music bug if you kill him on other floors)
            if (dungeon.LevelOverrideType != GameManager.LevelOverrideState.TUTORIAL)
            {
                ChaosPrefabs.SerManuel.healthHaver.forcePreventVictoryMusic = true;
            }
            else
            {
                ChaosPrefabs.SerManuel.healthHaver.forcePreventVictoryMusic = false;
            }

            // Assign pitfall destination to entrance on Floor 1 if in Bossrush mode and special entrance room to Miniboss room path is available.
            if (GameManager.Instance.CurrentGameMode == GameManager.GameMode.BOSSRUSH |
                GameManager.Instance.CurrentGameMode == GameManager.GameMode.SUPERBOSSRUSH)
            {
                List <RoomHandler> RoomList         = dungeon.data.rooms;
                RoomHandler        MinibossEntrance = null;
                foreach (RoomHandler specificRoom in RoomList)
                {
                    if (specificRoom.GetRoomName().ToLower().StartsWith("elevatormaintenance") && dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.CASTLEGEON)
                    {
                        MinibossEntrance = specificRoom;
                        if (dungeon.data.Entrance != null && dungeon.data.Entrance.GetRoomName().ToLower().StartsWith("elevator entrance"))
                        {
                            dungeon.data.Entrance.TargetPitfallRoom     = specificRoom;
                            dungeon.data.Entrance.ForcePitfallForFliers = true;
                        }
                    }
                }
            }
            if (ChaosConsole.isHardMode | ChaosConsole.isUltraMode | ChaosConsole.GlitchEverything)
            {
                foreach (BraveBehaviour targetObject in FindObjectsOfType <BraveBehaviour>())
                {
                    ChaosShaders.Instance.ChaosShaderRandomizer(targetObject, UnityEngine.Random.value);
                }
            }
            else if (dungeon.IsGlitchDungeon | ChaosDungeonFlows.isGlitchFlow)
            {
                foreach (AIActor enemy in FindObjectsOfType <AIActor>())
                {
                    if (!ChaosLists.DontGlitchMeList.Contains(enemy.EnemyGuid) && !enemy.IsBlackPhantom && !enemy.healthHaver.IsBoss)
                    {
                        if (UnityEngine.Random.value <= 0.6f && !enemy.healthHaver.IsBoss)
                        {
                            ChaosShaders.Instance.BecomeGlitched(enemy, 0.04f, 0.07f, 0.05f, 0.07f, 0.05f);
                            ChaosGlitchedEnemies.GlitchExistingEnemy(enemy);
                        }
                        if (UnityEngine.Random.value <= 0.25f && !enemy.healthHaver.IsBoss && !ChaosLists.blobsAndCritters.Contains(enemy.EnemyGuid) && enemy.GetComponent <ChaosSpawnGlitchObjectOnDeath>() == null)
                        {
                            enemy.gameObject.AddComponent <ChaosSpawnGlitchObjectOnDeath>();
                        }
                    }
                }
                foreach (BraveBehaviour targetObject in FindObjectsOfType <BraveBehaviour>())
                {
                    if (UnityEngine.Random.value <= ChaosConsole.GlitchRandomAll && targetObject.aiActor == null)
                    {
                        ChaosShaders.Instance.BecomeGlitched(targetObject, 0.04f, 0.07f, 0.05f, 0.07f, 0.05f);
                    }
                }
            }

            if (dungeon.LevelOverrideType == GameManager.LevelOverrideState.RESOURCEFUL_RAT | dungeon.LevelOverrideType == GameManager.LevelOverrideState.TUTORIAL | dungeon.LevelOverrideType != GameManager.LevelOverrideState.NONE)
            {
                if (ChaosConsole.debugMimicFlag)
                {
                    ETGModConsole.Log("[DEBUG] This floor has been excluded from having additional objects.", false);
                }
            }
            else
            {
                ChaosObjectRandomizer randomizer = new ChaosObjectRandomizer();
                randomizer.PlaceRandomObjects(dungeon, GameManager.Instance.CurrentFloor);
                Destroy(randomizer);
            }

            if (dungeon.LevelOverrideType == GameManager.LevelOverrideState.RESOURCEFUL_RAT | dungeon.LevelOverrideType == GameManager.LevelOverrideState.TUTORIAL | dungeon.LevelOverrideType != GameManager.LevelOverrideState.NONE)
            {
                if (ChaosConsole.debugMimicFlag)
                {
                    ETGModConsole.Log("[DEBUG] This floor has been excluded from having additional glitch enemies.", false);
                }
            }
            else
            {
                ChaosGlitchedEnemyRandomizer m_GlitchEnemyRandomizer = new ChaosGlitchedEnemyRandomizer();
                m_GlitchEnemyRandomizer.PlaceRandomEnemies(dungeon, GameManager.Instance.CurrentFloor);
                Destroy(m_GlitchEnemyRandomizer);
            }

            if (ChaosUtility.RatDungeon != null)
            {
                ChaosUtility.RatDungeon = null;
            }
        }