public static void AddRandomCurse(bool doPopup = false) { List <CurseData> refinedData = new List <CurseData>(); refinedData.AddRange(CursePrefabs); if (CurrentActiveCurses.Count > 0) { for (int i = (refinedData.Count - 1); i >= 0; i--) { if (CurseManager.CurseIsActive(refinedData[i].curseName)) { refinedData.RemoveAt(i); } else if (cursesLastFloor != null && cursesLastFloor.Contains(refinedData[i].curseName)) { refinedData.RemoveAt(i); } else if (bannedCursesThisRun != null && bannedCursesThisRun.Contains(refinedData[i].curseName)) { refinedData.RemoveAt(i); } } } if (refinedData.Count > 0) { CurseData pickedCurse = BraveUtility.RandomElement(refinedData); AddCurse(pickedCurse.curseName, doPopup); } }
private void OnDamaged(float resultValue, float maxValue, CoreDamageTypes damageTypes, DamageCategory damageCategory, Vector2 damageDirection) { if ((m_attachedPlayer != null) && (m_attachedPlayer.CurrentGun != null) && (m_attachedPlayer.CurrentGun.CanActuallyBeDropped(m_attachedPlayer))) { if (CurseManager.CurseIsActive("Curse of Butterfingers")) { if (GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade")) { StartCoroutine(GoodButterfingersEffect()); } else { StartCoroutine(ButterFingersGun()); } } } }
public static void AddCurse(string CurseName, bool dopopup = false) { if (CurseManager.CurseIsActive(CurseName)) { Debug.LogWarning("Attempted to Add Curse (" + CurseName + ") but it was already active!"); return; } CurseData newCurse = null; foreach (CurseData data in CursePrefabs) { if (data.curseName == CurseName) { newCurse = data; } } if (!(GameManager.Instance.AnyPlayerHasPickupID(HoleyWater.HoleyWaterID) && !GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade"))) { CurrentActiveCurses.Add(newCurse); if (previousCursesThisRun == null) { previousCursesThisRun = new List <string>(); } if (previousCursesThisRun.Contains(newCurse.curseName)) { if (bannedCursesThisRun == null) { bannedCursesThisRun = new List <string>(); } bannedCursesThisRun.Add(newCurse.curseName); } else { previousCursesThisRun.Add(newCurse.curseName); } Debug.Log("Added New Curse: " + newCurse.curseName + " (Popup: " + dopopup + ")"); if (dopopup) { DoSpecificCursePopup(CurseName, newCurse.curseSubtitle, newCurse.curseIconId); } } InherentPostLevelCurseProcessing(); }
private void EnteredCombat() { if (m_attachedPlayer && m_attachedPlayer.CurrentRoom != null) { if (CurseManager.CurseIsActive("Curse of The Flames")) { for (int i = 0; i < 5; i++) { IntVector2 pos = (IntVector2)m_attachedPlayer.CurrentRoom.GetRandomAvailableCell(null, CellTypes.FLOOR); DeadlyDeadlyGoopManager goop = null; if (GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade")) { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.PlayerFriendlyFireGoop); } else { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.EnemyFriendlyFireGoop); } goop.TimedAddGoopCircle(pos.ToVector2(), UnityEngine.Random.Range(2.5f, 4f), 0.75f, true); } } } }
public static IEnumerator HandleCurseDeathEffects(Vector2 position, string guid, float maxHP, bool isJammed) { if (CurseManager.CurseIsActive("Curse of Infestation")) { if (!string.IsNullOrEmpty(guid) && !EasyEnemyTypeLists.SmallBullats.Contains(guid)) { int amt = UnityEngine.Random.Range(-1, 4); if (amt > 0) { for (int i = 0; i < amt; i++) { if (GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade")) { AIActor targetActor = CompanionisedEnemyUtility.SpawnCompanionisedEnemy(GameManager.Instance.PrimaryPlayer, BraveUtility.RandomElement(EasyEnemyTypeLists.SmallBullats), position.ToIntVector2(), false, Color.red, 5, 2, false, false); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(targetActor.specRigidbody, null, false); } else { var enemyToSpawn = EnemyDatabase.GetOrLoadByGuid(BraveUtility.RandomElement(EasyEnemyTypeLists.SmallBullats)); AIActor TargetActor = AIActor.Spawn(enemyToSpawn, position, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(position.ToIntVector2()), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.PreventBlackPhantom = true; } } } } } if (CurseManager.CurseIsActive("Curse of Sludge")) { if (maxHP > 0) { DeadlyDeadlyGoopManager goop = null; if (GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade")) { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.PlayerFriendlyPoisonGoop); } else { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.EnemyFriendlyPoisonGoop); } float hpMod = maxHP; if (isJammed) { hpMod /= 3.5f; } hpMod /= AIActor.BaseLevelHealthModifier; float radius = Math.Min((hpMod / 7.5f), 10); goop.TimedAddGoopCircle(position, radius, 0.75f, true); } } if (CurseManager.CurseIsActive("Curse of The Hive")) { if (maxHP > 0) { DeadlyDeadlyGoopManager goop = null; if (GameManager.Instance.AnyPlayerHasActiveSynergy("The Last Crusade")) { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.PlayerFriendlyHoneyGoop); } else { goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.HoneyGoop); } float hpMod = maxHP; if (isJammed) { hpMod /= 3.5f; } hpMod /= AIActor.BaseLevelHealthModifier; float radius = Math.Min((hpMod / 5), 10); goop.TimedAddGoopCircle(position, radius, 0.75f, true); } } yield break; }