private void DevilishSynergy() { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("5f3abc2d561b4b9c9e72b879c6f10c7e"); IntVector2?nearestAvailableCell = this.m_owner.CurrentRoom.GetNearestAvailableCell(this.m_owner.transform.position.XY(), new IntVector2?(orLoadByGuid.Clearance), new CellTypes?(CellTypes.FLOOR), false, null); if (nearestAvailableCell == null) { return; } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, (nearestAvailableCell.Value.ToVector2()).ToVector3ZUp(0f), Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.m_owner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); aiactor.HitByEnemyBullets = true; aiactor.healthHaver.ModifyDamage += this.ModifyDamageForCompanions; 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; } } }
private void SpawnJunkan(Projectile proj) { if (proj.Owner == null || !(proj.Owner is PlayerController)) { return; } PlayerController player = proj.Owner as PlayerController; if (player.CurrentGun.GetComponent <JunkansRevengeController>() == null) { return; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("c6c8e59d0f5d41969c74e802c9d67d07"); Vector3 vector = proj.sprite.WorldCenter.ToVector3ZUp(0f); GameObject enemyObj = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); if (enemyObj.GetComponent <AIActor>() != null) { if (enemyObj.GetComponent <AIActor>().sprite != null) { enemyObj.GetComponent <AIActor>().sprite.PlaceAtPositionByAnchor(vector, tk2dBaseSprite.Anchor.MiddleCenter); if (enemyObj.GetComponent <AIActor>().specRigidbody != null) { enemyObj.GetComponent <AIActor>().specRigidbody.Reinitialize(); } } } CompanionController orAddComponent = enemyObj.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(player); enemyObj.AddComponent <TempraryJunkanBehaviour>(); }
private void CreateCompanion(PlayerController owner) { if (PreventRespawnOnFloorLoad | m_HasDied) { return; } string guid = CompanionGuid; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); Vector3 vector = owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion2 = Instantiate(orLoadByGuid.gameObject, vector, Quaternion.identity); m_extantCompanion = extantCompanion2; CompanionController orAddComponent = m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); extantCompanion2.GetComponent <HealthHaver>().OnPreDeath += OnPreDeath; extantCompanion2.GetComponent <HealthHaver>().OnDamaged += CompanionOnDamaged; if (m_healthRemaining > 0) { extantCompanion2.GetComponent <HealthHaver>().SetHealthMaximum(m_maxHealthRemaining); extantCompanion2.GetComponent <HealthHaver>().ForceSetCurrentHealth(m_healthRemaining); } if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } }
private void RegenerateCompanion(PlayerController owner) { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(CompanionGuid); GameObject gameObject = Instantiate(orLoadByGuid.gameObject, owner.transform.position, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); if (IsBlackPhantom) { gameObject.GetComponent <AIActor>().BecomeBlackPhantom(); } orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(owner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); if (orAddComponent.healthHaver != null) { orAddComponent.healthHaver.PreventAllDamage = true; } if (orAddComponent.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } }
// Token: 0x06000056 RID: 86 RVA: 0x00004194 File Offset: 0x00002394 public void KnightPlacer(PlayerController owner) { try { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("ec8ea75b557d4e7b8ceeaacdf6f8238c"); IntVector2 intVector = Vector2Extensions.ToIntVector2(owner.unadjustedAimPoint, (VectorConversions)2); RoomHandler absoluteRoomFromPosition = GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(intVector); bool flag = absoluteRoomFromPosition != null && absoluteRoomFromPosition == owner.CurrentRoom && owner.IsInCombat; if (flag) { AIActor aiactor = AIActor.Spawn(orLoadByGuid.aiActor, owner.CenterPosition, absoluteRoomFromPosition, true, (AIActor.AwakenAnimationType) 2, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(aiactor.specRigidbody, null, false); aiactor.CanTargetEnemies = true; aiactor.CanTargetPlayers = false; aiactor.IsHarmlessEnemy = true; aiactor.CanDropCurrency = false; aiactor.IgnoreForRoomClear = true; aiactor.MovementSpeed = 5.95f; aiactor.CompanionOwner = owner; aiactor.IsBuffEnemy = true; aiactor.isPassable = true; aiactor.gameObject.AddComponent <KillOnRoomClear>(); aiactor.reinforceType = (AIActor.ReinforceType) 2; aiactor.HandleReinforcementFallIntoRoom(0.1f); //added this so the player doesn't collide with the nut when dodge rolling, he goes through companions aiactor.gameObject.AddComponent <CompanionController>(); CompanionController component = aiactor.gameObject.GetComponent <CompanionController>(); component.Initialize(owner); this.nut = aiactor; MindControlEffect orAddComponent = GameObjectExtensions.GetOrAddComponent <MindControlEffect>(aiactor.gameObject); orAddComponent.owner = (this.gun.CurrentOwner as PlayerController); // to make the nut invincible against the player effects or any other damage effects if (aiactor.healthHaver != null) { aiactor.healthHaver.PreventAllDamage = true; } // to prevent the attacks of the nut from damaging the player if (aiactor.bulletBank != null) { AIBulletBank bulletBank = aiactor.bulletBank; bulletBank.OnProjectileCreated = (Action <Projectile>)Delegate.Combine(bulletBank.OnProjectileCreated, new Action <Projectile>(CopperChariot.OnPostProcessProjectile)); } if (aiactor.aiShooter != null) { AIShooter aiShooter = aiactor.aiShooter; aiShooter.PostProcessProjectile = (Action <Projectile>)Delegate.Combine(aiShooter.PostProcessProjectile, new Action <Projectile>(CopperChariot.OnPostProcessProjectile)); } } } catch (Exception e) { Tools.Print("Copper KnightPlacer", "FFFFFF", true); Tools.PrintException(e); } }
private void MakeCompanion(PlayerController owner, AIActor targetActor, bool makeBlackPhantom, AIActor sourceCompanionData = null) { if (sourceCompanionData == null) { sourceCompanionData = EnemyDatabase.GetOrLoadByGuid("3a077fa5872d462196bb9a3cb1af02a3"); } targetActor.behaviorSpeculator.MovementBehaviors.Add(sourceCompanionData.behaviorSpeculator.MovementBehaviors[0]); targetActor.CanTargetPlayers = false; targetActor.CanTargetEnemies = true; targetActor.IgnoreForRoomClear = true; targetActor.HitByEnemyBullets = true; targetActor.IsSignatureEnemy = false; targetActor.IsHarmlessEnemy = false; targetActor.RegisterOverrideColor(new Color(0.5f, 0, 0.5f), "Charm Effect"); targetActor.name = "CompanionPet"; targetActor.PreventAutoKillOnBossDeath = true; targetActor.gameObject.AddComponent <CompanionController>(); CompanionController companionController = targetActor.gameObject.GetComponent <CompanionController>(); companionController.CanInterceptBullets = true; companionController.IsCop = false; companionController.IsCopDead = false; companionController.CopDeathStatModifier = new StatModifier() { statToBoost = 0, modifyType = StatModifier.ModifyMethod.ADDITIVE, amount = 0 }; companionController.CurseOnCopDeath = 2; companionController.CanCrossPits = targetActor.IsFlying; companionController.BlanksOnActiveItemUsed = false; companionController.InternalBlankCooldown = 10; companionController.HasStealthMode = false; companionController.PredictsChests = false; companionController.PredictsChestSynergy = 0; companionController.CanBePet = false; companionController.companionID = CompanionController.CompanionIdentifier.NONE; companionController.TeaSynergyHeatRing = new HeatRingModule(); companionController.m_petOffset = new Vector2(0, 0); // Do needed setup for Companion system. (makes enemy able to go through sealed doors, not damage player, etc) companionController.Initialize(owner); // Make things that deal damage via contact damage more useful. (they normally don't damage other enemies on their own) :P if (ContactDamageDealers.Contains(targetActor.EnemyGuid)) { targetActor.OverrideHitEnemies = true; targetActor.CollisionDamage = 1f; targetActor.CollisionDamageTypes = CoreDamageTypes.Electric; } if (makeBlackPhantom) { targetActor.BecomeBlackPhantom(); } }
private void CreateNewCompanion(PlayerController player) { { Vector3 vector = player.transform.position; GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(CosmoStatue.prefab, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); } }
private void CreateCompanion2(PlayerController owner) { CompanionSynergyProcessor companionSynergy = new CompanionSynergyProcessor(); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid2); Vector3 position = owner.transform.position; GameObject extantCompanion = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, position, Quaternion.identity); m_extantCompanion = extantCompanion; CompanionController orAddComponent = m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } }
protected override void DoEffect(PlayerController owner) { string dogGuid = "c07ef60ae32b404f99e294a6f9acba75"; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(dogGuid); Vector3 vector = owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); this.m_extantCompanion = extantCompanion; CompanionController orAddComponent = this.m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); DogNumber++; } if (hasSynergy) { string dogGuid2 = "c07ef60ae32b404f99e294a6f9acba75"; AIActor orLoadByGuid2 = EnemyDatabase.GetOrLoadByGuid(dogGuid2); Vector3 vector2 = owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion22 = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid2.gameObject, vector2, Quaternion.identity); this.m_extantCompanion = extantCompanion22; CompanionController orAddComponent2 = this.m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent2.Initialize(owner); if (orAddComponent2.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent2.specRigidbody, null, false); DogNumber++; } } }
private void SpawnNewCompanion(string guid) { AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); Vector3 vector = Owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion2 = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = extantCompanion2.GetOrAddComponent <CompanionController>(); extantCompanion = extantCompanion2; orAddComponent.Initialize(gun.CurrentOwner as PlayerController); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } }
private void CreateCompanion(PlayerController owner) { if (this.PreventRespawnOnFloorLoad) { return; } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid); Vector3 position = owner.transform.position; GameObject extantCompanion = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, position, Quaternion.identity); this.m_extantCompanion = extantCompanion; CompanionController orAddComponent = this.m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } }
// Token: 0x060001B4 RID: 436 RVA: 0x00010334 File Offset: 0x0000E534 private void CreateNewCompanion(PlayerController player) { AkSoundEngine.PostEvent("Play_OBJ_smallchest_spawn_01", base.gameObject); bool flag = this.companionsSpawned.Count + 1 == this.MaxNumberOfCompanions; bool flag2 = flag; bool flag3 = !flag2; if (flag3) { bool flag4 = this.companionsSpawned.Count >= this.MaxNumberOfCompanions; bool flag5 = !flag4; bool flag6 = flag5; if (flag6) { float curDamage = base.Owner.stats.GetBaseStatValue(PlayerStats.StatType.Damage); float newDamage = curDamage - 0.05f; base.Owner.stats.SetBaseStatValue(PlayerStats.StatType.Damage, newDamage, base.Owner); damageBuff = newDamage - curDamage; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid); Vector3 vector = player.transform.position; bool flag7 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag8 = flag7; bool flag9 = flag8; if (flag9) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag10 = orAddComponent.specRigidbody; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } orAddComponent.aiAnimator.PlayUntilFinished("spawn", false, null, -1f, false); } } }
private void SpawnRaccoon(PlayerController player) { AIActor orLoadByName = EnemyDatabase.GetOrLoadByName("raccoon"); Vector3 vector = player.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion2 = UnityEngine.Object.Instantiate <GameObject>(orLoadByName.gameObject, vector, Quaternion.identity); this.m_extantCompanion = extantCompanion2; CompanionController orAddComponent = this.m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(player); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } }
private void OnDestroy(Projectile proj) { if (this.catchedEnemy != null) { string guid = this.catchedEnemy.EnemyGuid; Vector2 pos = this.catchedEnemy.sprite.WorldBottomLeft; Vector2 blankPos = this.catchedEnemy.sprite.WorldCenter; bool isBlackPhantom = this.catchedEnemy.IsBlackPhantom; this.catchedEnemy.EraseFromExistence(true); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, pos, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); if (isBlackPhantom) { gameObject.GetComponent <AIActor>().BecomeBlackPhantom(); } orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.thrower); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); if (orAddComponent.healthHaver != null) { orAddComponent.healthHaver.PreventAllDamage = true; } if (orAddComponent.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += CatchProjectileBehaviour.OnPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += CatchProjectileBehaviour.OnPostProcessProjectile; } } else { if (this.parentItem != null) { parentItem.thrown = false; } } }
private void CreateCompanion(PlayerController owner) { if (PreventRespawnOnFloorLoad) { return; } if (string.IsNullOrEmpty(CompanionGuid)) { return; } AIActor m_NewAIActor = EnemyDatabase.GetOrLoadByGuid(CompanionGuid); Vector3 vector = owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } m_extantCompanion = Instantiate(m_NewAIActor.gameObject, vector, Quaternion.identity); if (m_extantCompanion) { CompanionController orAddComponent = m_extantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } if (m_HammersHidden) { orAddComponent.enabled = false; m_extantCompanion.GetComponent <AIActor>().ToggleRenderers(false); m_extantCompanion.GetComponent <AIActor>().IsGone = true; m_extantCompanion.GetComponent <AIActor>().behaviorSpeculator.InterruptAndDisable(); orAddComponent.specRigidbody.CollideWithOthers = false; } } }
private void KaliberSynergy() { AIActor orLoadByGuid; bool isHoleyKin = false; if (UnityEngine.Random.value <= 0.5f) { orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(RnGEnemyDatabase.GetRnGEnemyGuid(RnGEnemyDatabase.RnGEnemyType.BulletmanBroccoli)); } else { orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(RnGEnemyDatabase.GetRnGEnemyGuid(RnGEnemyDatabase.RnGEnemyType.BulletmanKaliber)); isHoleyKin = true; } IntVector2?nearestAvailableCell = this.m_owner.CurrentRoom.GetNearestAvailableCell(this.m_owner.transform.position.XY(), new IntVector2?(orLoadByGuid.Clearance), new CellTypes?(CellTypes.FLOOR), false, null); if (nearestAvailableCell == null) { return; } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, (nearestAvailableCell.Value.ToVector2()).ToVector3ZUp(0f), Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.m_owner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); aiactor.HitByEnemyBullets = true; aiactor.healthHaver.ModifyDamage += this.ModifyDamageForCompanions; if (UnityEngine.Random.value <= 0.05f) { aiactor.BecomeBlackPhantom(); aiactor.aiShooter.GetBulletEntry((aiactor.behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).OverrideBulletName).ProjectileData.damage = isHoleyKin ? 5 : 10; } else { aiactor.aiShooter.GetBulletEntry((aiactor.behaviorSpeculator.AttackBehaviors[0] as ShootGunBehavior).OverrideBulletName).ProjectileData.damage = isHoleyKin ? 7 : 15; } }
private void AIActorPreSpawn(AIActor enemy) { if (enemy.EnemyGuid == "c182a5cb704d460d9d099a47af49c913") { if (enemy.CanTargetEnemies == false && enemy.CanTargetPlayers == true) { CompanionController orAddComponent = enemy.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(Owner); CompanionisedEnemyBulletModifiers companionisedBullets = enemy.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = 2; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = 10; enemy.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); enemy.gameObject.AddComponent <KillOnRoomClear>(); enemy.IsHarmlessEnemy = true; enemy.IgnoreForRoomClear = true; } } }
private void CreateNewCompanion(PlayerController owner, Vector2 ARRRR, RoomHandler f**k) { int bighead = UnityEngine.Random.Range(1, 7); if (bighead == 1) { string guid = "cc9c41aa8c194e17b44ac45f993dd212"; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); Vector3 vector = ARRRR; GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.aiActor.CollisionDamage = 0; orAddComponent.aiActor.ParentRoom = f**k; this.m_companions.Add(orAddComponent); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } }
private void OnEnemyDamaged(float damage, bool fatal, HealthHaver enemyHealth) { if (enemyHealth.specRigidbody != null) { bool flag = enemyHealth.aiActor && fatal; if (flag) { bool flag2 = StatueCount == false; if (flag2) { this.StatueCount = true; PlayerController player = base.Owner as PlayerController; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(ClayCordStatue.guidclay); Vector3 vector = enemyHealth.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } } } }
public void DelayedInitialization() { if (this.m_owner != null) { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(EnemyDatabase.GetOrLoadByGuid(this.enemyguid).gameObject, this.m_owner.transform.position, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.m_owner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); aiactor.HitByEnemyBullets = true; aiactor.healthHaver.ModifyDamage += TakeableEnemy.ModifyDamageForCompanions; if (aiactor.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += TakeableEnemy.OnCompanionPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += TakeableEnemy.OnCompanionPostProcessProjectile; } this.extantCompanion = gameObject; } }
public void SpawnNewTurtle() { string guid = PickupObjectDatabase.GetById(645).GetComponent <MulticompanionItem>().CompanionGuid; AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); Vector3 vector = player.transform.position; GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.activeTurtles.Add(gameObject); orAddComponent.Initialize(player); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } HealthHaver helf = gameObject.GetComponent <HealthHaver>(); if (helf != null) { float helfNew = helf.GetMaxHealth() * 3f; helf.SetHealthMaximum(helfNew); helf.ForceSetCurrentHealth(helfNew); } }
public static AIActor SpawnCompanionisedEnemy(PlayerController owner, string enemyGuid, IntVector2 position, bool doTint, Color enemyTint, int baseDMG, int jammedDMGMult, bool shouldBeJammed, bool doFriendlyOverhead) { var enemyToSpawn = EnemyDatabase.GetOrLoadByGuid(enemyGuid); UnityEngine.Object.Instantiate <GameObject>(EasyVFXDatabase.BloodiedScarfPoofVFX, position.ToVector3(), Quaternion.identity); AIActor TargetActor = AIActor.Spawn(enemyToSpawn, position, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(position), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); CompanionController orAddComponent = TargetActor.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(owner); if (shouldBeJammed == true) { TargetActor.BecomeBlackPhantom(); } CompanionisedEnemyBulletModifiers companionisedBullets = TargetActor.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = jammedDMGMult; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = baseDMG; TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); TargetActor.gameObject.AddComponent <KillOnRoomClear>(); ContinualKillOnRoomClear contKill = TargetActor.gameObject.AddComponent <ContinualKillOnRoomClear>(); if (EasyEnemyTypeLists.MultiPhaseEnemies.Contains(TargetActor.EnemyGuid)) { contKill.forceExplode = true; contKill.eraseInsteadOfKill = true; } TargetActor.IsHarmlessEnemy = true; if (doTint) { TargetActor.RegisterOverrideColor(enemyTint, "CompanionisedEnemyTint"); } TargetActor.IgnoreForRoomClear = true; if (doFriendlyOverhead) { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(FriendlyVFX); tk2dBaseSprite component = gameObject.GetComponent <tk2dBaseSprite>(); gameObject.transform.parent = TargetActor.transform; if (TargetActor.healthHaver.IsBoss) { gameObject.transform.position = TargetActor.specRigidbody.HitboxPixelCollider.UnitTopCenter; } else { Bounds bounds = TargetActor.sprite.GetBounds(); Vector3 vector = TargetActor.transform.position + new Vector3((bounds.max.x + bounds.min.x) / 2f, bounds.max.y, 0f).Quantize(0.0625f); gameObject.transform.position = TargetActor.sprite.WorldCenter.ToVector3ZUp(0f).WithY(vector.y); } component.HeightOffGround = 0.5f; TargetActor.sprite.AttachRenderer(component); } return(TargetActor); }
protected override void OnPreCollision(SpeculativeRigidbody myRigidbody, PixelCollider myCollider, SpeculativeRigidbody otherRigidbody, PixelCollider otherCollider) { if (otherRigidbody != null && otherRigidbody.aiActor != null && BadGuids.Contains(otherRigidbody.aiActor.EnemyGuid)) { GameManager.Instance.StartCoroutine(this.HandleEnemyDeath(otherRigidbody.aiActor)); } else if (otherRigidbody != null && otherRigidbody.aiActor != null && GoodGuids.Contains(otherRigidbody.aiActor.EnemyGuid)) { tk2dBaseSprite sprite = Instantiate(NotSmiteVFX, otherRigidbody.aiActor.CenterPosition, Quaternion.identity).GetComponent <tk2dBaseSprite>(); sprite.HeightOffGround = 20f; sprite.UpdateZDepth(); string guid = otherRigidbody.aiActor.EnemyGuid; Vector2 pos = otherRigidbody.transform.position; bool isBlackPhantom = otherRigidbody.aiActor.IsBlackPhantom; otherRigidbody.aiActor.EraseFromExistence(true); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); GameObject gameObject = Instantiate(orLoadByGuid.gameObject, pos, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); if (isBlackPhantom) { gameObject.GetComponent <AIActor>().BecomeBlackPhantom(); } orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(this.Owner as PlayerController); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); AIActor aiactor = gameObject.GetComponent <AIActor>(); if (orAddComponent.healthHaver != null) { orAddComponent.healthHaver.PreventAllDamage = true; } if (orAddComponent.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } List <Tuple <int, MirrorImageBehavior> > toReplace = new List <Tuple <int, MirrorImageBehavior> >(); Dictionary <int, Dictionary <int, MirrorImageBehavior> > toReplace2 = new Dictionary <int, Dictionary <int, MirrorImageBehavior> >(); int i = 0; ETGModConsole.Log("ADDING..."); foreach (AttackBehaviorBase behav in aiactor.behaviorSpeculator.AttackBehaviors) { ETGModConsole.Log(behav.GetType().ToString()); if (behav is MirrorImageBehavior) { toReplace.Add(new Tuple <int, MirrorImageBehavior>(i, behav as MirrorImageBehavior)); ETGModConsole.Log("ADDED A MIRRORIMAGEBEHAVIOUR WITH AN INDEX " + i); } else if (behav is AttackBehaviorGroup) { Dictionary <int, MirrorImageBehavior> list = new Dictionary <int, MirrorImageBehavior>(); int j = 0; foreach (AttackBehaviorGroup.AttackGroupItem item in (behav as AttackBehaviorGroup).AttackBehaviors) { if (item.Behavior is MirrorImageBehavior) { list.Add(j, item.Behavior as MirrorImageBehavior); } j++; } toReplace2.Add(i, list); ETGModConsole.Log("ADDED SOMETHING COMPLEX WITH AN INDEX " + i); } i++; } ETGModConsole.Log("REPLACING..."); foreach (Tuple <int, MirrorImageBehavior> tuple in toReplace) { aiactor.behaviorSpeculator.AttackBehaviors[tuple.First] = new FriendlyMirrorImageBehavior { NumImages = tuple.Second.NumImages, MaxImages = tuple.Second.MaxImages, MirrorHealth = tuple.Second.MirrorHealth, SpawnDelay = tuple.Second.SpawnDelay, SplitDelay = tuple.Second.SplitDelay, SplitDistance = tuple.Second.SplitDistance, Anim = tuple.Second.Anim, AnimRequiresTransparency = tuple.Second.AnimRequiresTransparency, MirrorDeathAnim = tuple.Second.MirrorDeathAnim, MirroredAnims = tuple.Second.MirroredAnims, AccumulateHealthThresholds = tuple.Second.AccumulateHealthThresholds, AttackCooldown = tuple.Second.AttackCooldown, Cooldown = tuple.Second.Cooldown, CooldownVariance = tuple.Second.CooldownVariance, GlobalCooldown = tuple.Second.GlobalCooldown, GroupCooldown = tuple.Second.GroupCooldown, GroupName = tuple.Second.GroupName, HealthThresholds = tuple.Second.HealthThresholds, InitialCooldown = tuple.Second.InitialCooldown, InitialCooldownVariance = tuple.Second.InitialCooldownVariance, IsBlackPhantom = tuple.Second.IsBlackPhantom, MaxEnemiesInRoom = tuple.Second.MaxEnemiesInRoom, MaxHealthThreshold = tuple.Second.MaxHealthThreshold, MaxUsages = tuple.Second.MaxUsages, MinHealthThreshold = tuple.Second.MinHealthThreshold, MinRange = tuple.Second.MinRange, MinWallDistance = tuple.Second.MinWallDistance, Range = tuple.Second.Range, RequiresLineOfSight = tuple.Second.RequiresLineOfSight, resetCooldownOnDamage = tuple.Second.resetCooldownOnDamage, targetAreaStyle = tuple.Second.targetAreaStyle }; ETGModConsole.Log("REPLACED ATTACK BEHAVIOUR #" + tuple.First + " WITH A FRIENDLYMIRRORIMAGEBEHAVIOUR."); } foreach (KeyValuePair <int, Dictionary <int, MirrorImageBehavior> > valuePair in toReplace2) { foreach (KeyValuePair <int, MirrorImageBehavior> valuePair2 in valuePair.Value) { (aiactor.behaviorSpeculator.AttackBehaviors[valuePair.Key] as AttackBehaviorGroup).AttackBehaviors[valuePair2.Key].Behavior = new FriendlyMirrorImageBehavior { NumImages = valuePair2.Value.NumImages, MaxImages = valuePair2.Value.MaxImages, MirrorHealth = valuePair2.Value.MirrorHealth, SpawnDelay = valuePair2.Value.SpawnDelay, SplitDelay = valuePair2.Value.SplitDelay, SplitDistance = valuePair2.Value.SplitDistance, Anim = valuePair2.Value.Anim, AnimRequiresTransparency = valuePair2.Value.AnimRequiresTransparency, MirrorDeathAnim = valuePair2.Value.MirrorDeathAnim, MirroredAnims = valuePair2.Value.MirroredAnims, AccumulateHealthThresholds = valuePair2.Value.AccumulateHealthThresholds, AttackCooldown = valuePair2.Value.AttackCooldown, Cooldown = valuePair2.Value.Cooldown, CooldownVariance = valuePair2.Value.CooldownVariance, GlobalCooldown = valuePair2.Value.GlobalCooldown, GroupCooldown = valuePair2.Value.GroupCooldown, GroupName = valuePair2.Value.GroupName, HealthThresholds = valuePair2.Value.HealthThresholds, InitialCooldown = valuePair2.Value.InitialCooldown, InitialCooldownVariance = valuePair2.Value.InitialCooldownVariance, IsBlackPhantom = valuePair2.Value.IsBlackPhantom, MaxEnemiesInRoom = valuePair2.Value.MaxEnemiesInRoom, MaxHealthThreshold = valuePair2.Value.MaxHealthThreshold, MaxUsages = valuePair2.Value.MaxUsages, MinHealthThreshold = valuePair2.Value.MinHealthThreshold, MinRange = valuePair2.Value.MinRange, MinWallDistance = valuePair2.Value.MinWallDistance, Range = valuePair2.Value.Range, RequiresLineOfSight = valuePair2.Value.RequiresLineOfSight, resetCooldownOnDamage = valuePair2.Value.resetCooldownOnDamage, targetAreaStyle = valuePair2.Value.targetAreaStyle }; } } AdditionalCompanionOwner additionalCompanionOwner = this.Owner.gameObject.AddComponent <AdditionalCompanionOwner>(); additionalCompanionOwner.CompanionGuid = guid; additionalCompanionOwner.IsBlackPhantom = isBlackPhantom; PhysicsEngine.SkipCollision = true; return; } base.OnPreCollision(myRigidbody, myCollider, otherRigidbody, otherCollider); }
// Token: 0x06000060 RID: 96 RVA: 0x0000534D File Offset: 0x0000354D public override void Pickup(PlayerController player) { base.Pickup(player); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid); Vector3 vector = player.transform.position; bool flag7 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag8 = flag7; bool flag9 = flag8; if (flag9) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag10 = orAddComponent.specRigidbody; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } orAddComponent.aiAnimator.PlayUntilFinished("spawn", false, null, -1f, false); AIActor orLoadByGuidA = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid); Vector3 vectora = player.transform.position; bool flag7a = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag8a = flag7a; bool flag9a = flag8a; if (flag9a) { vectora += new Vector3(1.225f, -0.3125f, 0f); } GameObject gameObjecta = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuidA.gameObject, vectora, Quaternion.identity); CompanionController orAddComponenta = gameObjecta.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponenta); orAddComponent.Initialize(player); bool flag10a = orAddComponent.specRigidbody; bool flag11a = flag10a; bool flag12a = flag11a; if (flag12a) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponenta.specRigidbody, null, false); } orAddComponenta.aiAnimator.PlayUntilFinished("spawn", false, null, -1f, false); AIActor orLoadByGuidAa = EnemyDatabase.GetOrLoadByGuid(this.CompanionGuid); Vector3 vectoraa = player.transform.position; bool flag7aa = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag8aa = flag7aa; bool flag9aa = flag8aa; if (flag9aa) { vectoraa += new Vector3(1.325f, -0.3125f, 0f); } GameObject gameObjectaa = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vectoraa, Quaternion.identity); CompanionController orAddComponentaa = gameObjectaa.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponentaa); orAddComponentaa.Initialize(player); bool flag10aa = orAddComponentaa.specRigidbody; bool flag11aa = flag10aa; bool flag12aa = flag11aa; if (flag12aa) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponentaa.specRigidbody, null, false); } orAddComponentaa.aiAnimator.PlayUntilFinished("spawn", false, null, -1f, false); }
private IEnumerator DoEnemySpawn(string enemyGuid, IntVector2 position, bool isJammed, bool isDisplaced) { //ETGModConsole.Log("DoEnemySpawn triggered"); yield return(new WaitForSeconds(1f)); try { if (Owner.IsInCombat) { var enemyToSpawn = EnemyDatabase.GetOrLoadByGuid(enemyGuid); Instantiate <GameObject>(EasyVFXDatabase.BloodiedScarfPoofVFX, position.ToVector3(), Quaternion.identity); AIActor TargetActor = AIActor.Spawn(enemyToSpawn, position, GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(position), true, AIActor.AwakenAnimationType.Default, true); PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(TargetActor.specRigidbody, null, false); CustomEnemyTagsSystem tags = TargetActor.gameObject.GetOrAddComponent <CustomEnemyTagsSystem>(); tags.isKalibersEyeMinion = true; tags.ignoreForGoodMimic = true; CompanionController orAddComponent = TargetActor.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(Owner); TargetActor.OverrideHitEnemies = true; TargetActor.CollisionDamage = 0.5f; TargetActor.CollisionDamageTypes |= CoreDamageTypes.Electric; if (isJammed == true) { TargetActor.BecomeBlackPhantom(); } CompanionisedEnemyBulletModifiers companionisedBullets = TargetActor.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = 2f; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = 10f; companionisedBullets.scaleSpeed = true; companionisedBullets.scaleDamage = true; companionisedBullets.scaleSize = false; companionisedBullets.doPostProcess = false; companionisedBullets.enemyOwner = Owner; TargetActor.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); TargetActor.gameObject.AddComponent <KillOnRoomClear>(); if (isDisplaced) { DisplacedImageController displacedness = TargetActor.gameObject.AddComponent <DisplacedImageController>(); displacedness.Init(); } if (EasyEnemyTypeLists.MultiPhaseEnemies.Contains(TargetActor.EnemyGuid) || EasyEnemyTypeLists.EnemiesWithInvulnerablePhases.Contains(TargetActor.EnemyGuid)) { EraseFromExistenceOnRoomClear destroyTrickyEnemy = TargetActor.gameObject.AddComponent <EraseFromExistenceOnRoomClear>(); destroyTrickyEnemy.Delay = 1f; } TargetActor.IsHarmlessEnemy = true; TargetActor.RegisterOverrideColor(Color.grey, "Ressurection"); TargetActor.IgnoreForRoomClear = true; if (TargetActor.gameObject.GetComponent <SpawnEnemyOnDeath>()) { Destroy(TargetActor.gameObject.GetComponent <SpawnEnemyOnDeath>()); } } } catch (Exception e) { ETGModConsole.Log(e.Message); ETGModConsole.Log(e.StackTrace); } yield break; }
public override ContinuousBehaviorResult ContinuousUpdate() { if (this.m_state == FriendlyMirrorImageBehavior.State.Summoning) { if (this.m_timer <= 0f) { int num = Mathf.Min(this.NumImages, this.MaxImages - this.m_allImages.Count); for (int i = 0; i < num; i++) { AIActor aiactor = UnityEngine.Object.Instantiate(this.m_enemyPrefab.gameObject, this.m_aiActor.transform.position, Quaternion.identity).GetComponent <AIActor>(); CompanionController orAddComponent = aiactor.gameObject.GetOrAddComponent <CompanionController>(); if (IsBlackPhantom) { aiactor.gameObject.GetComponent <AIActor>().BecomeBlackPhantom(); } orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(base.m_aiActor.CompanionOwner); orAddComponent.behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); if (orAddComponent.healthHaver != null) { orAddComponent.healthHaver.PreventAllDamage = true; } if (orAddComponent.bulletBank != null) { orAddComponent.bulletBank.OnProjectileCreated += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } if (orAddComponent.aiShooter != null) { orAddComponent.aiShooter.PostProcessProjectile += PokeballItem.CatchProjectileBehaviour.OnPostProcessProjectile; } aiactor.HitByEnemyBullets = true; aiactor.transform.position = this.m_aiActor.transform.position; aiactor.specRigidbody.Reinitialize(); aiactor.IsGone = true; aiactor.specRigidbody.CollideWithOthers = false; if (!string.IsNullOrEmpty(this.MirrorDeathAnim)) { aiactor.aiAnimator.OtherAnimations.Find((AIAnimator.NamedDirectionalAnimation a) => a.name == "death").anim.Prefix = this.MirrorDeathAnim; } aiactor.PreventBlackPhantom = true; if (aiactor.IsBlackPhantom) { aiactor.UnbecomeBlackPhantom(); } this.m_actorsToSplit.Add(aiactor); this.m_allImages.Add(aiactor); aiactor.aiAnimator.healthHaver.SetHealthMaximum(this.MirrorHealth * AIActor.BaseLevelHealthModifier, null, false); MirrorImageController mirrorImageController = aiactor.gameObject.AddComponent <MirrorImageController>(); mirrorImageController.SetHost(this.m_aiActor); for (int j = 0; j < this.MirroredAnims.Length; j++) { mirrorImageController.MirrorAnimations.Add(this.MirroredAnims[j]); } if (this.AnimRequiresTransparency) { aiactor.sprite.usesOverrideMaterial = true; aiactor.procedurallyOutlined = false; aiactor.SetOutlines(false); aiactor.renderer.material.shader = ShaderCache.Acquire("Brave/LitBlendUber"); } } this.m_startAngle = UnityEngine.Random.Range(0f, 360f); this.m_state = FriendlyMirrorImageBehavior.State.Splitting; this.m_timer = this.SplitDelay; return(ContinuousBehaviorResult.Continue); } } else if (this.m_state == FriendlyMirrorImageBehavior.State.Splitting) { float num2 = 360f / (float)this.m_actorsToSplit.Count; for (int k = 0; k < this.m_actorsToSplit.Count; k++) { this.m_actorsToSplit[k].BehaviorOverridesVelocity = true; this.m_actorsToSplit[k].BehaviorVelocity = BraveMathCollege.DegreesToVector(this.m_startAngle + num2 * (float)k, this.SplitDistance / this.SplitDelay); } if (this.m_timer <= 0f) { return(ContinuousBehaviorResult.Finished); } } return(ContinuousBehaviorResult.Continue); }
private void CreateNewCompanion(PlayerController player) { this.random = UnityEngine.Random.Range(0.0f, 1.0f); if (random <= 0.33f) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_flame_01", base.gameObject); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(GunSoulBlue.guid1); Vector3 vector = player.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } else { int num3 = UnityEngine.Random.Range(0, 4); bool flag3 = num3 == 0; if (flag3) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_flame_01", base.gameObject); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(GunSoulGreen.guid2); Vector3 vector = player.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } bool flag4 = num3 == 1; if (flag4) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_flame_01", base.gameObject); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(GunSoulRed.guid3); Vector3 vector = player.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } bool flag5 = num3 == 2; if (flag5) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_flame_01", base.gameObject); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(GunSoulYellow.guid4); Vector3 vector = player.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } bool flag6a = num3 == 3; if (flag6a) { AkSoundEngine.PostEvent("Play_BOSS_doormimic_flame_01", base.gameObject); AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(GunSoulPink.guid5); Vector3 vector = player.transform.position; bool flag9 = GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER; bool flag10 = flag9; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); CompanionController orAddComponent = gameObject.GetOrAddComponent <CompanionController>(); this.companionsSpawned.Add(orAddComponent); orAddComponent.Initialize(player); bool flag13 = orAddComponent.specRigidbody; bool flag14 = flag13; bool flag15 = flag14; bool flag16 = flag15; if (flag16) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } } } }
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(); } }
private void DisplacedImageSpawnHook(Action <DisplaceBehavior> orig, DisplaceBehavior sourceBehaviour) { orig(sourceBehaviour); AIActor attkOwner = sourceBehaviour.GetAttackBehaviourOwner(); if (attkOwner != null) { if (attkOwner.GetComponent <CustomEnemyTagsSystem>() != null && attkOwner.GetComponent <CustomEnemyTagsSystem>().isKalibersEyeMinion) { AIActor image = OMITBReflectionHelpers.ReflectGetField <AIActor>(typeof(DisplaceBehavior), "m_image", sourceBehaviour); if (image != null) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(image.specRigidbody, null, false); CustomEnemyTagsSystem tags = image.gameObject.GetOrAddComponent <CustomEnemyTagsSystem>(); tags.isKalibersEyeMinion = true; tags.ignoreForGoodMimic = true; if (attkOwner.CompanionOwner != null) { CompanionController orAddComponent = image.gameObject.GetOrAddComponent <CompanionController>(); orAddComponent.companionID = CompanionController.CompanionIdentifier.NONE; orAddComponent.Initialize(attkOwner.CompanionOwner); } image.OverrideHitEnemies = true; image.CollisionDamage = 0.5f; image.CollisionDamageTypes |= CoreDamageTypes.Electric; CompanionisedEnemyBulletModifiers companionisedBullets = image.gameObject.GetOrAddComponent <CompanionisedEnemyBulletModifiers>(); companionisedBullets.jammedDamageMultiplier = 2f; companionisedBullets.TintBullets = true; companionisedBullets.TintColor = ExtendedColours.honeyYellow; companionisedBullets.baseBulletDamage = 10f; companionisedBullets.scaleSpeed = true; companionisedBullets.scaleDamage = true; companionisedBullets.scaleSize = false; companionisedBullets.doPostProcess = false; if (attkOwner.CompanionOwner != null) { companionisedBullets.enemyOwner = attkOwner.CompanionOwner; } image.ApplyEffect(GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultPermanentCharmEffect, 1f, null); image.gameObject.AddComponent <KillOnRoomClear>(); if (EasyEnemyTypeLists.MultiPhaseEnemies.Contains(image.EnemyGuid) || EasyEnemyTypeLists.EnemiesWithInvulnerablePhases.Contains(image.EnemyGuid)) { EraseFromExistenceOnRoomClear destroyTrickyEnemy = image.gameObject.AddComponent <EraseFromExistenceOnRoomClear>(); destroyTrickyEnemy.Delay = 1f; } image.IsHarmlessEnemy = true; image.RegisterOverrideColor(Color.grey, "Ressurection"); image.IgnoreForRoomClear = true; if (image.gameObject.GetComponent <SpawnEnemyOnDeath>()) { UnityEngine.Object.Destroy(image.gameObject.GetComponent <SpawnEnemyOnDeath>()); } } } } }
private void CreateCompanion(PlayerController owner) { if (this.PreventRespawnOnFloorLoad) { return; } if (this.BabyGoodMimicOrbitalOverridden) { GameObject extantCompanion = PlayerOrbitalItem.CreateOrbital(owner, (!this.OverridePlayerOrbitalItem.OrbitalFollowerPrefab) ? this.OverridePlayerOrbitalItem.OrbitalPrefab.gameObject : this.OverridePlayerOrbitalItem.OrbitalFollowerPrefab.gameObject, this.OverridePlayerOrbitalItem.OrbitalFollowerPrefab, null); this.SetExtantCompanion(extantCompanion); return; } string guid = this.CompanionGuid; this.m_lastActiveSynergyTransformation = -1; if (this.UsesAlternatePastPrefab && GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.CHARACTER_PAST) { guid = this.CompanionPastGuid; } else { if (this.UseAdvancedSynergies && this.AdvancedSynergies.Length > 0) { for (int i = 0; i < this.AdvancedSynergies.Length; i++) { if ((this.AdvancedSynergies[i].UseStringSynergyDetectionInstead && LichsBookItem.PlayerHasActiveSynergy(this.m_owner, this.AdvancedSynergies[i].RequiredStringSynergy)) || (!this.AdvancedSynergies[i].UseStringSynergyDetectionInstead && owner.HasActiveBonusSynergy(this.AdvancedSynergies[i].RequiredSynergy, false))) { guid = this.AdvancedSynergies[i].SynergyCompanionGuid; this.m_lastActiveSynergyTransformation = i; } } } else if (this.Synergies.Length > 0) { for (int i = 0; i < this.Synergies.Length; i++) { if (owner.HasActiveBonusSynergy(this.Synergies[i].RequiredSynergy, false)) { guid = this.Synergies[i].SynergyCompanionGuid; this.m_lastActiveSynergyTransformation = i; } } } } AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid(guid); Vector3 vector = owner.transform.position; if (GameManager.Instance.CurrentLevelOverrideState == GameManager.LevelOverrideState.FOYER) { vector += new Vector3(1.125f, -0.3125f, 0f); } GameObject extantCompanion2 = UnityEngine.Object.Instantiate <GameObject>(orLoadByGuid.gameObject, vector, Quaternion.identity); this.SetExtantCompanion(extantCompanion2); CompanionController orAddComponent = this.ExtantCompanion.GetOrAddComponent <CompanionController>(); orAddComponent.Initialize(owner); if (orAddComponent.specRigidbody) { PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(orAddComponent.specRigidbody, null, false); } if (orAddComponent.companionID == CompanionController.CompanionIdentifier.BABY_GOOD_MIMIC) { GameStatsManager.Instance.SetFlag(GungeonFlags.ITEMSPECIFIC_GOT_BABY_MIMIC, true); } }