示例#1
0
        public static void SpectreBehav()
        {
            Gun cached_poison = PickupObjectDatabase.GetById(208) as Gun;

            Spectre     = EnemyDatabase.GetOrLoadByGuid("56f5a0f2c1fc4bc78875aea617ee31ac");
            HollowPoint = EnemyDatabase.GetOrLoadByGuid("4db03291a12144d69fe940d5a01de376");
            AIShooter SpecShoot = Spectre.gameObject.AddComponent <AIShooter>();

            Spectre.gameObject.GetComponent <AIShooter>().gunAttachPoint.localPosition += new Vector3(0, 0.2f, 0);
            GameObject targetPoison = Spectre.gameObject;

            Spectre.behaviorSpeculator.AttackBehaviors.Remove(Spectre.behaviorSpeculator.AttackBehaviors[1]);
            Spectre.behaviorSpeculator.AttackBehaviors.Add(HollowPoint.behaviorSpeculator.AttackBehaviors[1]);
            Spectre.CollisionDamage = .5f;
            Spectre.SetIsFlying(true, "ghost", true, true);
            var actor = Spectre.gameActor;

            actor.EffectResistances = new ActorEffectResistance[]
            {
                new ActorEffectResistance()
                {
                    resistAmount = 1,
                    resistType   = EffectResistanceType.Poison
                }
            };

            Spectre.healthHaver.SetHealthMaximum(30);
            Spectre.healthHaver.ForceSetCurrentHealth(30);



            if (cached_poison)
            {
                GoopDoer Gooper = targetPoison.AddComponent <GoopDoer>();
                Gooper.goopDefinition         = cached_poison.singleModule.projectiles[0].gameObject.GetComponent <GoopModifier>().goopDefinition;
                Gooper.positionSource         = GoopDoer.PositionSource.HitBoxCenter;
                Gooper.updateTiming           = GoopDoer.UpdateTiming.Always;
                Gooper.updateFrequency        = 0.05f;
                Gooper.isTimed                = false;
                Gooper.goopTime               = 1;
                Gooper.updateOnDeath          = false;
                Gooper.updateOnPreDeath       = false;
                Gooper.updateOnAnimFrames     = false;
                Gooper.updateOnCollision      = false;
                Gooper.updateOnGrounded       = false;
                Gooper.updateOnDestroy        = false;
                Gooper.defaultGoopRadius      = 1.2f;
                Gooper.suppressSplashes       = false;
                Gooper.goopSizeVaries         = false;
                Gooper.varyCycleTime          = 0.9f;
                Gooper.radiusMax              = 1.2f;
                Gooper.radiusMin              = 1.2f;
                Gooper.goopSizeRandom         = false;
                Gooper.UsesDispersalParticles = false;
                Gooper.DispersalDensity       = 3;
                Gooper.DispersalMinCoherency  = 0.2f;
                Gooper.DispersalMaxCoherency  = 1;
            }
        }
 public void Start()
 {
     if (!m_configured)
     {
         ConfigureOnPlacement(GameManager.Instance.Dungeon.data.GetAbsoluteRoomFromPosition(transform.position.IntXY(VectorConversions.Ceil)));
     }
     if (ChaosConsole.GlitchEnemies | ChaosConsole.GlitchEverything)
     {
         if (UnityEngine.Random.value <= m_GlitchOdds)
         {
             m_GlitchModeActive = true;
         }
     }
     transform.position = m_startingPos;
     specRigidbody.Reinitialize();
     aiAnimator.LockFacingDirection = true;
     aiAnimator.FacingDirection     = DungeonData.GetAngleFromDirection(m_facingDirection);
     if (!m_failedWallConfigure)
     {
         m_fakeWall = ChaosUtility.GenerateWallMesh(m_facingDirection, pos1, "Mimic Wall", null, true, m_GlitchModeActive);
         if (aiActor.ParentRoom != null)
         {
             m_fakeWall.transform.parent = aiActor.ParentRoom.hierarchyParent;
         }
         m_fakeWall.transform.position = pos1.ToVector3().WithZ(pos1.y - 2) + Vector3.down;
         if (m_facingDirection == DungeonData.Direction.SOUTH)
         {
             StaticReferenceManager.AllShadowSystemDepthHavers.Add(m_fakeWall.transform);
         }
         else if (m_facingDirection == DungeonData.Direction.WEST)
         {
             m_fakeWall.transform.position = m_fakeWall.transform.position + new Vector3(-0.1875f, 0f);
         }
         m_fakeCeiling = ChaosUtility.GenerateRoomCeilingMesh(GetCeilingTileSet(pos1, pos2, m_facingDirection), "Mimic Ceiling", null, true, m_GlitchModeActive);
         if (aiActor.ParentRoom != null)
         {
             m_fakeCeiling.transform.parent = aiActor.ParentRoom.hierarchyParent;
         }
         m_fakeCeiling.transform.position = pos1.ToVector3().WithZ(pos1.y - 4);
         if (m_facingDirection == DungeonData.Direction.NORTH)
         {
             m_fakeCeiling.transform.position += new Vector3(-1f, 0f);
         }
         else if (m_facingDirection == DungeonData.Direction.SOUTH)
         {
             m_fakeCeiling.transform.position += new Vector3(-1f, 2f);
         }
         else if (m_facingDirection == DungeonData.Direction.EAST)
         {
             m_fakeCeiling.transform.position += new Vector3(-1f, 0f);
         }
         m_fakeCeiling.transform.position = m_fakeCeiling.transform.position.WithZ(m_fakeCeiling.transform.position.y - 5f);
         for (int i = 0; i < specRigidbody.PixelColliders.Count; i++)
         {
             specRigidbody.PixelColliders[i].Enabled = false;
         }
         if (m_facingDirection == DungeonData.Direction.NORTH)
         {
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 38, 38, 32, 8, true));
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 38, 54, 32, 8, true));
         }
         else if (m_facingDirection == DungeonData.Direction.SOUTH)
         {
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 38, 38, 32, 16, true));
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 38, 54, 32, 16, true));
         }
         else if (m_facingDirection == DungeonData.Direction.WEST || m_facingDirection == DungeonData.Direction.EAST)
         {
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.LowObstacle, 46, 38, 16, 32, true));
             specRigidbody.PixelColliders.Add(PixelCollider.CreateRectangle(CollisionLayer.HighObstacle, 46, 38, 16, 32, true));
         }
         specRigidbody.ForceRegenerate(null, null);
     }
     aiActor.HasDonePlayerEnterCheck    = true;
     m_collisionKnockbackStrength       = aiActor.CollisionKnockbackStrength;
     aiActor.CollisionKnockbackStrength = 0f;
     aiActor.CollisionDamage            = 0f;
     m_goopDoer = GetComponent <GoopDoer>();
 }
        private void Start()
        {
            sprite.HeightOffGround = -7;
            sprite.UpdateZDepth();

            ExpandObjectDatabase objectDatabase = new ExpandObjectDatabase();

            Vector3 NoteSpawnPoint = (new Vector3(7, 3) + m_ParentRoom.area.basePosition.ToVector3());

            GameObject DeadGuyNote = Instantiate(ExpandPrefabs.PlayerLostRatNote, NoteSpawnPoint, Quaternion.identity);

            NoteDoer DeadGuyNoteComponent = DeadGuyNote.GetComponent <NoteDoer>();

            if (DeadGuyNoteComponent != null)
            {
                DeadGuyNoteComponent.stringKey            = "We shipwrecked chasing a terrible monster.\n\nManaged to lure and trap it in this weird dungeon full of living bullets...\n\nAlas, I could not slay the beast but managed to trap it in this chamber. I used a teleporter prototype to teleport the key to this chamber far away.\n\nI don't know where it ended up, but I hope no one finds it.";
                DeadGuyNoteComponent.useAdditionalStrings = false;
                DeadGuyNoteComponent.alreadyLocalized     = true;
                DeadGuyNoteComponent.name = "Dead Man's Note";
                m_ParentRoom.RegisterInteractable(DeadGuyNoteComponent);
            }

            Gun m_CachedMutantArmGun = (PickupObjectDatabase.GetById(333) as Gun);


            GameObject m_GoopInstance1 = new GameObject("Bloodstain 1", typeof(tk2dSprite))
            {
                layer = 0
            };
            GameObject m_GoopInstance2 = new GameObject("Bloodstain 2", typeof(tk2dSprite))
            {
                layer = 0
            };
            GameObject m_GoopInstance3 = new GameObject("Bloodstain 3", typeof(tk2dSprite))
            {
                layer = 0
            };
            GameObject m_GoopInstance4 = new GameObject("Bloodstain 4", typeof(tk2dSprite))
            {
                layer = 0
            };
            GameObject m_GoopInstance5 = new GameObject("Bloodstain 5", typeof(tk2dSprite))
            {
                layer = 0
            };
            GameObject m_GoopInstance6 = new GameObject("Bloodstain 6", typeof(tk2dSprite))
            {
                layer = 0
            };

            m_GoopInstance1.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(13, 2));
            m_GoopInstance2.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(33, 5));
            m_GoopInstance3.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(40, 2));
            m_GoopInstance4.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(48, 3));
            m_GoopInstance5.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(57, 5));
            m_GoopInstance6.transform.position = (m_ParentRoom.area.basePosition.ToVector3() + new Vector3(58, 2));
            m_GoopInstance1.transform.parent   = m_ParentRoom.hierarchyParent;
            m_GoopInstance2.transform.parent   = m_ParentRoom.hierarchyParent;
            m_GoopInstance3.transform.parent   = m_ParentRoom.hierarchyParent;
            m_GoopInstance4.transform.parent   = m_ParentRoom.hierarchyParent;
            m_GoopInstance5.transform.parent   = m_ParentRoom.hierarchyParent;
            m_GoopInstance6.transform.parent   = m_ParentRoom.hierarchyParent;


            GoopDoer[] m_BloodGoopDoers = new GoopDoer[] {
                m_GoopInstance1.AddComponent <GoopDoer>(),
                m_GoopInstance2.AddComponent <GoopDoer>(),
                m_GoopInstance3.AddComponent <GoopDoer>(),
                m_GoopInstance4.AddComponent <GoopDoer>(),
                m_GoopInstance5.AddComponent <GoopDoer>(),
                m_GoopInstance6.AddComponent <GoopDoer>()
            };

            tk2dSprite[] m_DummySprites = new tk2dSprite[] {
                m_GoopInstance1.GetComponent <tk2dSprite>(),
                m_GoopInstance2.GetComponent <tk2dSprite>(),
                m_GoopInstance3.GetComponent <tk2dSprite>(),
                m_GoopInstance4.GetComponent <tk2dSprite>(),
                m_GoopInstance5.GetComponent <tk2dSprite>(),
                m_GoopInstance6.GetComponent <tk2dSprite>(),
            };

            foreach (tk2dSprite sprite in m_DummySprites)
            {
                sprite.Collection = m_CachedMutantArmGun.sprite.Collection;
                sprite.SetSprite(0);
                sprite.renderer.enabled = false;
            }


            foreach (GoopDoer goop in m_BloodGoopDoers)
            {
                goop.goopDefinition         = m_CachedMutantArmGun.singleModule.projectiles[0].gameObject.GetComponent <GoopModifier>().goopDefinition;
                goop.positionSource         = GoopDoer.PositionSource.SpriteCenter;
                goop.updateTiming           = GoopDoer.UpdateTiming.Always;
                goop.updateFrequency        = 0.05f;
                goop.isTimed                = false;
                goop.goopTime               = 1;
                goop.updateOnPreDeath       = true;
                goop.updateOnDeath          = false;
                goop.updateOnAnimFrames     = true;
                goop.updateOnCollision      = false;
                goop.updateOnGrounded       = false;
                goop.updateOnDestroy        = false;
                goop.defaultGoopRadius      = 1;
                goop.suppressSplashes       = false;
                goop.goopSizeVaries         = true;
                goop.varyCycleTime          = 0.9f;
                goop.radiusMin              = UnityEngine.Random.Range(0.8f, 1);
                goop.radiusMax              = UnityEngine.Random.Range(1.25f, 1.6f);
                goop.goopSizeRandom         = true;
                goop.UsesDispersalParticles = false;
                goop.DispersalDensity       = 3;
                goop.DispersalMinCoherency  = 0.2f;
                goop.DispersalMaxCoherency  = 1;
            }
        }