private IEnumerator Start()
        {
            name      = "GlitchTrapDoor";
            Lock.name = "GlitchLock";

            if (!loadLevelOnPitFall)
            {
                GeneratePitfallRoom();
            }

            m_blendTex       = new Texture2D(64, 64, TextureFormat.RGBA32, false);
            m_blendTexColors = new Color[4096];
            for (int i = 0; i < m_blendTexColors.Length; i++)
            {
                m_blendTexColors[i] = Color.black;
            }
            m_blendTex.SetPixels(m_blendTexColors);
            m_blendTex.Apply();
            BlendMaterial.SetFloat("_BlendMin", RevealPercentage);
            BlendMaterial.SetTexture("_BlendTex", m_blendTex);
            BlendMaterial.SetVector("_BaseWorldPosition", new Vector4(transform.position.x, transform.position.y, transform.position.z, 0f));
            LockBlendMaterial.SetFloat("_BlendMin", RevealPercentage);
            LockBlendMaterial.SetTexture("_BlendTex", m_blendTex);
            LockBlendMaterial.SetVector("_BaseWorldPosition", new Vector4(transform.position.x, transform.position.y, transform.position.z, 0f));
            parentRoom = transform.position.GetAbsoluteRoom();
            BlendMaterial.SetTexture("_SubTex", (parentRoom.RoomVisualSubtype != 1) ? StoneFloorTex : DirtFloorTex);
            LockBlendMaterial.SetTexture("_SubTex", (parentRoom.RoomVisualSubtype != 1) ? StoneFloorTex : DirtFloorTex);

            if (loadLevelOnPitFall)
            {
                SpeculativeRigidbody specRigidbody = base.specRigidbody;
                specRigidbody.OnEnterTrigger = (SpeculativeRigidbody.OnTriggerDelegate)Delegate.Combine(specRigidbody.OnEnterTrigger, new SpeculativeRigidbody.OnTriggerDelegate(HandleTriggerEntered));
                SpeculativeRigidbody specRigidbody2 = base.specRigidbody;
                specRigidbody2.OnExitTrigger = (SpeculativeRigidbody.OnTriggerExitDelegate)Delegate.Combine(specRigidbody2.OnExitTrigger, new SpeculativeRigidbody.OnTriggerExitDelegate(HandleTriggerExited));
            }

            if (FlightCollider)
            {
                SpeculativeRigidbody flightCollider = FlightCollider;
                flightCollider.OnTriggerCollision = (SpeculativeRigidbody.OnTriggerDelegate)Delegate.Combine(flightCollider.OnTriggerCollision, new SpeculativeRigidbody.OnTriggerDelegate(HandleFlightCollider));
            }

            List <IntVector2>    CachedPositions            = new List <IntVector2>();
            IntVector2           RandomGlitchEnemyPosition1 = ChaosObjectRandomizer.GetRandomAvailableCellForPlacable(GameManager.Instance.Dungeon, parentRoom, CachedPositions, false, true);
            IntVector2           RandomGlitchEnemyPosition2 = ChaosObjectRandomizer.GetRandomAvailableCellForPlacable(GameManager.Instance.Dungeon, parentRoom, CachedPositions, false, true);
            IntVector2           RandomGlitchEnemyPosition3 = ChaosObjectRandomizer.GetRandomAvailableCellForPlacable(GameManager.Instance.Dungeon, parentRoom, CachedPositions, false, true);
            ChaosGlitchedEnemies m_GlitchEnemyDatabase      = new ChaosGlitchedEnemies();

            m_GlitchEnemyDatabase.SpawnGlitchedRat(parentRoom, RandomGlitchEnemyPosition1);
            m_GlitchEnemyDatabase.SpawnGlitchedRat(parentRoom, RandomGlitchEnemyPosition2);
            m_GlitchEnemyDatabase.SpawnGlitchedRat(parentRoom, RandomGlitchEnemyPosition3);
            Destroy(m_GlitchEnemyDatabase);
            CachedPositions.Clear();

            parentRoom.RegisterInteractable(Lock);

            yield break;
        }
Exemplo n.º 2
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;
            }
        }
Exemplo n.º 3
0
        public ChaosSpawnGlitchObjectOnDeath()
        {
            deathType                      = DeathType.Death;
            preDeathDelay                  = 0f;
            chanceToSpawn                  = 1f;
            triggerName                    = "";
            extraPixelWidth                = 7;
            minSpawnCount                  = 1;
            maxSpawnCount                  = 1;
            allowSpawnOverPit              = true;
            spawnRatCorpse                 = false;
            spawnRatKey                    = false;
            ratCorpseSpawnsKey             = false;
            parentEnemyWasRat              = false;
            ratCorpseSpawnsItemOnExplosion = false;
            usesExternalObjectArray        = false;
            objectSelection                = ObjectSelection.Random;
            ChaosObjectRandomizer objectDatabase = new ChaosObjectRandomizer();

            objectsToSpawn = new GameObject[] {
                ChaosPrefabs.MimicNPC,
                ChaosPrefabs.RatCorpseNPC,
                ChaosPrefabs.MouseTrap1,
                ChaosPrefabs.MouseTrap2,
                ChaosPrefabs.PlayerLostRatNote,
                ChaosPrefabs.NPCBabyDragun,
                objectDatabase.NPCTruthKnower,
                objectDatabase.ChestTruth,
                objectDatabase.ConvictPastDancers[UnityEngine.Random.Range(0, 15)],
                objectDatabase.HangingPot,
                objectDatabase.RatTrapDoorIcon,
                objectDatabase.RedDrum,
                objectDatabase.IceBomb,
                objectDatabase.YellowDrum,
                objectDatabase.WaterDrum,
                objectDatabase.TableHorizontal,
                objectDatabase.TableVertical,
                objectDatabase.TableHorizontalStone,
                objectDatabase.TableVerticalStone,
                objectDatabase.NPCOldMan,
                objectDatabase.NPCSynergrace,
                objectDatabase.NPCTonic,
                objectDatabase.NPCCursola,
                objectDatabase.NPCGunMuncher,
                objectDatabase.NPCEvilMuncher,
                objectDatabase.NPCMonsterManuel,
                objectDatabase.NPCVampire,
                objectDatabase.NPCGuardLeft,
                objectDatabase.NPCGuardRight,
                objectDatabase.NPCTruthKnower,
                objectDatabase.AmygdalaNorth,
                objectDatabase.AmygdalaSouth,
                objectDatabase.AmygdalaWest,
                objectDatabase.AmygdalaEast,
                objectDatabase.SpaceFog,
                objectDatabase.LockedDoor,
                objectDatabase.SpikeTrap,
                objectDatabase.FlameTrap,
                objectDatabase.CultistBaldBowBackLeft,
                objectDatabase.CultistBaldBowBackRight,
                objectDatabase.CultistBaldBowBack,
                objectDatabase.CultistBaldBowLeft,
                objectDatabase.CultistHoodBowBack,
                objectDatabase.CultistHoodBowLeft,
                objectDatabase.CultistHoodBowRight
            };
            // objectDatabase = null;
            Destroy(objectDatabase);
        }