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; } }