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; }
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; } }
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); }