public void BlankModHook(Action <SilencerInstance, BlankModificationItem, Vector2, PlayerController> orig, SilencerInstance silencer, BlankModificationItem bmi, Vector2 centerPoint, PlayerController user) { orig(silencer, bmi, centerPoint, user); if (user.HasPickupID(KinAmmoletID)) { RoomHandler currentRoom = user.CurrentRoom; if (currentRoom.IsSealed) { string enemyToSpawnGUID = "01972dee89fc4404a5c408d50007dad5"; bool shouldJam = false; if (user.PlayerHasActiveSynergy("Shotgun Club") && UnityEngine.Random.value <= 0.5f) { enemyToSpawnGUID = "128db2f0781141bcb505d8f00f9e4d47"; } if (user.PlayerHasActiveSynergy("Friends On The Other Side")) { shouldJam = true; } CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, enemyToSpawnGUID, centerPoint.ToIntVector2(), false, ExtendedColours.brown, 15, 2, shouldJam, true); if ((user.PlayerHasActiveSynergy("Aim Twice, Shoot Once"))) { CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, enemyToSpawnGUID, centerPoint.ToIntVector2(), false, ExtendedColours.brown, 15, 2, shouldJam, true); } } } }
public override void OnReload(PlayerController player, Gun gun) { if (player && player.PlayerHasActiveSynergy("Manbat and Robin")) { CompanionisedEnemyUtility.SpawnCompanionisedEnemy(player, "2feb50a6a40f4f50982e89fd276f6f15", gun.barrelOffset.position.XY().ToIntVector2(), true, Color.black, 10, 2, false, false); } base.OnReload(player, gun); }
private IEnumerator BatAttack() { yield return(new WaitForSeconds(1)); for (int i = 0; i < 10; i++) { if (self.ProjectilePlayerOwner().IsInCombat) { CompanionisedEnemyUtility.SpawnCompanionisedEnemy(self.ProjectilePlayerOwner(), BraveUtility.RandomElement(EasyEnemyTypeLists.SmallBullats), self.specRigidbody.UnitCenter.ToIntVector2(), false, Color.red, 7, 2, false, false); } yield return(new WaitForSeconds(0.1f)); } Die(); yield break; }
private IEnumerator HegemonyPlatoon() { yield return(new WaitForSeconds(1)); for (int i = 0; i < 3; i++) { if (self.ProjectilePlayerOwner().IsInCombat) { CompanionisedEnemyUtility.SpawnCompanionisedEnemy(self.ProjectilePlayerOwner(), "556e9f2a10f9411cb9dbfd61e0e0f1e1", self.specRigidbody.UnitCenter.ToIntVector2(), false, Color.red, 5, 2, false, true); } yield return(new WaitForSeconds(0.8f)); } Die(); yield break; }
protected override void DoEffect(PlayerController user) { AkSoundEngine.PostEvent("Play_OBJ_dead_again_01", base.gameObject); for (int i = 0; i < StaticReferenceManager.AllCorpses.Count; i++) { GameObject gameObject = StaticReferenceManager.AllCorpses[i]; if (gameObject && gameObject.GetComponent <tk2dBaseSprite>() && gameObject.transform.position.GetAbsoluteRoom() == user.CurrentRoom && gameObject.transform.position.GetAbsoluteRoom().IsSealed) { Vector2 worldCenter = gameObject.GetComponent <tk2dBaseSprite>().WorldCenter; string guid = "249db525a9464e5282d02162c88e0357"; if (user.PlayerHasActiveSynergy("Roll Dem Bones") && UnityEngine.Random.value <= 0.25f) { guid = "336190e29e8a4f75ab7486595b700d4a"; } AIActor Spent = CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, guid, worldCenter.ToIntVector2(), true, ExtendedColours.purple, 5, 2, false, true); if (Spent.GetComponent <SpawnEnemyOnDeath>()) { UnityEngine.Object.Destroy(Spent.GetComponent <SpawnEnemyOnDeath>()); } if (Spent.CorpseObject != null) { Spent.CorpseObject = null; } if (guid == "249db525a9464e5282d02162c88e0357") { Spent.OverrideHitEnemies = true; Spent.CollisionDamage = 1f; Spent.CollisionDamageTypes |= CoreDamageTypes.Electric; } if (user.PlayerHasActiveSynergy("The Sprinting Dead")) { Spent.MovementSpeed *= 2; } UnityEngine.Object.Destroy(gameObject.gameObject); } } }
protected override void DoEffect(PlayerController user) { AkSoundEngine.PostEvent("Play_OBJ_supplydrop_activate_01", base.gameObject); List <string> reinforcements = new List <string>(); reinforcements.AddRange(BraveUtility.RandomElement(randomEnemyloadouts)); foreach (string key in synergies.Keys) { if (user.PlayerHasActiveSynergy(key)) { reinforcements.Add(synergies[key]); } } foreach (string dude in reinforcements) { IntVector2?bestRewardLocation = LastOwner.CurrentRoom.GetRandomVisibleClearSpot(2, 2); AIActor spawnedDude = CompanionisedEnemyUtility.SpawnCompanionisedEnemy(user, dude, (IntVector2)bestRewardLocation, false, Color.red, 5, 2, false, true); spawnedDude.HandleReinforcementFallIntoRoom(0f); } }
public override void Update() { if (Owner && !Dungeon.IsGenerating && Owner.IsInCombat && base.transform.position.GetAbsoluteRoom() == Owner.CurrentRoom) { if (timer > 0) { timer -= BraveTime.DeltaTime; } if (timer <= 0) { //do stuff bool doAnim = false; if ((GameManager.Instance.Dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.HELLGEON) || Owner.PlayerHasActiveSynergy("They Grow Inside")) { float chance = 0.25f; if (Owner.PlayerHasActiveSynergy("They Grow Inside")) { chance = 0.50f; } if (UnityEngine.Random.value <= chance) { doAnim = true; VolleyReplacementSynergyProcessor shotgrubProcessor = (PickupObjectDatabase.GetById(347) as Gun).GetComponent <VolleyReplacementSynergyProcessor>(); Projectile bullet = shotgrubProcessor.SynergyVolley.projectiles[0].projectiles[0].projectile; GameObject spawnedProj = ProjSpawnHelper.SpawnProjectileTowardsPoint(bullet.gameObject, base.sprite.WorldCenter, base.specRigidbody.UnitCenter.GetPositionOfNearestEnemy(false, true), 0, 15); Projectile component = spawnedProj.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = Owner.specRigidbody; //COMPANION SHIT component.TreatedAsNonProjectileForChallenge = true; component.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.AdditionalScaleMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale); component.UpdateSpeed(); base.HandleCompanionPostProcessProjectile(component); } } } if (UnityEngine.Random.value <= 0.02f) { doAnim = true; bool shouldJam = false; if (Owner.PlayerHasActiveSynergy("Cursed Ceramics")) { shouldJam = true; } AIActor fairy = CompanionisedEnemyUtility.SpawnCompanionisedEnemy(Owner, "c182a5cb704d460d9d099a47af49c913", base.specRigidbody.UnitCenter.ToIntVector2(), false, ExtendedColours.brown, 10, 2, shouldJam, true); fairy.specRigidbody.CollideWithOthers = false; } if (UnityEngine.Random.value <= 0.05f && Owner.PlayerHasActiveSynergy("The Potter Boy")) { doAnim = true; AIActor randomActiveEnemy = base.transform.position.GetAbsoluteRoom().GetRandomActiveEnemy(false); if (randomActiveEnemy && randomActiveEnemy.IsNormalEnemy && randomActiveEnemy.healthHaver && !randomActiveEnemy.healthHaver.IsBoss) { randomActiveEnemy.Transmogrify(EnemyDatabase.GetOrLoadByGuid("76bc43539fc24648bff4568c75c686d1"), (GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); } } if (doAnim && this.aiAnimator) { this.aiAnimator.PlayUntilFinished("spawnobject", false, null, -1f, false); } timer = 2f; } if (RadialTimer > 0) { RadialTimer -= BraveTime.DeltaTime; } if (RadialTimer <= 0) { HandleRadialEffects(); RadialTimer = 0.05f; } } base.Update(); }
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; }
private void OnTableFlipped(FlippableCover obj) { if (Owner && obj) { int selectedEffect = UnityEngine.Random.Range(1, (27 + 1)); ETGModConsole.Log("Selected Effect: " + selectedEffect); switch (selectedEffect) { case 1: SpawnFoldingTable(); break; case 2: DoSafeExplosion(obj.specRigidbody.UnitCenter); break; case 3: DoGoop(obj.specRigidbody.UnitCenter, EasyGoopDefinitions.FireDef); break; case 4: DoGoop(obj.specRigidbody.UnitCenter, EasyGoopDefinitions.PoisonDef); break; case 5: DoGoop(obj.specRigidbody.UnitCenter, EasyGoopDefinitions.CharmGoopDef); break; case 6: DoGoop(obj.specRigidbody.UnitCenter, EasyGoopDefinitions.CheeseDef); break; case 7: LootEngine.SpawnCurrency(obj.specRigidbody.UnitCenter, UnityEngine.Random.Range(5, 10), false); break; case 8: Owner.DoEasyBlank(obj.specRigidbody.UnitCenter, EasyBlankType.FULL); break; case 9: Owner.DoEasyBlank(obj.specRigidbody.UnitCenter, EasyBlankType.MINI); break; case 10: FullRoomStatusEffect(StaticStatusEffects.charmingRoundsEffect); break; case 11: FullRoomStatusEffect(PickupObjectDatabase.GetById(569).GetComponent <ChaosBulletsItem>().FreezeModifierEffect); break; case 12: FullRoomStatusEffect(StaticStatusEffects.tripleCrossbowSlowEffect); break; case 13: Exploder.DoRadialKnockback(obj.specRigidbody.UnitCenter, 200, 100); break; case 14: SpawnBlackHole(obj.specRigidbody.UnitCenter); break; case 15: if (Owner.CurrentGun != null) { Owner.CurrentGun.GainAmmo(UnityEngine.Random.Range(5, 26)); } break; case 16: FreezeTime(); break; case 17: TurnTableIntoRocket(obj); break; case 18: StunEnemies(); break; case 19: LootEngine.SpawnCurrency(obj.specRigidbody.UnitCenter, UnityEngine.Random.Range(2, 6), true); break; case 20: CompanionisedEnemyUtility.SpawnCompanionisedEnemy(Owner, "01972dee89fc4404a5c408d50007dad5", Owner.sprite.WorldCenter.ToIntVector2(), false, Color.red, 7, 2, false, true); break; case 21: int numBullat = UnityEngine.Random.Range(2, 6); for (int i = 0; i < numBullat; i++) { CompanionisedEnemyUtility.SpawnCompanionisedEnemy(Owner, "2feb50a6a40f4f50982e89fd276f6f15", Owner.sprite.WorldCenter.ToIntVector2(), false, Color.red, 15, 2, false, false); } break; case 22: FullRoomStatusEffect(StaticStatusEffects.hotLeadEffect); break; case 23: float degrees = 0; for (int i = 0; i < 15; i++) { SpawnBullets((PickupObjectDatabase.GetById(50) as Gun).DefaultModule.projectiles[0], obj.specRigidbody.UnitCenter, degrees); degrees += 24; } break; case 24: SpawnBullets((PickupObjectDatabase.GetById(372) as Gun).DefaultModule.projectiles[0], Owner.sprite.WorldCenter, Owner.sprite.WorldCenter.GetVectorToNearestEnemy().ToAngle()); break; case 25: StartCoroutine(HandleShield(Owner, 7)); break; case 26: Owner.StartCoroutine(this.HandleSlowBullets()); break; case 27: Owner.Enrage(4f); break; } } }