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;
                }
            }
        }
Beispiel #2
0
            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>();
            }
Beispiel #3
0
        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;
            }
        }
Beispiel #5
0
        // 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);
            }
        }
Beispiel #6
0
        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();
            }
        }
Beispiel #7
0
 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++;
                }
            }
        }
Beispiel #10
0
        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);
                }
            }
        }
Beispiel #13
0
        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;
                    }
                }
            }
Beispiel #18
0
        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);
                }
            }
        }
Beispiel #19
0
 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);
                 }
             }
         }
     }
 }
Beispiel #20
0
 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);
        }
Beispiel #23
0
 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);
 }
Beispiel #24
0
        // 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);
        }
Beispiel #25
0
        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);
 }
Beispiel #27
0
 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);
             }
         }
     }
 }
Beispiel #28
0
 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);
            }
        }