private void SpawnExtraWaves(PlayerController user) { if (user.PlayerHasActiveSynergy(SynNames[0])) { IntVector2?spawnPos = user.CurrentRoom.GetRandomVisibleClearSpot(1, 1); int amount = 2; for (int i = 0; i < amount; i++) { AIActor HeavyKin = EnemyDatabase.GetOrLoadByGuid("df7fb62405dc4697b7721862c7b6b3cd"); AIActor TargetActor = AIActor.Spawn(HeavyKin, spawnPos.Value, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(spawnPos.Value), true, AIActor.AwakenAnimationType.Default, true); (TargetActor.behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).Range = (EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).Range; TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); TargetActor.gameObject.AddComponent <GoAwayAfterRoomClear>(); TargetActor.IsHarmlessEnemy = true; TargetActor.IgnoreForRoomClear = true; TargetActor.StartCoroutine(HandleTimer(TargetActor, duration)); float hpMax = TargetActor.healthHaver.GetMaxHealth(); TargetActor.healthHaver.SetHealthMaximum(hpMax * 3f); TargetActor.healthHaver.FullHeal(); TargetActor.CanTargetPlayers = false; CompanionisedEnemyBulletModifiers mod = TargetActor.gameObject.AddComponent <CompanionisedEnemyBulletModifiers>(); if (user.PlayerHasActiveSynergy("Great Leadership")) { mod.doPostProcess = true; } mod.TintBullets = true; mod.TintColor = new Color(252, 116, 216, 1); TargetActor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.PlayerCollider)); GameObject gameObject = (GameObject)ResourceCache.Acquire("Global VFX/VFX_Teleport_Beam"); SpawnManager.SpawnVFX(gameObject, TargetActor.specRigidbody.UnitCenter, Quaternion.Euler(0, 0, 0)); } } }
protected void AffectEnemy(AIActor target, PlayerController user) { bool flag = target.healthHaver.GetCurrentHealthPercentage() < .3f; if (flag) { target.StartCoroutine(HandleClockhair(target, user)); } }
private void EatEnemy(AIActor target) { if (!target) { return; } if (target.behaviorSpeculator) { target.behaviorSpeculator.Stun(1f, true); } if (target.knockbackDoer) { target.knockbackDoer.SetImmobile(true, "KaliberAffliction"); } this.enemiesToEat.Add(target); GameObject gameObject = target.PlayEffectOnActor(KaliberAffliction.EraseVFX, new Vector3(0f, -1f, 0f), false, false, false); target.StartCoroutine(this.DelayedDestroyEnemy(target, gameObject.GetComponent <tk2dSpriteAnimator>())); }
private void EatEnemy(AIActor enemy) { if (!enemy) { return; } if (!enemy.healthHaver.IsBoss) { if (enemy.behaviorSpeculator) { enemy.behaviorSpeculator.Stun(1f, true); } if (enemy.knockbackDoer) { enemy.knockbackDoer.SetImmobile(true, "KillTheWeakBehaviour"); } } GameObject gameObject = enemy.PlayEffectOnActor(KaliberAffliction.EraseVFX, new Vector3(0f, -1f, 0f), enemy.healthHaver.IsBoss, false, false); enemy.StartCoroutine(this.DelayedDestroyEnemy(enemy, gameObject.GetComponent <tk2dSpriteAnimator>())); }
public void OnPreRigidbodyCollision(SpeculativeRigidbody myRigidbody, PixelCollider myPixelCollider, SpeculativeRigidbody otherRigidbody, PixelCollider otherPixelCollider) { if (myRigidbody.projectile != null && myRigidbody.sprite != null && this.m_owner.PlayerHasActiveSynergy("#BE_SERIOUS")) { if (!this.m_owner.IsInCombat || this.smarterMinions.Count >= 4) { return; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5"); IntVector2?nearestAvailableCell = null; if (this.m_owner.CurrentRoom != null) { nearestAvailableCell = this.m_owner.CurrentRoom.GetNearestAvailableCell(myRigidbody.projectile.sprite.WorldCenter, new IntVector2?(orLoadByGuid.Clearance), new CellTypes?(CellTypes.FLOOR), false, null); } Vector3 vector = nearestAvailableCell != null ? (nearestAvailableCell.Value.ToVector2()).ToVector3ZUp(0f) : myRigidbody.projectile.sprite.WorldCenter.ToVector3ZUp(0f); GameObject enemyObj = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = enemyObj.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.m_owner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = enemyObj.GetComponent <AIActor>(); aiactor.HitByEnemyBullets = true; aiactor.healthHaver.ModifyDamage += this.ModifyDamageForCompanions; aiactor.StartCoroutine(this.InvisibleCoroutine(aiactor)); aiactor.procedurallyOutlined = false; aiactor.CorpseObject = null; aiactor.ImmuneToAllEffects = true; aiactor.SetIsFlying(true, "I'm a bullet too!"); SmarterDumbEnemyBehavior smartBehavior = aiactor.gameObject.AddComponent <SmarterDumbEnemyBehavior>(); smartBehavior.layer = myRigidbody.projectile.gameObject.layer; smartBehavior.collection = myRigidbody.projectile.sprite.Collection; smartBehavior.spriteId = myRigidbody.projectile.sprite.spriteId; foreach (AIBulletBank.Entry entry in orAddComponent.bulletBank.Bullets) { if (aiactor.IsBlackPhantom) { entry.BulletObject.GetComponent <Projectile>().baseData.damage = 15; } else { entry.BulletObject.GetComponent <Projectile>().baseData.damage = 10; } } foreach (AttackBehaviorBase behavior in aiactor.behaviorSpeculator.AttackBehaviors) { if ((behavior as ShootGunBehavior) != null) { if (aiactor.IsBlackPhantom) { aiactor.aiShooter.GetBulletEntry((behavior as ShootGunBehavior).OverrideBulletName).ProjectileData.damage = 15; } else { aiactor.aiShooter.GetBulletEntry((behavior as ShootGunBehavior).OverrideBulletName).ProjectileData.damage = 10; } } } this.smarterMinions.Add(aiactor); } else if (myRigidbody.projectile != null && myRigidbody.sprite != null) { AIActor aiactor = AIActor.Spawn(EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5"), myRigidbody.projectile.sprite.WorldCenter, myRigidbody.transform.position.GetAbsoluteRoom(), true, AIActor.AwakenAnimationType.Default, true); GameObject gameObject = new GameObject("suck image"); gameObject.layer = myRigidbody.projectile.gameObject.layer; tk2dSprite tk2dSprite = gameObject.AddComponent <tk2dSprite>(); gameObject.transform.parent = SpawnManager.Instance.Projectiles; gameObject.transform.position = aiactor.sprite.WorldCenter; tk2dSprite.SetSprite(myRigidbody.projectile.sprite.Collection, myRigidbody.projectile.sprite.spriteId); tk2dSprite.transform.parent = aiactor.transform; aiactor.sprite.renderer.enabled = false; aiactor.procedurallyOutlined = false; aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; aiactor.CorpseObject = null; aiactor.ImmuneToAllEffects = true; aiactor.SetIsFlying(true, "I'm a bullet too!"); aiactor.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.PlayerHitBox, CollisionLayer.PlayerCollider)); if (aiactor.IgnoreForRoomClear) { aiactor.IgnoreForRoomClear = false; if (aiactor.ParentRoom != null) { aiactor.ParentRoom.DeregisterEnemy(aiactor); } } DumbEnemyBehavior dumbEnemyBehavior = aiactor.gameObject.AddComponent <DumbEnemyBehavior>(); if (myRigidbody.projectile.GetComponent <NewUsesProjectileSynergyController>() != null) { dumbEnemyBehavior.sourceAmmoType = myRigidbody.projectile.GetComponent <NewUsesProjectileSynergyController>().ammoType; dumbEnemyBehavior.customAmmoType = myRigidbody.projectile.GetComponent <NewUsesProjectileSynergyController>().customAmmoType; dumbEnemyBehavior.usesNewUsesSynergy = true; } myRigidbody.projectile.DieInAir(); } }
public void ChaosResizeEnemy(AIActor aiActor, bool delayed = false) { // AIActor targetAIActor = aiActor.gameObject.GetComponent<AIActor>(); if (!ChaosConsole.randomEnemySizeEnabled) { return; } if (string.IsNullOrEmpty(aiActor.EnemyGuid)) { return; } if (aiActor.name.ToLower().StartsWith("glitched") | aiActor.name.ToLower().EndsWith("(clone)(clone)")) { return; } if (ChaosLists.BannedEnemyGUIDList.Contains(aiActor.EnemyGuid)) { return; } if (!ChaosConsole.randomEnemySizeEnabled) { return; } if (aiActor.GetComponentInParent <BossStatueController>() != null) { return; } try { if (aiActor.transform.position.GetAbsoluteRoom().GetRoomName().ToLower().StartsWith("doublebeholsterroom01")) { return; } } catch (System.Exception) { return; } int currentFloor = GameManager.Instance.CurrentFloor; // Vector2 currentCorpseScale = new Vector2(1, 1); if (currentFloor == -1) { ChaosConsole.RandomResizedEnemies = 0.45f; } else { if (currentFloor > 2 && currentFloor < 5) { ChaosConsole.RandomResizedEnemies = 0.45f; } else { if (currentFloor > 4 && currentFloor < 6) { ChaosConsole.RandomResizedEnemies = 0.47f; } else { if (currentFloor > 5) { ChaosConsole.RandomResizedEnemies = 0.6f; } } } } if (Random.value >= ChaosConsole.RandomResizedEnemies) { return; } if (Random.value <= ChaosConsole.RandomSizeChooser) { // Make them tiny bois :P // Don't make cursed bois tiny. It can be a bit much to get hurt by tiny bois that are cursed. :P if (aiActor.IsBlackPhantom) { aiActor.StartCoroutine(ResizeEnemy(aiActor, new Vector2(1.5f, 1.5f), false, true, delayed)); } else { aiActor.StartCoroutine(ResizeEnemy(aiActor, new Vector2(0.5f, 0.5f), false, false, delayed)); // targetAIActor.CollisionKnockbackStrength /= 2f; } } else { // Make them big bois :P aiActor.StartCoroutine(ResizeEnemy(aiActor, new Vector2(1.5f, 1.5f), false, delayed)); // targetAIActor.CollisionKnockbackStrength *= 1.5f; } aiActor.placeableWidth += 2; aiActor.placeableHeight += 2; return; }