Пример #1
0
        public static AIActor SetupAIActorDummy(string name, IntVector2 colliderOffset, IntVector2 colliderDimensions)
        {
            GameObject obj = new GameObject(name);

            obj.SetActive(false);
            FakePrefab.MarkAsFakePrefab(obj);
            UnityEngine.Object.DontDestroyOnLoad(obj);
            tk2dSprite           sprite        = obj.AddComponent <tk2dSprite>();
            SpeculativeRigidbody body          = sprite.SetUpSpeculativeRigidbody(colliderOffset, colliderDimensions);
            PixelCollider        pixelCollider = new PixelCollider();

            pixelCollider.ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual;
            pixelCollider.CollisionLayer         = CollisionLayer.EnemyCollider;
            pixelCollider.ManualWidth            = colliderDimensions.x;
            pixelCollider.ManualHeight           = colliderDimensions.y;
            pixelCollider.ManualOffsetX          = colliderOffset.x;
            pixelCollider.ManualOffsetY          = colliderOffset.y;
            body.PixelColliders.Add(pixelCollider);
            body.PrimaryPixelCollider.CollisionLayer = CollisionLayer.EnemyCollider;
            AIActor     aiactor = obj.AddComponent <AIActor>();
            HealthHaver hh      = obj.AddComponent <HealthHaver>();

            hh.SetHealthMaximum(10f);
            hh.ForceSetCurrentHealth(10f);
            BehaviorSpeculator spec = obj.AddComponent <BehaviorSpeculator>();

            ((ISerializedObject)spec).SerializedObjectReferences = new List <UnityEngine.Object>(0);
            ((ISerializedObject)spec).SerializedStateKeys        = new List <string> {
                "OverrideBehaviors", "OtherBehaviors", "TargetBehaviors", "AttackBehaviors", "MovementBehaviors"
            };
            ((ISerializedObject)spec).SerializedStateValues = new List <string> {
                "", "", "", "", ""
            };
            return(aiactor);
        }
Пример #2
0
 public void SetupOB(AIActor actor)
 {
     this.actor        = actor;
     this.behaviorSpec = actor.behaviorSpeculator;
     this.bulletBank   = actor.bulletBank;
     this.healthHaver  = actor.healthHaver;
 }
Пример #3
0
 public static void SetupChromaDroids()
 {
     //TOM
     #region SetupTom
     if (redDroidPrefab == null || !CompanionBuilder.companionDictionary.ContainsKey(RedDroidGuid))
     {
         redDroidPrefab = CompanionBuilder.BuildPrefab("ChromaGun Red Droid", RedDroidGuid, "NevernamedsItems/Resources/Companions/ChromaGunDroids/chromadroid_red_idle_001", new IntVector2(5, 1), new IntVector2(6, 6));
         var companionController = redDroidPrefab.AddComponent <CompanionController>();
         companionController.aiActor.MovementSpeed     = 6.5f;
         companionController.CanCrossPits              = true;
         companionController.aiActor.CollisionDamage   = 0;
         companionController.aiActor.ActorShadowOffset = new Vector3(0, -0.5f);
         redDroidPrefab.AddAnimation("idle", "NevernamedsItems/Resources/Companions/ChromaGunDroids/chromadroid_red_idle", 12, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.None, DirectionalAnimation.FlipType.None);
         BehaviorSpeculator component = redDroidPrefab.GetComponent <BehaviorSpeculator>();
         CustomCompanionBehaviours.SimpleCompanionMeleeAttack redDroidAttack = new CustomCompanionBehaviours.SimpleCompanionMeleeAttack();
         redDroidAttack.DamagePerTick         = 5;
         redDroidAttack.DesiredDistance       = 2;
         redDroidAttack.TickDelay             = 1f;
         redDroidAttack.selfKnockbackAmount   = 10;
         redDroidAttack.targetKnockbackAmount = 10;
         CustomCompanionBehaviours.ChromaGunDroneApproach redDroidApproach = new CustomCompanionBehaviours.ChromaGunDroneApproach();
         redDroidApproach.DesiredDistance = 1;
         redDroidApproach.droneColour     = ColourType.RED;
         component.MovementBehaviors.Add(redDroidApproach);
         component.AttackBehaviors.Add(redDroidAttack);
         component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior {
             IdleAnimations = new string[] { "idle" }
         });
     }
     #endregion
 }
Пример #4
0
        public static void BuildPrefab()
        {
            bool flag = Diode.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(Diode.guid);

            if (!flag)
            {
                Diode.prefab = CompanionBuilder.BuildPrefab("Diode Companion", Diode.guid, "NevernamedsItems/Resources/Companions/Diode/diode_idle_001", new IntVector2(4, 0), new IntVector2(8, 8));
                var companionController = Diode.prefab.AddComponent <DiodeCompanionBehaviour>();
                prefab.AddAnimation("idle_left", "NevernamedsItems/Resources/Companions/Diode/diode_idle", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                prefab.AddAnimation("idle_right", "NevernamedsItems/Resources/Companions/Diode/diode_idle", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                prefab.AddAnimation("run_left", "NevernamedsItems/Resources/Companions/Diode/diode_moveright", 12, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                prefab.AddAnimation("run_right", "NevernamedsItems/Resources/Companions/Diode/diode_moveleft", 12, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                companionController.aiAnimator.GetDirectionalAnimation("idle").Prefix = "idle";
                companionController.aiAnimator.GetDirectionalAnimation("move").Prefix = "run";
                companionController.CanInterceptBullets   = false;
                companionController.companionID           = CompanionController.CompanionIdentifier.NONE;
                companionController.aiActor.MovementSpeed = 7f;
                companionController.aiActor.healthHaver.PreventAllDamage = true;
                companionController.aiActor.CollisionDamage = 0f;
                companionController.aiActor.specRigidbody.CollideWithOthers  = false;
                companionController.aiActor.specRigidbody.CollideWithTileMap = false;
                BehaviorSpeculator component = Diode.prefab.GetComponent <BehaviorSpeculator>();
                CustomCompanionBehaviours.SimpleCompanionApproach approach = new CustomCompanionBehaviours.SimpleCompanionApproach();
                approach.DesiredDistance = 2;
                component.MovementBehaviors.Add(approach);
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
            }
        }
Пример #5
0
        public static void BuildPrefab()
        {
            bool flag = BabyGoodDet.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodDet.guid);

            if (!flag)
            {
                BabyGoodDet.prefab = CompanionBuilder.BuildPrefab("Baby Good Det", BabyGoodDet.guid, "NevernamedsItems/Resources/Companions/BabyGoodDet/babygooddet_idle_001", new IntVector2(5, 3), new IntVector2(9, 8));
                var companionController = BabyGoodDet.prefab.AddComponent <BabyDetBehav>();
                companionController.aiActor.MovementSpeed = 5f;
                companionController.CanCrossPits          = true;
                companionController.aiActor.SetIsFlying(true, "Flying Entity", false, true);
                companionController.aiActor.ActorShadowOffset = new Vector3(0, -0.5f);
                BabyGoodDet.prefab.AddAnimation("flight", "NevernamedsItems/Resources/Companions/BabyGoodDet/babygooddet_idle", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                BabyGoodDet.prefab.AddAnimation("idle", "NevernamedsItems/Resources/Companions/BabyGoodDet/babygooddet_idle", 7, CompanionBuilder.AnimationType.Flight, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                BabyGoodDet.prefab.AddAnimation("attack", "NevernamedsItems/Resources/Companions/BabyGoodDet/babygooddet_attack", 6, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                BabyGoodDet.prefab.AddAnimation("contattack", "NevernamedsItems/Resources/Companions/BabyGoodDet/babygooddet_contattack", 6, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);

                companionController.aiAnimator.GetDirectionalAnimation("idle").Prefix           = "idle";
                prefab.GetComponent <tk2dSpriteAnimator>().GetClipByName("attack").wrapMode     = tk2dSpriteAnimationClip.WrapMode.Once;
                prefab.GetComponent <tk2dSpriteAnimator>().GetClipByName("contattack").wrapMode = tk2dSpriteAnimationClip.WrapMode.Loop;
                BehaviorSpeculator component = BabyGoodDet.prefab.GetComponent <BehaviorSpeculator>();
                CustomCompanionBehaviours.SimpleCompanionApproach approach = new CustomCompanionBehaviours.SimpleCompanionApproach();
                approach.DesiredDistance = 5f;
                component.MovementBehaviors.Add(approach);
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
            }
        }
Пример #6
0
        public static void BuildPrefab()
        {
            bool flag = Gusty.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(Gusty.guid);

            if (!flag)
            {
                Gusty.prefab = CompanionBuilder.BuildPrefab("Gusty", Gusty.guid, "NevernamedsItems/Resources/Companions/Gusty/gusty_idle_001", new IntVector2(5, 3), new IntVector2(11, 11));
                var companionController = Gusty.prefab.AddComponent <GustyBehav>();
                companionController.aiActor.MovementSpeed     = 5f;
                companionController.CanCrossPits              = true;
                companionController.aiActor.ActorShadowOffset = new Vector3(0, -0.5f);
                Gusty.prefab.AddAnimation("flight", "NevernamedsItems/Resources/Companions/Gusty/gusty_idle", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                Gusty.prefab.AddAnimation("idle", "NevernamedsItems/Resources/Companions/Gusty/gusty_idle", 7, CompanionBuilder.AnimationType.Flight, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                Gusty.prefab.AddAnimation("attack", "NevernamedsItems/Resources/Companions/Gusty/gusty_attack", 14, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.Single, DirectionalAnimation.FlipType.None);
                companionController.aiAnimator.GetDirectionalAnimation("idle").Prefix       = "idle";
                prefab.GetComponent <tk2dSpriteAnimator>().GetClipByName("attack").wrapMode = tk2dSpriteAnimationClip.WrapMode.Once;
                BehaviorSpeculator component = Gusty.prefab.GetComponent <BehaviorSpeculator>();
                CustomCompanionBehaviours.SimpleCompanionApproach approach = new CustomCompanionBehaviours.SimpleCompanionApproach();
                approach.DesiredDistance = 2f;
                component.MovementBehaviors.Add(approach);
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
            }
        }
Пример #7
0
        public static void BraveBehaviorDebug()
        {
            string  enemyGuid   = "dc3cd41623d447aeba77c77c99598426"; //MarinePast
            AIActor prefabActor = EnemyDatabase.GetOrLoadByGuid(enemyGuid);


            GameObject objectToInstantiate = prefabActor.gameObject;

            // int flag = 0;

            Debug.Log("Begin BraveBehavior Debug");


            BehaviorSpeculator behaviorspeculator = objectToInstantiate.GetComponent <BehaviorSpeculator>();
            AIBulletBank       aibulletbank       = objectToInstantiate.GetComponent <AIBulletBank>();

            List <AttackBehaviorBase> attackbehaviorbase = behaviorspeculator.AttackBehaviors;

            foreach (AttackBehaviorBase attack in attackbehaviorbase)
            {
                Debug.Log("ATTACK Behaviors: " + attack.ToString());
            }

            AttackBehaviorGroup attackbehaviorgroup = behaviorspeculator.AttackBehaviorGroup;
            List <AttackBehaviorGroup.AttackGroupItem> attackbehaviors = attackbehaviorgroup.AttackBehaviors;

            foreach (AttackBehaviorGroup.AttackGroupItem attackgroupitem in attackbehaviors)
            {
                Debug.Log("AttackGroup Item :" + attackgroupitem.Behavior.ToString());
            }
            //AttackBehaviorGroup
            //AttackGruop //ShootBehavior --> has bullet scripts

            Debug.Log("End BraveBehavior Debug");
        }
Пример #8
0
        public static void BuildPrefab()
        {
            bool flag = BabyGoodLovebulon.blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodLovebulon.guid);

            if (flag)
            {
                ETGModConsole.Log("shit. this mod has fallen comrades, we must seek Round King", false);
            }
            else
            {
                BabyGoodLovebulon.blobPrefab = CompanionBuilder.BuildPrefab("blobuloveman", BabyGoodLovebulon.guid, BabyGoodLovebulon.spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9));
                BabyGoodLovebulon.RandomGoopTrailBehaviour randomGoopTrailBehaviour = BabyGoodLovebulon.blobPrefab.AddComponent <BabyGoodLovebulon.RandomGoopTrailBehaviour>();
                AIAnimator component = BabyGoodLovebulon.blobPrefab.GetComponent <AIAnimator>();
                component.MoveAnimation = new DirectionalAnimation
                {
                    AnimNames = new string[]
                    {
                        "idle"
                    },
                    Type = DirectionalAnimation.DirectionType.None
                };
                component.IdleAnimation = component.MoveAnimation;
                bool flag2 = BabyGoodLovebulon.blobCollection == null;
                if (flag2)
                {
                    BabyGoodLovebulon.blobCollection = SpriteBuilder.ConstructCollection(BabyGoodLovebulon.blobPrefab, "Lovebulon_Baby_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobCollection);
                    for (int i = 0; i < BabyGoodLovebulon.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(BabyGoodLovebulon.spritePaths[i], BabyGoodLovebulon.blobCollection);
                    }
                    SpriteBuilder.AddAnimation(randomGoopTrailBehaviour.spriteAnimator, BabyGoodLovebulon.blobCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                }
                BehaviorSpeculator component2 = BabyGoodLovebulon.blobPrefab.GetComponent <BehaviorSpeculator>();
                component2.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                component2.MovementBehaviors.Add(new SeekTargetBehavior
                {
                    LineOfSight     = false,
                    StopWhenInRange = true,
                    CustomRange     = 1f
                });
                randomGoopTrailBehaviour.aiActor.MovementSpeed = 7f;
                UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobPrefab);
                FakePrefab.MarkAsFakePrefab(BabyGoodLovebulon.blobPrefab);
                BabyGoodLovebulon.blobPrefab.SetActive(false);
            }
        }
Пример #9
0
 public static void BuildDenkSnavelPrefab()
 {
     if (prefab == null || !CompanionBuilder.companionDictionary.ContainsKey(guid))
     {
         prefab = CompanionBuilder.BuildPrefab("Gumgun Denksnavel", guid, "NevernamedsItems/Resources/Companions/Denksnavel/denksnavel_idle_left_001", new IntVector2(5, 0), new IntVector2(5, 13));
         var companionController = prefab.AddComponent <DenksnavelController>();
         companionController.aiActor.MovementSpeed     = 6.5f;
         companionController.CanCrossPits              = true;
         companionController.aiActor.ActorShadowOffset = new Vector3(0, -0.5f);
         prefab.AddAnimation("idle_right", "NevernamedsItems/Resources/Companions/Denksnavel/denksnavel_idle_right", 12, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
         prefab.AddAnimation("idle_left", "NevernamedsItems/Resources/Companions/Denksnavel/denksnavel_idle_left", 12, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
         companionController.aiAnimator.GetDirectionalAnimation("idle").Prefix = "idle";
         BehaviorSpeculator component = prefab.GetComponent <BehaviorSpeculator>();
         CustomCompanionBehaviours.SimpleCompanionMeleeAttack denksnavelattack = new CustomCompanionBehaviours.SimpleCompanionMeleeAttack();
         denksnavelattack.DamagePerTick   = 5;
         denksnavelattack.DesiredDistance = 2;
         denksnavelattack.TickDelay       = 1;
         CustomCompanionBehaviours.SimpleCompanionApproach denksnavelapproach = new CustomCompanionBehaviours.SimpleCompanionApproach();
         denksnavelapproach.DesiredDistance = 1;
         component.MovementBehaviors.Add(denksnavelapproach);
         component.AttackBehaviors.Add(denksnavelattack);
         component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior {
             IdleAnimations = new string[] { "idle" }
         });
     }
 }
        public static List <T> FindAttackBehaviors <T>(this BehaviorSpeculator spec) where T : AttackBehaviorBase
        {
            if (spec == null || spec.AttackBehaviors == null)
            {
                return(new List <T>());
            }
            List <T> result = new List <T>();

            foreach (AttackBehaviorBase behav in spec.AttackBehaviors)
            {
                if (behav != null)
                {
                    List <AttackBehaviorBase> groupItems;
                    if (behav is T)
                    {
                        result.Add(behav as T);
                    }
                    else if (behav.IsAttackBehaviorGroup(out groupItems))
                    {
                        foreach (AttackBehaviorBase behav2 in groupItems)
                        {
                            if (behav2 is T)
                            {
                                result.Add(behav2 as T);
                            }
                        }
                    }
                }
            }
            return(result);
        }
Пример #11
0
        public static void BuildPrefab()
        {
            bool flag  = BabyGoodModular.ModulePrefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodModular.guid);
            bool flag2 = !flag;

            if (flag2)
            {
                BabyGoodModular.ModulePrefab = CompanionBuilder.BuildPrefab("Baby Good Chance Kin", BabyGoodModular.guid, "BunnyMod/Resources/BabyGoodModular/babygoodmodular_idle_left_001", new IntVector2(8, 0), new IntVector2(6, 11));
                BabyGoodModular.ModuleBehaviorplswork chanceKinBehavioar = BabyGoodModular.ModulePrefab.AddComponent <BabyGoodModular.ModuleBehaviorplswork>();
                chanceKinBehavioar.aiActor.MovementSpeed = 5f;
                BabyGoodModular.ModulePrefab.AddAnimation("idle_right", "BunnyMod/Resources/BabyGoodModular/babygoodmodular_idle_right", 3, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodModular.ModulePrefab.AddAnimation("idle_left", "BunnyMod/Resources/BabyGoodModular/babygoodmodular_idle_left", 3, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodModular.ModulePrefab.AddAnimation("run_right", "BunnyMod/Resources/BabyGoodModular/babygoodmodular_run_right", 10, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodModular.ModulePrefab.AddAnimation("run_left", "BunnyMod/Resources/BabyGoodModular/babygoodmodular_run_left", 10, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BehaviorSpeculator component = BabyGoodModular.ModulePrefab.GetComponent <BehaviorSpeculator>();
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior

                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(BabyGoodModular.ModulePrefab);
                FakePrefab.MarkAsFakePrefab(BabyGoodModular.ModulePrefab);
            }
        }
Пример #12
0
        // Token: 0x060000BF RID: 191 RVA: 0x000087B8 File Offset: 0x000069B8
        public static GameObject BuildPrefab(string name, string guid, string defaultSpritePath, IntVector2 hitboxOffset, IntVector2 hitBoxSize)
        {
            bool       flag = CompanionBuilder.companionDictionary.ContainsKey(guid);
            GameObject result;

            if (flag)
            {
                ETGModConsole.Log("CompanionBuilder: Tried to create two companion prefabs with the same GUID!", false);
                result = null;
            }
            else
            {
                GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(CompanionBuilder.behaviorSpeculatorPrefab);
                gameObject.name = name;
                tk2dSprite component = SpriteBuilder.SpriteFromResource(defaultSpritePath, gameObject, false).GetComponent <tk2dSprite>();
                component.SetUpSpeculativeRigidbody(hitboxOffset, hitBoxSize).CollideWithOthers = false;
                gameObject.AddComponent <tk2dSpriteAnimator>();
                gameObject.AddComponent <AIAnimator>();
                HealthHaver healthHaver = gameObject.AddComponent <HealthHaver>();
                healthHaver.RegisterBodySprite(component, false, 0);
                healthHaver.PreventAllDamage = true;
                healthHaver.SetHealthMaximum(15000f, null, false);
                healthHaver.FullHeal();
                AIActor aiactor = gameObject.AddComponent <AIActor>();
                aiactor.State     = AIActor.ActorState.Normal;
                aiactor.EnemyGuid = guid;
                BehaviorSpeculator component2 = gameObject.GetComponent <BehaviorSpeculator>();
                component2.MovementBehaviors = new List <MovementBehaviorBase>();
                component2.AttackBehaviors   = new List <AttackBehaviorBase>();
                component2.TargetBehaviors   = new List <TargetBehaviorBase>();
                component2.OverrideBehaviors = new List <OverrideBehaviorBase>();
                component2.OtherBehaviors    = new List <BehaviorBase>();
                EnemyDatabaseEntry item = new EnemyDatabaseEntry
                {
                    myGuid          = guid,
                    placeableWidth  = 2,
                    placeableHeight = 2,
                    isNormalEnemy   = false
                };
                EnemyDatabase.Instance.Entries.Add(item);
                CompanionBuilder.companionDictionary.Add(guid, gameObject);
                UnityEngine.Object.DontDestroyOnLoad(gameObject);
                FakePrefab.MarkAsFakePrefab(gameObject);
                gameObject.SetActive(false);
                result = gameObject;
            }
            return(result);
        }
Пример #13
0
 public static void BuildPrefab()
 {
     if (prefab == null && !CompanionBuilder.companionDictionary.ContainsKey("Cross_Chamber"))
     {
         prefab = CompanionBuilder.BuildPrefab("Cross Chamber", "Cross_Chamber", "LichItems/Resources/CrossChamber/IdleRight/tomb_idle_right_001", new IntVector2(0, 0), new IntVector2(14, 16));
         var           companion = prefab.AddComponent <CompanionController>();
         PixelCollider collider  = new PixelCollider();
         collider.ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual;
         collider.CollisionLayer         = CollisionLayer.PlayerHitBox;
         collider.ManualWidth            = 14;
         collider.ManualHeight           = 16;
         collider.ManualOffsetX          = 0;
         collider.ManualOffsetY          = 0;
         KnockbackDoer knockback = companion.gameObject.GetOrAddComponent <KnockbackDoer>();
         knockback.weight = 100f;
         companion.aiActor.IsNormalEnemy = false;
         companion.CanInterceptBullets   = true;
         companion.specRigidbody.PrimaryPixelCollider.CollisionLayer = CollisionLayer.PlayerCollider;
         companion.specRigidbody.PixelColliders.Add(collider);
         companion.gameObject.AddComponent <IgnoreEnemyCollisions>();
         companion.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox));
         companion.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyCollider));
         companion.specRigidbody.CollideWithOthers = true;
         companion.aiActor.CollisionDamage         = 0f;
         companion.aiActor.MovementSpeed           = 3f;
         companion.aiActor.CanDropCurrency         = false;
         companion.healthHaver.PreventAllDamage    = false;
         prefab.AddAnimation("idle_right", "LichItems/Resources/CrossChamber/IdleRight", 4, AnimationType.Idle, DirectionType.TwoWayHorizontal);
         prefab.AddAnimation("idle_left", "LichItems/Resources/CrossChamber/IdleLeft", 4, AnimationType.Idle, DirectionType.TwoWayHorizontal);
         prefab.AddAnimation("run_right", "LichItems/Resources/CrossChamber/MoveRight", 10, AnimationType.Move, DirectionType.TwoWayHorizontal);
         prefab.AddAnimation("run_left", "LichItems/Resources/CrossChamber/MoveLeft", 10, AnimationType.Move, DirectionType.TwoWayHorizontal);
         prefab.AddAnimation("hit_left", "LichItems/Resources/CrossChamber/HitLeft", 6, AnimationType.Hit, DirectionType.TwoWayHorizontal).wrapMode   = tk2dSpriteAnimationClip.WrapMode.Once;
         prefab.AddAnimation("hit_right", "LichItems/Resources/CrossChamber/HitRight", 6, AnimationType.Hit, DirectionType.TwoWayHorizontal).wrapMode = tk2dSpriteAnimationClip.WrapMode.Once;
         BehaviorSpeculator component = CrossChamber.prefab.GetComponent <BehaviorSpeculator>();
         component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
         {
             IdleAnimations = new string[]
             {
                 "idle"
             },
             DisableInCombat = false
         });
     }
 }
        //protected override void OnDestroy()
        //{
        //	base.OnDestroy();
        //}
        public static void BuildPrefab()
        {
            if (prefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                return;
            }

            //Create the prefab with a starting sprite and hitbox offset/size
            BabyGoodShellicopter.ChopperPrefab = CompanionBuilder.BuildPrefab("Baby Good Shellicopter", guid, BabyGoodShellicopter.spritePaths[0], new IntVector2(3, 3), new IntVector2(9, 9));
            BabyGoodShellicopter.ChopperBehavior chopperBehavior = BabyGoodShellicopter.ChopperPrefab.AddComponent <BabyGoodShellicopter.ChopperBehavior>();
            AIAnimator aiAnimator = chopperBehavior.aiAnimator;

            aiAnimator.directionalType = AIAnimator.DirectionalType.Rotation;
            bool flag3 = BabyGoodShellicopter.chopperCollection == null;

            if (flag3)
            {
                BabyGoodShellicopter.chopperCollection = SpriteBuilder.ConstructCollection(BabyGoodShellicopter.ChopperPrefab, "Penguin_Collection");
                UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.chopperCollection);
                for (int i = 0; i < BabyGoodShellicopter.spritePaths.Length; i++)
                {
                    SpriteBuilder.AddSpriteToCollection(BabyGoodShellicopter.spritePaths[i], BabyGoodShellicopter.chopperCollection);
                }
                SpriteBuilder.AddAnimation(chopperBehavior.spriteAnimator, BabyGoodShellicopter.chopperCollection, new List <int>
                {
                    0,
                    1,
                    2
                }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 15f;
            }
            chopperBehavior.aiActor.MovementSpeed = 9f;
            chopperBehavior.specRigidbody.Reinitialize();
            chopperBehavior.specRigidbody.CollideWithTileMap = false;
            chopperBehavior.aiActor.CanTargetEnemies         = true;
            chopperBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
            BehaviorSpeculator behaviorSpeculator = chopperBehavior.behaviorSpeculator;

            behaviorSpeculator.AttackBehaviors.Add(new BabyGoodShellicopter.ChopperAttackBehavior());
            behaviorSpeculator.MovementBehaviors.Add(new BabyGoodShellicopter.ApproachEnemiesBehavior());
            behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior());
            UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.ChopperPrefab);
            FakePrefab.MarkAsFakePrefab(BabyGoodShellicopter.ChopperPrefab);
            BabyGoodShellicopter.ChopperPrefab.SetActive(false);
        }
        // Token: 0x0600009E RID: 158 RVA: 0x00006660 File Offset: 0x00004860
        public static void BuildPrefab()
        {
            bool flag = BabyGoodChanceKin.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodChanceKin.guid);

            if (!flag)
            {
                BabyGoodChanceKin.prefab = CompanionBuilder.BuildPrefab("Baby Good Chance Kin", BabyGoodChanceKin.guid, "NevernamedsItems/Resources/BabyGoodChanceKinSprites/babygoodchancekin_idleleft_001", new IntVector2(8, 0), new IntVector2(6, 11));
                var companionController = BabyGoodChanceKin.prefab.AddComponent <ChanceKinBehavior>();
                companionController.aiActor.MovementSpeed = 5f;
                BabyGoodChanceKin.prefab.AddAnimation("idle_right", "NevernamedsItems/Resources/BabyGoodChanceKinSprites/babygoodchancekin_idleright", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodChanceKin.prefab.AddAnimation("idle_left", "NevernamedsItems/Resources/BabyGoodChanceKinSprites/babygoodchancekin_idleleft", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodChanceKin.prefab.AddAnimation("run_right", "NevernamedsItems/Resources/BabyGoodChanceKinSprites/babygoodchancekin_moveright", 10, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BabyGoodChanceKin.prefab.AddAnimation("run_left", "NevernamedsItems/Resources/BabyGoodChanceKinSprites/babygoodchancekin_moveleft", 10, CompanionBuilder.AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                BehaviorSpeculator component = BabyGoodChanceKin.prefab.GetComponent <BehaviorSpeculator>();
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
            }
        }
        public static GameObject AttackBehaviorManipulator(GameObject bossobject)
        {// for removing interdimensional horror teleporting move. Sometimes would teleport out of room and not teleport back in
            AIActor component = bossobject.GetComponent <AIActor>();
            string  enemyguid = component.EnemyGuid;

            if (enemyguid == "dc3cd41623d447aeba77c77c99598426") //InterdimensionalHorror
            {                                                    //Removing Teleport out of room move
                BehaviorSpeculator        behaviorspeculator = bossobject.GetComponent <BehaviorSpeculator>();
                List <AttackBehaviorBase> attackbehaviorbase = behaviorspeculator.AttackBehaviors;

                int count = attackbehaviorbase.Count();

                //foreach (AttackBehaviorBase attack in attackbehaviorbase)
                for (int i = 0; i < count; i++)
                {
                    if (attackbehaviorbase[i] is BossFinalMarinePortalBehavior)
                    {
                        manipulatedAttack = attackbehaviorbase[i];
                        break;
                    }

                    else
                    {
                        //do nothing
                    }
                }

                if (manipulatedAttack is BossFinalMarinePortalBehavior)
                {
                    attackbehaviorbase.Remove(manipulatedAttack);
                }

                manipulatedAttack = null;
            }

            return(bossobject);
        }
        public static void BuildPrefab()
        {
            bool flag = ScrollOfExactKnowledge.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(ScrollOfExactKnowledge.guid);

            if (!flag)
            {
                ScrollOfExactKnowledge.prefab = CompanionBuilder.BuildPrefab("Scroll of Exact Knowledge", ScrollOfExactKnowledge.guid, "NevernamedsItems/Resources/Companions/ScrollOfExactKnowledge/scrollofexactknowledge_idleright_001", new IntVector2(5, 4), new IntVector2(11, 15));
                var companionController = ScrollOfExactKnowledge.prefab.AddComponent <ScrollOfExactKnowledgeBehav>();
                companionController.aiActor.MovementSpeed     = 6f;
                companionController.CanCrossPits              = true;
                companionController.aiActor.ActorShadowOffset = new Vector3(0, -0.5f);
                ScrollOfExactKnowledge.prefab.AddAnimation("idle_right", "NevernamedsItems/Resources/Companions/ScrollOfExactKnowledge/scrollofexactknowledge_idleright", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                ScrollOfExactKnowledge.prefab.AddAnimation("idle_left", "NevernamedsItems/Resources/Companions/ScrollOfExactKnowledge/scrollofexactknowledge_idleleft", 7, CompanionBuilder.AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal, DirectionalAnimation.FlipType.None);
                companionController.aiAnimator.GetDirectionalAnimation("idle").Prefix = "idle";
                BehaviorSpeculator component = ScrollOfExactKnowledge.prefab.GetComponent <BehaviorSpeculator>();
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
            }
        }
Пример #18
0
        public static void BuildPrefab()
        {
            if (prefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                return;
            }

            //Create the prefab with a starting sprite and hitbox offset/size
            prefab = CompanionBuilder.BuildPrefab("Winpetster", guid, "CakeMod/Resources/Winpetster/Idle/son_idle_001", new IntVector2(1, 0), new IntVector2(17, 22));


            //Add a companion component to the prefab (could be a custom class)
            var companion = prefab.AddComponent <WinpetsterBehavior>();

            companion.aiActor.MovementSpeed = 2.5f;

            //Add all of the needed animations (most of the animations need to have specific names to be recognized, like idle_right or attack_left)
            prefab.AddAnimation("idle_right", "CakeMod/Resources/Winpetster/Idle", fps: 10, AnimationType.Idle, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("idle_left", "CakeMod/Resources/Winpetster/Idle", fps: 10, AnimationType.Idle, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("run_right", "CakeMod/Resources/Winpetster/MoveRight", fps: 10, AnimationType.Move, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("run_left", "CakeMod/Resources/Winpetster/MoveLeft", fps: 10, AnimationType.Move, DirectionType.TwoWayHorizontal);

            //Add the behavior here, this too can be a custom class that extends AttackBehaviorBase or something like that
            BehaviorSpeculator bs = companion.behaviorSpeculator;

            companion.aiActor.MovementSpeed = 7f;
            companion.specRigidbody.Reinitialize();
            companion.specRigidbody.CollideWithTileMap = false;
            companion.aiActor.CanTargetEnemies         = true;
            bs.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()
            {
                IdleAnimations = new string[] { "idle" }
            });
            bs.AttackBehaviors.Add(new Winpetster.WinpetsterAttackBehavior());
            bs.MovementBehaviors.Add(new Winpetster.ApproachEnemiesBehavior());
        }
        public static void BuildPrefab()
        {
            bool flag = GregTheEgg.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(GregTheEgg.guid);

            if (!flag)
            {
                GregTheEgg.prefab = CompanionBuilder.BuildPrefab("Greg The Egg", GregTheEgg.guid, "NevernamedsItems/Resources/Companions/Greg/gregtheegg_idle_001", new IntVector2(1, 2), new IntVector2(9, 12));
                var companionController = GregTheEgg.prefab.AddComponent <GregTheEggBehaviour>();
                companionController.CanInterceptBullets   = true;
                companionController.companionID           = CompanionController.CompanionIdentifier.NONE;
                companionController.aiActor.MovementSpeed = 5f;
                companionController.aiActor.healthHaver.PreventAllDamage = false;
                companionController.aiActor.CollisionDamage = 0f;
                companionController.aiActor.specRigidbody.CollideWithOthers  = true;
                companionController.aiActor.specRigidbody.CollideWithTileMap = false;
                companionController.aiActor.healthHaver.ForceSetCurrentHealth(3000f);         //4000
                companionController.aiActor.healthHaver.SetHealthMaximum(3000f, null, false); //4000



                companionController.aiActor.specRigidbody.PixelColliders.Clear();
                companionController.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 1,
                    ManualOffsetY          = 2,
                    ManualWidth            = 9,
                    ManualHeight           = 12,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companionController.aiAnimator.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 1,
                    ManualOffsetY          = 2,
                    ManualWidth            = 9,
                    ManualHeight           = 12,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                BehaviorSpeculator component = GregTheEgg.prefab.GetComponent <BehaviorSpeculator>();
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                //SET UP ANIMATIONS
                AIAnimator aiAnimator = companionController.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "run",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.Single,
                            Prefix    = "die",
                            AnimNames = new string[1],
                            Flipped   = new DirectionalAnimation.FlipType[1]
                        }
                    },
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "spawnloot",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.Single,
                            Prefix    = "spawnloot",
                            AnimNames = new string[1],
                            Flipped   = new DirectionalAnimation.FlipType[1]
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.Single,
                    Prefix    = "idle",
                    AnimNames = new string[1],
                    Flipped   = new DirectionalAnimation.FlipType[1]
                };
                //ADD SPRITES TO THE ANIMATIONS
                bool flag3 = GregTheEgg.GregAnimationCollection == null;
                if (flag3)
                {
                    GregTheEgg.GregAnimationCollection = SpriteBuilder.ConstructCollection(GregTheEgg.prefab, "GregTheEgg_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(GregTheEgg.GregAnimationCollection);
                    for (int i = 0; i < GregTheEgg.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(GregTheEgg.spritePaths[i], GregTheEgg.GregAnimationCollection);
                    }
                    //Loot Spawning Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        13,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                        14,
                        15,
                    }, "spawnloot", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f;
                    //Idling Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        9,
                        10,
                        11,
                        12
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 6f;
                    //Running Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23
                    }, "run", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    //Cracking and Dying Animation
                    SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8
                    }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f;
                }
            }
        }
Пример #20
0
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("Flame_Clone", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.EffectResistances = new ActorEffectResistance[] { new ActorEffectResistance()
                                                                                    {
                                                                                        resistAmount = 1, resistType = EffectResistanceType.Fire
                                                                                    }, };
                companion.aiActor.knockbackDoer.weight = 800;
                companion.aiActor.MovementSpeed        = 5f;
                companion.aiActor.name = "Killinder Clone";
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage                  = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = false;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = false;
                companion.aiActor.CollisionKnockbackStrength       = 5f;
                companion.aiActor.healthHaver.SetHealthMaximum(15f, null, false);
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle"
                    }
                };

                bool flag3 = OphaimCollection == null;
                if (flag3)
                {
                    OphaimCollection = SpriteBuilder.ConstructCollection(prefab, "Inflamed_Eye_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(OphaimCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], OphaimCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, OphaimCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                }
                var     bs     = prefab.GetComponent <BehaviorSpeculator>();
                float[] angles = { 135, 45, 125, 45 };
                prefab.GetComponent <ObjectVisibilityManager>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                shootpoint                    = new GameObject("f**k");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject;
                bs.TargetBehaviors = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = true,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f,
                    }
                };
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint          = m_CachedGunAttachPoint,
                        BulletScript        = new CustomBulletScriptSelector(typeof(FlameShooter)),
                        LeadAmount          = 0f,
                        AttackCooldown      = 3f,
                        RequiresLineOfSight = false,
                        Uninterruptible     = true
                    }
                };
                companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                bs.InstantFirstTick            = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                Game.Enemies.Add("cak:flame_clone", companion.aiActor);
            }
        }
Пример #21
0
        public static void InitButterflyPrefab()
        {
            AIActor       aiactor  = SetupAIActorDummy("Butterfly", new IntVector2(0, 0), new IntVector2(10, 10));
            List <string> leftAnim = new List <string>
            {
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_001",
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_002",
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_003"
            };
            List <string> rightAnim = new List <string>
            {
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_001",
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_002",
                "SpecialItemPack/Resources/Butterfly/butterfly_idle_left_003"
            };

            GenerateSpriteAnimator(aiactor.gameObject, null, 0, 0, playAutomatically: true, clipTime: 0, ClipFps: 0);
            tk2dSpriteAnimator spriteAnim = aiactor.gameObject.GetComponent <tk2dSpriteAnimator>();

            spriteAnim.playAutomatically = true;
            spriteAnim.Library           = aiactor.gameObject.AddComponent <tk2dSpriteAnimation>();
            spriteAnim.Library.clips     = new tk2dSpriteAnimationClip[0];
            spriteAnim.DefaultClipId     = 0;
            tk2dSpriteAnimationClip leftClip = new tk2dSpriteAnimationClip {
                fps = 5, frames = new tk2dSpriteAnimationFrame[0], name = "idle_left"
            };

            foreach (string path in leftAnim)
            {
                int id = SpriteBuilder.AddSpriteToCollection(path, SpriteBuilder.itemCollection);
                tk2dSpriteAnimationFrame frame = new tk2dSpriteAnimationFrame {
                    spriteId = id, spriteCollection = SpriteBuilder.itemCollection
                };
                leftClip.frames = leftClip.frames.Concat(new tk2dSpriteAnimationFrame[] { frame }).ToArray();
            }
            aiactor.sprite.SetSprite(leftClip.frames[0].spriteCollection, leftClip.frames[0].spriteId);
            spriteAnim.Library.clips = spriteAnim.Library.clips.Concat(new tk2dSpriteAnimationClip[] { leftClip }).ToArray();
            tk2dSpriteAnimationClip rightClip = new tk2dSpriteAnimationClip {
                fps = 5, frames = new tk2dSpriteAnimationFrame[0], name = "idle_right"
            };

            foreach (string path in rightAnim)
            {
                int id = SpriteBuilder.AddSpriteToCollection(path, SpriteBuilder.itemCollection);
                tk2dSpriteAnimationFrame frame = new tk2dSpriteAnimationFrame {
                    spriteId = id, spriteCollection = SpriteBuilder.itemCollection
                };
                rightClip.frames = rightClip.frames.Concat(new tk2dSpriteAnimationFrame[] { frame }).ToArray();
            }
            spriteAnim.Library.clips = spriteAnim.Library.clips.Concat(new tk2dSpriteAnimationClip[] { rightClip }).ToArray();
            AIAnimator aiAnim = GenerateBlankAIAnimator(aiactor.gameObject);

            aiAnim.aiAnimator.facingType            = AIAnimator.FacingType.Default;
            aiAnim.aiAnimator.faceSouthWhenStopped  = false;
            aiAnim.aiAnimator.faceTargetWhenStopped = false;
            aiAnim.aiAnimator.HitType = AIAnimator.HitStateType.Basic;
            aiAnim.IdleAnimation      = new DirectionalAnimation
            {
                Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                Flipped   = new DirectionalAnimation.FlipType[2],
                AnimNames = new string[]
                {
                    "idle_right",
                    "idle_left"
                }
            };
            aiAnim.IdleAnimation = aiAnim.MoveAnimation;
            BehaviorSpeculator   chickSpec = EnemyDatabase.GetOrLoadByGuid("76bc43539fc24648bff4568c75c686d1").behaviorSpeculator;
            SpeculativeRigidbody body      = aiactor.specRigidbody;

            body.PixelColliders.RemoveAt(1);
            body.PrimaryPixelCollider.CollisionLayer = CollisionLayer.BulletBlocker;
            BehaviorSpeculator spec = aiactor.behaviorSpeculator;

            spec.OverrideBehaviors               = chickSpec.OverrideBehaviors;
            spec.OtherBehaviors                  = chickSpec.OtherBehaviors;
            spec.TargetBehaviors                 = chickSpec.TargetBehaviors;
            spec.AttackBehaviors                 = chickSpec.AttackBehaviors;
            spec.MovementBehaviors               = chickSpec.MovementBehaviors;
            spec.InstantFirstTick                = chickSpec.InstantFirstTick;
            spec.TickInterval                    = chickSpec.TickInterval;
            spec.PostAwakenDelay                 = chickSpec.PostAwakenDelay;
            spec.RemoveDelayOnReinforce          = chickSpec.RemoveDelayOnReinforce;
            spec.OverrideStartingFacingDirection = chickSpec.OverrideStartingFacingDirection;
            spec.StartingFacingDirection         = chickSpec.StartingFacingDirection;
            spec.SkipTimingDifferentiator        = chickSpec.SkipTimingDifferentiator;
            aiactor.SetIsFlying(true, "butter fly", true, true);
            Game.Enemies.Add("spapi:butterfly", aiactor);
        }
Пример #22
0
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                //float AttackAnimationThingAMaWhatIts = 0.5f;
                prefab = EnemyBuilder.BuildPrefab("ammomimic_cakaaaa", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 100;
                companion.aiActor.MovementSpeed                = 2.5f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 50f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = true;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(20f);
                companion.aiActor.CollisionKnockbackStrength = 1f;
                companion.aiActor.procedurallyOutlined       = false;
                companion.aiActor.CanTargetPlayers           = false;
                companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false);
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider


                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.PlayerBlocker,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;

                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                            Flipped   = new DirectionalAnimation.FlipType[2],
                            AnimNames = new string[]
                            {
                                "die_left",
                                "die_right"
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_left",
                        "idle_right"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_left",
                        "run_right"
                    }
                };
                bool flag3 = ammomimicCollection == null;
                if (flag3)
                {
                    ammomimicCollection = SpriteBuilder.ConstructCollection(prefab, "ammomimic_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(ammomimicCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], ammomimicCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0
                    }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int>
                    {
                        0
                    }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;

                    //companion.aiActor.gameObject.AddComponent<ColliderComponent>();
                    var bs = prefab.GetComponent <BehaviorSpeculator>();
                    prefab.GetComponent <ObjectVisibilityManager>();
                    BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("9b4fb8a2a60a457f90dcf285d34143ac").behaviorSpeculator;
                    bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                    bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                    shootpoint                    = new GameObject("ammosh");
                    shootpoint.transform.parent   = companion.transform;
                    shootpoint.transform.position = companion.sprite.WorldCenter;
                    GameObject m_CachedGunAttachPoint = companion.transform.Find("ammosh").gameObject;
                    bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                    bs.TickInterval                    = behaviorSpeculator.TickInterval;
                    bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                    bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                    bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                    bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                    bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                    Game.Enemies.Add("cak:ammomimic", companion.aiActor);
                    ItemsMod.Strings.Enemies.Set("#AMMOMIMIC", "Ammomimic");
                    companion.aiActor.OverrideDisplayName = "#AMMOMIMIC";
                    companion.aiActor.ActorName           = "#AMMOMIMIC";
                    companion.aiActor.name = "#AMMOMIMIC";
                }
            }
        }
Пример #23
0
        public static void BuildPrefab()
        {
            bool flag  = StrangeArrow.arrowPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(StrangeArrow.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                StrangeArrow.arrowPrefab = CompanionBuilder.BuildPrefab("Strange Arrow", StrangeArrow.guid, StrangeArrow.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                StrangeArrow.arrowBehavior arrowsBehavior = StrangeArrow.arrowPrefab.AddComponent <StrangeArrow.arrowBehavior>();
                AIAnimator aiAnimator = arrowsBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                bool flag3 = StrangeArrow.arrowCollection == null;
                if (flag3)
                {
                    StrangeArrow.arrowCollection = SpriteBuilder.ConstructCollection(StrangeArrow.arrowPrefab, "StrangeArrow_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowCollection);
                    for (int i = 0; i < StrangeArrow.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(StrangeArrow.spritePaths[i], StrangeArrow.arrowCollection);
                    }
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        4,
                        5
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                    SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int>
                    {
                        6,
                        7
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f;
                }
                arrowsBehavior.aiActor.MovementSpeed = 7f;
                arrowsBehavior.specRigidbody.Reinitialize();
                arrowsBehavior.specRigidbody.CollideWithTileMap = false;
                arrowsBehavior.aiActor.CanTargetEnemies         = true;
                BehaviorSpeculator behaviorSpeculator = arrowsBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new StrangeArrow.arrowAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new StrangeArrow.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowPrefab);
                FakePrefab.MarkAsFakePrefab(StrangeArrow.arrowPrefab);
                StrangeArrow.arrowPrefab.SetActive(false);
            }
        }
Пример #24
0
        public static void BuildPrefab()
        {
            //
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                //float AttackAnimationThingAMaWhatIts = 0.5f;
                prefab = EnemyBuilder.BuildPrefab("ink_book", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 100;
                companion.aiActor.MovementSpeed                = 2.5f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = true;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(20f);
                companion.aiActor.CollisionKnockbackStrength = 0f;
                companion.aiActor.procedurallyOutlined       = false;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider


                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 13,
                    ManualHeight           = 13,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });

                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;

                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>
                {
                    new AIAnimator.NamedDirectionalAnimation
                    {
                        name = "die",
                        anim = new DirectionalAnimation
                        {
                            Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                            Flipped   = new DirectionalAnimation.FlipType[2],
                            AnimNames = new string[]
                            {
                                "die_left",
                                "die_right"
                            }
                        }
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_left",
                        "idle_right"
                    }
                };
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_left",
                        "run_right"
                    }
                };
                bool flag3 = InkedBook == null;
                if (flag3)
                {
                    InkedBook = SpriteBuilder.ConstructCollection(prefab, "InkBooklet_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(InkedBook);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], InkedBook);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        0,
                        1
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        2,
                        3,
                        4,
                        5,
                        6
                    }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int>
                    {
                        2,
                        3,
                        4,
                        5,
                        6
                    }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f;

                    //companion.aiActor.gameObject.AddComponent<ColliderComponent>();
                    var bs = prefab.GetComponent <BehaviorSpeculator>();
                    prefab.GetComponent <ObjectVisibilityManager>();
                    BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").behaviorSpeculator;
                    bs.OverrideBehaviors          = behaviorSpeculator.OverrideBehaviors;
                    bs.OtherBehaviors             = behaviorSpeculator.OtherBehaviors;
                    shootpoint                    = new GameObject("beepskysmash");
                    shootpoint.transform.parent   = companion.transform;
                    shootpoint.transform.position = companion.sprite.WorldCenter;
                    GameObject m_CachedGunAttachPoint = companion.transform.Find("beepskysmash").gameObject;
                    bs.TargetBehaviors = new List <TargetBehaviorBase>
                    {
                        new TargetPlayerBehavior
                        {
                            Radius              = 35f,
                            LineOfSight         = true,
                            ObjectPermanence    = true,
                            SearchInterval      = 0.25f,
                            PauseOnTargetSwitch = false,
                            PauseTime           = 0.25f,
                        }
                    };
                    bs.AttackBehaviors = new List <AttackBehaviorBase>()
                    {
                        new ShootBehavior()
                        {
                            ShootPoint          = m_CachedGunAttachPoint,
                            BulletScript        = new CustomBulletScriptSelector(typeof(SkellScript)),
                            LeadAmount          = 0f,
                            AttackCooldown      = 5f,
                            InitialCooldown     = 1f,
                            RequiresLineOfSight = true,
                            StopDuring          = ShootBehavior.StopType.Attack,
                            Uninterruptible     = true,
                        }
                    };
                    bs.MovementBehaviors = new List <MovementBehaviorBase>
                    {
                        new SeekTargetBehavior
                        {
                            StopWhenInRange     = true,
                            CustomRange         = 7f,
                            LineOfSight         = false,
                            ReturnToSpawn       = false,
                            SpawnTetherDistance = 0f,
                            PathInterval        = 0.5f,
                            SpecifyRange        = false,
                            MinActiveRange      = 0f,
                            MaxActiveRange      = 0f
                        }
                    };

                    bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                    bs.TickInterval                    = behaviorSpeculator.TickInterval;
                    bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                    bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                    bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                    bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                    bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                    Game.Enemies.Add("cak:ink_booklet", companion.aiActor);
                    ItemsMod.Strings.Enemies.Set("#INKBOOK", "Ink Booklet");
                    companion.aiActor.OverrideDisplayName = "#INKBOOK";
                    companion.aiActor.ActorName           = "#INKBOOK";
                    companion.aiActor.name = "#INKBOOK";
                }
            }
        }
Пример #25
0
        public static void BuildPrefab()
        {
            if (prefab == null || !EnemyBuilder.Dictionary.ContainsKey(guid))
            {
                //Sets up the prefab of the enemy. The spritepath, "CakeMod/Resources/Waterbulon/Idle/milton_idle_001", determines the setup sprite for your enemy. vvvv This bool right here determines whether or not an enemy has an AiShooter or not. AIShooters are necessary if you want your enemy to hold a gun for example. An example of this can be seen in Humphrey.
                prefab = EnemyBuilder.BuildPrefab("Waterbulon", guid, "CakeMod/Resources/Waterbulon/Idle/waterbulon_idle_001", new IntVector2(0, 0), new IntVector2(0, 0), false);
                //This line extends a BraveBehavior called EnemyBehavior, this is a generic behavior I use for setting up things that can't be setup in BuildPrefab.
                var enemy = prefab.AddComponent <EnemyBehavior>();
                //Here you can setup various things like movement speed, weight, and health. There's a lot you can do with the AiActor parameter so feel free to experiment.
                enemy.aiActor.MovementSpeed        = 6.7f;
                enemy.aiActor.knockbackDoer.weight = 500;
                enemy.aiActor.IgnoreForRoomClear   = false;
                enemy.aiActor.CollisionDamage      = 1f;
                enemy.aiActor.healthHaver.ForceSetCurrentHealth(15f);
                enemy.aiActor.healthHaver.SetHealthMaximum(15f, null, false);

                enemy.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider

                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 19,
                    ManualHeight           = 14,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                enemy.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 19,
                    ManualHeight           = 14,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });

                //This is where you setup your animations. Most animations need specific frame names to be recognized like idle or die.
                //The AddAnimation lines gets sprites from the folder specified in second phrase of the this line. At the very least you need an animation that contains the word idle for the idle animations for example.
                //AnimationType determines what kind of animation your making. In Gungeon there are 7 different Animation Types: Move, Idle, Fidget, Flight, Hit, Talk, Other. For a majority of these animations, these play automatically, however specific animations need to be told when to play such as Attack.
                //DirectionType determines the amount of ways an animation can face. You'll have to change your animation names to correspond with the DirectionType. For example if you want an animation to face eight ways you'll have to name your animations something like ""attack_south_west", "attack_north_east",  "attack_east", "attack_south_east",  "attack_north",  "attack_south", "attack_west", "attack_north_west" and change DirectionType to  DirectionType.EightWayOrdinal.
                //I suggest looking at the sprites of base game enemies to determine the names for the different directions.
                prefab.AddAnimation("idle_left", "CakeMod/Resources/Waterbulon/Idle", fps: 7, AnimationType.Idle, DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("idle_right", "CakeMod/Resources/Waterbulon/Idle", fps: 7, AnimationType.Idle, DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("run_left", "CakeMod/Resources/Waterbulon/Run", fps: 7, AnimationType.Move, DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("run_right", "CakeMod/Resources/Waterbulon/Run", fps: 7, AnimationType.Move, DirectionType.TwoWayHorizontal);
                //Note that the "die" and "attack" animations are only set to Move because they will be overwritten later.
                //tk2dSpriteAnimationClip.WrapMode.Once determines how an animation plays out. If you don't want it to loop, leave it to Once, otherwise you can change it to Loop or something.
                //Assign animation well assigns an animation to an animation type. By default this is on, but since we're overwritting this set this to false.
                prefab.AddAnimation("attack_left", "CakeMod/Resources/Waterbulon/Attack", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
                prefab.AddAnimation("attack_right", "CakeMod/Resources/Waterbulon/Attack", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
                prefab.AddAnimation("die_left", "CakeMod/Resources/Waterbulon/Die", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
                prefab.AddAnimation("die_right", "CakeMod/Resources/Waterbulon/Die", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
                //Here we create a new DirectionalAnimation for our enemy to pull from.
                //Make sure the AnimNames correspong to the AddAnimation names.
                DirectionalAnimation attack = new DirectionalAnimation()
                {
                    AnimNames = new string[] { "attack_right", "attack_left" },
                    Flipped   = new FlipType[] { FlipType.None, FlipType.None },
                    Type      = DirectionType.TwoWayHorizontal,
                    Prefix    = string.Empty
                };
                DirectionalAnimation die = new DirectionalAnimation()
                {
                    AnimNames = new string[] { "die_right", "die_left" },
                    Flipped   = new FlipType[] { FlipType.None, FlipType.None },
                    Type      = DirectionType.TwoWayHorizontal,
                    Prefix    = string.Empty
                };
                //Because Dodge Roll is Dodge Roll and there is no animation types for attack and death, we have to assign them to the Other category.
                enemy.aiAnimator.AssignDirectionalAnimation("attack", attack, AnimationType.Other);
                enemy.aiAnimator.AssignDirectionalAnimation("die", die, AnimationType.Other);
                //This is where we get into the meat and potatoes of our enemy. This is where all the behaviors of our enemy are made.
                //This shootpoint block of code determines where our bullets will orginate from. In this case, the center of the enemy.
                shootpoint = new GameObject("Waterbuloncenter");
                shootpoint.transform.parent   = enemy.transform;
                shootpoint.transform.position = enemy.sprite.WorldCenter;
                GameObject position = enemy.transform.Find("Waterbuloncenter").gameObject;
                //this line adds a BehaviorSpeculator to our enemy which is the base for adding behaviors on to.
                var bs = prefab.GetComponent <BehaviorSpeculator>();
                //Here we will add some basic behaviors such as TargetPlayerBehavior and SeekTargetBehavior.
                //You can change many things in these behaviors so feel free to go nuts.
                BehaviorSpeculator BEHAVIORIAL = EnemyDatabase.GetOrLoadByGuid("0239c0680f9f467dbe5c4aab7dd1eca6").behaviorSpeculator;
                BehaviorSpeculator spec        = enemy.behaviorSpeculator;
                spec.OverrideBehaviors               = BEHAVIORIAL.OverrideBehaviors;
                spec.OtherBehaviors                  = BEHAVIORIAL.OtherBehaviors;
                spec.TargetBehaviors                 = BEHAVIORIAL.TargetBehaviors;
                spec.AttackBehaviors                 = BEHAVIORIAL.AttackBehaviors;
                spec.MovementBehaviors               = BEHAVIORIAL.MovementBehaviors;
                spec.InstantFirstTick                = BEHAVIORIAL.InstantFirstTick;
                spec.TickInterval                    = BEHAVIORIAL.TickInterval;
                spec.PostAwakenDelay                 = BEHAVIORIAL.PostAwakenDelay;
                spec.RemoveDelayOnReinforce          = BEHAVIORIAL.RemoveDelayOnReinforce;
                spec.OverrideStartingFacingDirection = BEHAVIORIAL.OverrideStartingFacingDirection;
                spec.StartingFacingDirection         = BEHAVIORIAL.StartingFacingDirection;
                spec.SkipTimingDifferentiator        = BEHAVIORIAL.SkipTimingDifferentiator;
                //Now this is one of the most important behaviors because it allows our enemy to shoot.
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint = position,
                        //This line selects our Bullet Script
                        BulletScript        = new CustomBulletScriptSelector(typeof(MiltonScript)),
                        LeadAmount          = 0f,
                        AttackCooldown      = 4f,
                        FireAnimation       = "attack",
                        RequiresLineOfSight = true,
                        Uninterruptible     = false,
                    }
                };
                bs.MovementBehaviors = new List <MovementBehaviorBase>
                {
                    new SeekTargetBehavior
                    {
                        StopWhenInRange     = false,
                        CustomRange         = 15f,
                        LineOfSight         = false,
                        ReturnToSpawn       = false,
                        SpawnTetherDistance = 0f,
                        PathInterval        = 0.5f,
                        SpecifyRange        = false,
                        MinActiveRange      = 0f,
                        MaxActiveRange      = 0f
                    }
                };
                //Adds the enemy to MTG spawn pool and spawn command
                Game.Enemies.Add("cak:waterbulon", enemy.aiActor);
            }
        }
        public static void BuildPrefab()
        {
            if (!(DarkPrince.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(DarkPrince.guid)))
            {
                DarkPrince.prefab = CompanionBuilder.BuildPrefab("Dark Prince", DarkPrince.guid, "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_idlefrontright_001", new IntVector2(6, 1), new IntVector2(5, 5));
                var companionController = DarkPrince.prefab.AddComponent <DarkPrinceController>();
                companionController.aiActor.MovementSpeed = 4f;

                AIAnimator animator = DarkPrince.prefab.GetOrAddComponent <AIAnimator>();

                animator.AdvAddAnimation("idle",
                                         DirectionalAnimation.DirectionType.FourWay,
                                         CompanionBuilder.AnimationType.Idle,
                                         new List <AnimationUtilityExtensions.DirectionalAnimationData>()
                {
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "idle_back_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_idlebackright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "idle_front_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_idlefrontright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "idle_front_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_idlefrontleft",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "idle_back_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_idlebackleft",
                    },
                }
                                         );

                animator.AdvAddAnimation("move",
                                         DirectionalAnimation.DirectionType.FourWay,
                                         CompanionBuilder.AnimationType.Move,
                                         new List <AnimationUtilityExtensions.DirectionalAnimationData>()
                {
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "move_back_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_walkbackright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "move_front_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_walkfrontright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "move_front_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_walkfrontleft",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "move_back_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Loop,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_walkbackleft",
                    },
                }
                                         );

                animator.AdvAddAnimation("attack",
                                         DirectionalAnimation.DirectionType.FourWay,
                                         CompanionBuilder.AnimationType.Other,
                                         new List <AnimationUtilityExtensions.DirectionalAnimationData>()
                {
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "attack_back_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Once,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_attackbackright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "attack_front_right",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Once,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_attackfrontright",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "attack_front_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Once,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_attackfrontleft",
                    },
                    new AnimationUtilityExtensions.DirectionalAnimationData()
                    {
                        subAnimationName = "attack_back_left",
                        wrapMode         = tk2dSpriteAnimationClip.WrapMode.Once,
                        fps           = 9,
                        pathDirectory = "NevernamedsItems/Resources/Companions/DarkPrince/darkprince_attackbackleft",
                    },
                }
                                         );


                BehaviorSpeculator component = DarkPrince.prefab.GetComponent <BehaviorSpeculator>();
                CustomCompanionBehaviours.SimpleCompanionApproach approach = new CustomCompanionBehaviours.SimpleCompanionApproach();
                approach.DesiredDistance = 7f;
                component.MovementBehaviors.Add(approach);
                component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    },
                    CatchUpRadius    = 6,
                    CatchUpMaxSpeed  = 10,
                    CatchUpAccelTime = 1,
                    CatchUpSpeed     = 7,
                });
            }
        }
Пример #27
0
        public static void BuildPrefab()
        {
            bool flag  = PointZero.PointZeroPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(PointZero.guid);
            bool flag2 = flag;

            if (!flag2)
            {
                PointZero.PointZeroPrefab = CompanionBuilder.BuildPrefab("Point Zero", PointZero.guid, PointZero.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9));
                PointZero.PointZeroBehaviour pointZeroBehavior = PointZero.PointZeroPrefab.AddComponent <PointZero.PointZeroBehaviour>();
                AIAnimator aiAnimator = pointZeroBehavior.aiAnimator;
                aiAnimator.MoveAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "run_right",
                        "run_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle_right",
                        "idle_left"
                    }
                };
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "attack_right",
                        "attack_left"
                    }
                };
                bool flag3 = PointZero.pointzeroCollection == null;
                if (flag3)
                {
                    PointZero.pointzeroCollection = SpriteBuilder.ConstructCollection(PointZero.PointZeroPrefab, "Penguin_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(PointZero.pointzeroCollection);
                    for (int i = 0; i < PointZero.spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(PointZero.spritePaths[i], PointZero.pointzeroCollection);
                    }
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                    }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15
                    }, "attack_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                    SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int>
                    {
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15
                    }, "attack_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f;
                }
                pointZeroBehavior.aiActor.MovementSpeed = 5f;
                pointZeroBehavior.specRigidbody.Reinitialize();
                pointZeroBehavior.specRigidbody.CollideWithTileMap = false;
                pointZeroBehavior.aiActor.CanTargetEnemies         = true;
                pointZeroBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true);
                BehaviorSpeculator behaviorSpeculator = pointZeroBehavior.behaviorSpeculator;
                behaviorSpeculator.AttackBehaviors.Add(new PointZero.PointZeroAttackBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new PointZero.ApproachEnemiesBehavior());
                behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior
                {
                    IdleAnimations = new string[]
                    {
                        "idle"
                    }
                });
                UnityEngine.Object.DontDestroyOnLoad(PointZero.PointZeroPrefab);
                FakePrefab.MarkAsFakePrefab(PointZero.PointZeroPrefab);
                PointZero.PointZeroPrefab.SetActive(false);
            }
        }
Пример #28
0
        public static void BuildPrefab()
        {
            if (prefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid))
            {
                return;
            }

            //Create the prefab with a starting sprite and hitbox offset/size
            prefab = CompanionBuilder.BuildPrefab("testbulon", guid, "CakeMod/Resources/Lovebulon/Idle/lovebulon_idle_001", new IntVector2(1, 0), new IntVector2(9, 9));

            //Add a companion component to the prefab (could be a custom class)
            var companion = prefab.GetComponent <BehaviorSpeculator>();
            BehaviorSpeculator BEHAVIORIAL = EnemyDatabase.GetOrLoadByGuid("42be66373a3d4d89b91a35c9ff8adfec").behaviorSpeculator;
            BehaviorSpeculator spec        = companion.behaviorSpeculator;

            spec.OverrideBehaviors = BEHAVIORIAL.OverrideBehaviors;
            spec.OtherBehaviors    = BEHAVIORIAL.OtherBehaviors;
            spec.TargetBehaviors   = BEHAVIORIAL.TargetBehaviors;

            spec.AttackBehaviors                               = BEHAVIORIAL.AttackBehaviors;
            spec.MovementBehaviors                             = BEHAVIORIAL.MovementBehaviors;
            spec.InstantFirstTick                              = BEHAVIORIAL.InstantFirstTick;
            spec.TickInterval                                  = BEHAVIORIAL.TickInterval;
            spec.PostAwakenDelay                               = BEHAVIORIAL.PostAwakenDelay;
            spec.RemoveDelayOnReinforce                        = BEHAVIORIAL.RemoveDelayOnReinforce;
            spec.OverrideStartingFacingDirection               = BEHAVIORIAL.OverrideStartingFacingDirection;
            spec.StartingFacingDirection                       = BEHAVIORIAL.StartingFacingDirection;
            spec.SkipTimingDifferentiator                      = BEHAVIORIAL.SkipTimingDifferentiator;
            companion.aiActor.MovementSpeed                    = 9f;
            companion.aiActor.healthHaver.PreventAllDamage     = false;
            companion.aiActor.CollisionDamage                  = 100f;
            companion.aiActor.HasShadow                        = false;
            companion.aiActor.CanTargetPlayers                 = true;
            companion.aiActor.specRigidbody.CollideWithOthers  = true;
            companion.aiActor.specRigidbody.CollideWithTileMap = true;
            companion.aiActor.healthHaver.ForceSetCurrentHealth(35f);
            companion.aiActor.healthHaver.SetHealthMaximum(35f, null, false);
            companion.aiActor.specRigidbody.PixelColliders.Clear();
            companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
            {
                ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                CollisionLayer         = CollisionLayer.EnemyCollider,
                IsTrigger = false,
                BagleUseFirstFrameOnly = false,
                SpecifyBagelFrame      = string.Empty,
                BagelColliderNumber    = 0,
                ManualOffsetX          = 20,
                ManualOffsetY          = 6,
                ManualWidth            = 11,
                ManualHeight           = 9,
                ManualDiameter         = 0,
                ManualLeftX            = 0,
                ManualLeftY            = 0,
                ManualRightX           = 0,
                ManualRightY           = 0
            });
            companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
            {
                ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                CollisionLayer         = CollisionLayer.EnemyHitBox,
                IsTrigger = false,
                BagleUseFirstFrameOnly = false,
                SpecifyBagelFrame      = string.Empty,
                BagelColliderNumber    = 0,
                ManualOffsetX          = 0,
                ManualOffsetY          = 0,
                ManualWidth            = 11,
                ManualHeight           = 9,
                ManualDiameter         = 0,
                ManualLeftX            = 0,
                ManualLeftY            = 0,
                ManualRightX           = 0,
                ManualRightY           = 0
            });

            //Add all of the needed animations (most of the animations need to have specific names to be recognized, like idle_right or attack_left)
            prefab.AddAnimation("idle_left", "CakeMod/Resources/Lovebulon/Idle", fps: 7, AnimationType.Idle, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("idle_right", "CakeMod/Resources/Lovebulon/Idle", fps: 7, AnimationType.Idle, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("run_left", "CakeMod/Resources/Lovebulon/Run", fps: 7, AnimationType.Move, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("run_right", "CakeMod/Resources/Lovebulon/Run", fps: 7, AnimationType.Move, DirectionType.TwoWayHorizontal);
            prefab.AddAnimation("pitfall", "CakeMod/Resources/Lovebulon/Fall", fps: 7, AnimationType.Idle, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once);
            //Note that the "die" and "attack" animations are only set to Move because they will be overwritten later.
            //tk2dSpriteAnimationClip.WrapMode.Once determines how an animation plays out. If you don't want it to loop, leave it to Once, otherwise you can change it to Loop or something.
            //Assign animation well assigns an animation to an animation type. By default this is on, but since we're overwritting this set this to false.
            prefab.AddAnimation("attack_left", "CakeMod/Resources/Lovebulon/Attack", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
            prefab.AddAnimation("attack_right", "CakeMod/Resources/Lovebulon/Attack", fps: 8, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
            prefab.AddAnimation("die_left", "CakeMod/Resources/Lovebulon/Die", fps: 12, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
            prefab.AddAnimation("die_right", "CakeMod/Resources/Lovebulon/Die", fps: 12, AnimationType.Move, DirectionType.TwoWayHorizontal, tk2dSpriteAnimationClip.WrapMode.Once, assignAnimation: false);
            //Here we create a new DirectionalAnimation for our enemy to pull from.
            //Make sure the AnimNames correspong to the AddAnimation names.
            DirectionalAnimation attack = new DirectionalAnimation()
            {
                AnimNames = new string[] { "attack_right", "attack_left" },
                Flipped   = new FlipType[] { FlipType.None, FlipType.None },
                Type      = DirectionType.TwoWayHorizontal,
                Prefix    = string.Empty
            };
            DirectionalAnimation die = new DirectionalAnimation()
            {
                AnimNames = new string[] { "die_right", "die_left" },
                Flipped   = new FlipType[] { FlipType.None, FlipType.None },
                Type      = DirectionType.TwoWayHorizontal,
                Prefix    = string.Empty
            };

            //Because Dodge Roll is Dodge Roll and there is no animation types for attack and death, we have to assign them to the Other category.
            companion.aiAnimator.AssignDirectionalAnimation("attack", attack, AnimationType.Other);
            companion.aiAnimator.AssignDirectionalAnimation("die", die, AnimationType.Other);

            //Add the behavior here, this too can be a custom class that extends AttackBehaviorBase or something like that
            var bs = prefab.GetComponent <BehaviorSpeculator>();

            bs.TargetBehaviors = new List <TargetBehaviorBase>()
            {
                new TargetPlayerBehavior()
                {
                    Radius              = 35,
                    LineOfSight         = false,
                    ObjectPermanence    = true,
                    SearchInterval      = 0.01f,
                    PauseOnTargetSwitch = false,
                    PauseTime           = 0f
                }
            };
            bs.MovementBehaviors = new List <MovementBehaviorBase>()
            {
                new SeekTargetBehavior()
                {
                    StopWhenInRange     = false,
                    CustomRange         = 6,
                    LineOfSight         = true,
                    ReturnToSpawn       = true,
                    SpawnTetherDistance = 0,
                    PathInterval        = 0.5f,
                    SpecifyRange        = false,
                    MinActiveRange      = 0,
                    MaxActiveRange      = 0
                }
            };
            Game.Enemies.Add("cak:testbulon", companion.aiActor);
        }
Пример #29
0
        public static void BuildPrefab()
        {
            // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93");
            bool flag  = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool flag2 = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("mimekin", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                companion.aiActor.knockbackDoer.weight         = 200;
                companion.aiActor.MovementSpeed                = 2f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow          = false;
                companion.aiActor.IgnoreForRoomClear = false;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(25f);
                companion.aiActor.CollisionKnockbackStrength = 5f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(25f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 12,
                    ManualHeight           = 26,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;
                aiAnimator.IdleAnimation = new DirectionalAnimation
                {
                    Type      = DirectionalAnimation.DirectionType.TwoWayHorizontal,
                    Flipped   = new DirectionalAnimation.FlipType[2],
                    AnimNames = new string[]
                    {
                        "idle",
                        "idle_two"
                    }
                };
                bool flag3 = RoyalJesterletCollection == null;
                if (flag3)
                {
                    RoyalJesterletCollection = SpriteBuilder.ConstructCollection(prefab, "RoyalJesterlet_Collection");
                    UnityEngine.Object.DontDestroyOnLoad(RoyalJesterletCollection);
                    for (int i = 0; i < spritePaths.Length; i++)
                    {
                        SpriteBuilder.AddSpriteToCollection(spritePaths[i], RoyalJesterletCollection);
                    }
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int>
                    {
                        2,
                        3
                    }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                    SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int>
                    {
                        0,
                        1
                    }, "idle_two", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f;
                }
                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator;
                bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors    = behaviorSpeculator.OtherBehaviors;
                bs.TargetBehaviors   = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 35f,
                        LineOfSight         = false,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                shootpoint = new GameObject("f**k");
                shootpoint.transform.parent   = companion.transform;
                shootpoint.transform.position = companion.sprite.WorldCenter;
                GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject;
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint          = m_CachedGunAttachPoint,
                        BulletScript        = new CustomBulletScriptSelector(typeof(TransparentBulletScript)),
                        LeadAmount          = 0f,
                        InitialCooldown     = 3f,
                        AttackCooldown      = 5f,
                        RequiresLineOfSight = false,
                        ChargeTime          = 1f,
                        Uninterruptible     = true
                    },
                };
                bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;
                Game.Enemies.Add("cak:mimekin", companion.aiActor);
                SpriteBuilder.AddSpriteToCollection("CakeMod/Resources/mimekin/mime_left_001", SpriteBuilder.ammonomiconCollection);
                if (companion.GetComponent <EncounterTrackable>() != null)
                {
                    UnityEngine.Object.Destroy(companion.GetComponent <EncounterTrackable>());
                }
                companion.encounterTrackable               = companion.gameObject.AddComponent <EncounterTrackable>();
                companion.encounterTrackable.journalData   = new JournalEntry();
                companion.encounterTrackable.EncounterGuid = "cak:mimekin";
                companion.encounterTrackable.prerequisites = new DungeonPrerequisite[0];
                companion.encounterTrackable.journalData.SuppressKnownState    = false;
                companion.encounterTrackable.journalData.IsEnemy               = true;
                companion.encounterTrackable.journalData.SuppressInAmmonomicon = false;
                companion.encounterTrackable.ProxyEncounterGuid              = "";
                companion.encounterTrackable.journalData.AmmonomiconSprite   = "CakeMod/Resources/mimekin/mime_left_001";
                companion.encounterTrackable.journalData.enemyPortraitSprite = ItemAPI.ResourceExtractor.GetTextureFromResource("CakeMod\\Resources\\mimepic.png");
                ItemsMod.Strings.Enemies.Set("#THE_MIME", "Mime Kin");
                ItemsMod.Strings.Enemies.Set("#THE_MIME_SHORTDESC", "Invisible Man");
                ItemsMod.Strings.Enemies.Set("#THE_MIME_LONGDESC", "Masters of mimicking and mimery, these clever bullets use their connection to a silent force to enchant bullets with a fraction of their power.");
                companion.encounterTrackable.journalData.PrimaryDisplayName           = "#THE_MIME";
                companion.encounterTrackable.journalData.NotificationPanelDescription = "#THE_MIME_SHORTDESC";
                companion.encounterTrackable.journalData.AmmonomiconFullEntry         = "#THE_MIME_LONGDESC";
                EnemyBuilder.AddEnemyToDatabase(companion.gameObject, "cak:mimekin");
                EnemyDatabase.GetEntry("cak:mimekin").ForcedPositionInAmmonomicon = 32;
                EnemyDatabase.GetEntry("cak:mimekin").isInBossTab   = false;
                EnemyDatabase.GetEntry("cak:mimekin").isNormalEnemy = true;
            }
        }
Пример #30
0
        public static void BuildPrefab()
        {
            AIActor source = EnemyDatabase.GetOrLoadByGuid("e21ac9492110493baef6df02a2682a0d");
            bool    flag   = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid);
            bool    flag2  = flag;

            if (!flag2)
            {
                prefab = EnemyBuilder.BuildPrefab("ChaosBeing", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false);
                var companion = prefab.AddComponent <EnemyBehavior>();
                ChaosBeing.shootpoint = new GameObject("f**k");
                ChaosBeing.shootpoint.transform.parent         = companion.transform;
                ChaosBeing.shootpoint.transform.position       = companion.sprite.WorldCenter;
                companion.aiActor.knockbackDoer.weight         = 200000;
                companion.aiActor.MovementSpeed               *= 0.25f;
                companion.aiActor.healthHaver.PreventAllDamage = false;
                companion.aiActor.CollisionDamage              = 1f;
                companion.aiActor.HasShadow                        = false;
                companion.aiActor.IgnoreForRoomClear               = true;
                companion.aiActor.aiAnimator.HitReactChance        = 0f;
                companion.aiActor.specRigidbody.CollideWithOthers  = true;
                companion.aiActor.specRigidbody.CollideWithTileMap = true;
                companion.aiActor.PreventFallingInPitsEver         = true;
                companion.aiActor.healthHaver.ForceSetCurrentHealth(75f);
                companion.aiActor.CollisionKnockbackStrength = 0f;
                companion.aiActor.CanTargetPlayers           = true;
                companion.aiActor.healthHaver.SetHealthMaximum(75f, null, false);
                companion.aiActor.specRigidbody.PixelColliders.Clear();

                GameObject AttachPoint = companion.transform.Find("f**k").gameObject;

                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider


                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyCollider,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 15,
                    ManualHeight           = 17,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0
                });
                companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider
                {
                    ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
                    CollisionLayer         = CollisionLayer.EnemyHitBox,
                    IsTrigger = false,
                    BagleUseFirstFrameOnly = false,
                    SpecifyBagelFrame      = string.Empty,
                    BagelColliderNumber    = 0,
                    ManualOffsetX          = 0,
                    ManualOffsetY          = 0,
                    ManualWidth            = 15,
                    ManualHeight           = 17,
                    ManualDiameter         = 0,
                    ManualLeftX            = 0,
                    ManualLeftY            = 0,
                    ManualRightX           = 0,
                    ManualRightY           = 0,
                });
                companion.aiActor.CorpseObject        = EnemyDatabase.GetOrLoadByGuid("1a78cfb776f54641b832e92c44021cf2").CorpseObject;
                companion.aiActor.PreventBlackPhantom = false;
                AIAnimator aiAnimator = companion.aiAnimator;

                prefab.AddAnimation("idle_right", "BunnyMod/Resources/ChaosEnemy/IdleRight/", fps: 4, AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("idle_left", "BunnyMod/Resources/ChaosEnemy/IdleLeft/", fps: 4, AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("move_right", "BunnyMod/Resources/ChaosEnemy/MoveRight/", fps: 4, AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("move_left", "BunnyMod/Resources/ChaosEnemy/MoveLeft/", fps: 4, AnimationType.Move, DirectionalAnimation.DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("death_left", "BunnyMod/Resources/ChaosEnemy/DeathLeft/", fps: 4, AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal);
                prefab.AddAnimation("death_right", "BunnyMod/Resources/ChaosEnemy/DeathRight/", fps: 4, AnimationType.Idle, DirectionalAnimation.DirectionType.TwoWayHorizontal);

                var bs = prefab.GetComponent <BehaviorSpeculator>();
                BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("e21ac9492110493baef6df02a2682a0d").behaviorSpeculator;
                BehaviorSpeculator load = EnemyDatabase.GetOrLoadByGuid("e21ac9492110493baef6df02a2682a0d").behaviorSpeculator;
                bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors;
                bs.OtherBehaviors    = behaviorSpeculator.OtherBehaviors;
                bs.TargetBehaviors   = new List <TargetBehaviorBase>
                {
                    new TargetPlayerBehavior
                    {
                        Radius              = 1000f,
                        LineOfSight         = false,
                        ObjectPermanence    = true,
                        SearchInterval      = 0.25f,
                        PauseOnTargetSwitch = false,
                        PauseTime           = 0.25f
                    }
                };
                bs.MovementBehaviors = new List <MovementBehaviorBase>()
                {
                    new SeekTargetBehavior()
                    {
                        StopWhenInRange     = true,
                        CustomRange         = 6,
                        LineOfSight         = true,
                        ReturnToSpawn       = true,
                        SpawnTetherDistance = 0,
                        PathInterval        = 0.5f,
                        SpecifyRange        = false,
                        MinActiveRange      = 1,
                        MaxActiveRange      = 10
                    }
                };
                bs.AttackBehaviors = new List <AttackBehaviorBase>()
                {
                    new ShootBehavior()
                    {
                        ShootPoint = AttachPoint,

                        //GroupCooldownVariance = 0.2f,
                        //LineOfSight = false,
                        //WeaponType = WeaponType.BulletScript,
                        //OverrideBulletName = null,
                        BulletScript = new CustomBulletScriptSelector(typeof(ChaosAttck)),
                        //FixTargetDuringAttack = false,
                        //StopDuringAttack = false,
                        LeadAmount = 0.7f,
                        //LeadChance = 0.62f,
                        //RespectReload = true,
                        //MagazineCapacity = 1,
                        //ReloadSpeed = 3,
                        //EmptiesClip = true,
                        //SuppressReloadAnim = false,
                        //TimeBetweenShots = 0.5f,
                        PreventTargetSwitching = false,
                        //OverrideAnimation = null,
                        //OverrideDirectionalAnimation = null,
                        HideGun = true,
                        //UseLaserSight = false,
                        //UseGreenLaser = false,
                        //PreFireLaserTime = -1,
                        //AimAtFacingDirectionWhenSafe = false,
                        Cooldown                = 1f,
                        CooldownVariance        = 0,
                        AttackCooldown          = 0,
                        GlobalCooldown          = 0,
                        InitialCooldown         = 0,
                        InitialCooldownVariance = 0,
                        GroupName               = null,
                        GroupCooldown           = 0,
                        MinRange                = 0,
                        Range                      = 16,
                        MinWallDistance            = 0,
                        MaxEnemiesInRoom           = 0,
                        MinHealthThreshold         = 0,
                        MaxHealthThreshold         = 1,
                        HealthThresholds           = new float[0],
                        AccumulateHealthThresholds = true,
                        targetAreaStyle            = null,
                        IsBlackPhantom             = false,
                        resetCooldownOnDamage      = null,
                        RequiresLineOfSight        = false,
                        MaxUsages                  = 0,
                    }
                };


                //Tools.DebugInformation(load);
                AIActor aIActor = EnemyDatabase.GetOrLoadByGuid("e21ac9492110493baef6df02a2682a0d");
                bs.InstantFirstTick                = behaviorSpeculator.InstantFirstTick;
                bs.TickInterval                    = behaviorSpeculator.TickInterval;
                bs.PostAwakenDelay                 = behaviorSpeculator.PostAwakenDelay;
                bs.RemoveDelayOnReinforce          = behaviorSpeculator.RemoveDelayOnReinforce;
                bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection;
                bs.StartingFacingDirection         = behaviorSpeculator.StartingFacingDirection;
                bs.SkipTimingDifferentiator        = behaviorSpeculator.SkipTimingDifferentiator;

                //GameObject m_CachedGunAttachPoint = companion.transform.Find("GunAttachPoint").gameObject;
                //EnemyBuilder.DuplicateAIShooterAndAIBulletBank(prefab, aIActor.aiShooter, aIActor.GetComponent<AIBulletBank>(), ChaosRevolver.ChaosRevolverID, m_CachedGunAttachPoint.transform);
                Game.Enemies.Add("bny:chaos_being", companion.aiActor);
            }
        }