private void TakeItem(PlayerController player) { if (PickupObjectDatabase.GetById(ItemID) && (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite) != null && player.HasPassiveItem(ItemID)) { m_Interacted = true; } else { return; } GameObject m_SubSpriteObject = new GameObject("Item Display Object", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; m_SubSpriteObject.transform.position = (transform.position + new Vector3(0.35f, 1.3f)); ExpandUtility.DuplicateSprite(m_SubSpriteObject.GetComponent <tk2dSprite>(), (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite)); if (m_ParentRoom != null) { m_SubSpriteObject.transform.parent = m_ParentRoom.hierarchyParent; } m_SubSpriteObject.GetComponent <tk2dSprite>().HeightOffGround = 3f; m_SubSpriteObject.GetComponent <tk2dSprite>().UpdateZDepth(); player.RemovePassiveItem(ItemID); if (m_TargetDoor && m_TargetDoor.GetComponent <tk2dSpriteAnimator>() && m_TargetDoor.GetComponent <SpeculativeRigidbody>()) { AkSoundEngine.PostEvent("Play_OBJ_plate_press_01", gameObject); StartCoroutine(DelayedDoorOpen(m_TargetDoor)); } SpriteOutlineManager.RemoveOutlineFromSprite(sprite, false); }
public static void Init(AssetBundle expandSharedAssets1) { m_BlinkPassive = PickupObjectDatabase.GetById(436).GetComponent <BlinkPassiveItem>(); if (!m_BlinkPassive) { return; } EXRedScarfObject = expandSharedAssets1.LoadAsset <GameObject>("Bloodied Scarf"); EXRedScarfObject.AddComponent <ExpandRedScarf>(); EXRedScarfObject.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(EXRedScarfObject.GetComponent <tk2dSprite>(), m_BlinkPassive.GetComponent <tk2dSprite>()); ExpandRedScarf redScarf = EXRedScarfObject.GetComponent <ExpandRedScarf>(); ItemBuilder.SetupItem(redScarf, "Blink Away", "Dodge roll is augmented with a blink\n\nThis simple scarf was once worn by a skilled assassin. Betrayed by his brothers and assumed dead...", "ex"); ItemBuilder.AddPassiveStatModifier(redScarf, PlayerStats.StatType.ReloadSpeed, 1.3f, StatModifier.ModifyMethod.MULTIPLICATIVE); // redScarf.PickupObjectId = m_BlinkPassive.PickupObjectId; redScarf.itemName = "Red Bandana"; redScarf.PickupObjectId = 436; redScarf.quality = m_BlinkPassive.quality; if (!ExpandSettings.EnableEXItems) { redScarf.quality = ItemQuality.EXCLUDED; } redScarf.additionalMagnificenceModifier = m_BlinkPassive.additionalMagnificenceModifier; redScarf.ItemSpansBaseQualityTiers = m_BlinkPassive.ItemSpansBaseQualityTiers; redScarf.ItemRespectsHeartMagnificence = m_BlinkPassive.ItemRespectsHeartMagnificence; redScarf.associatedItemChanceMods = m_BlinkPassive.associatedItemChanceMods; redScarf.contentSource = m_BlinkPassive.contentSource; redScarf.ShouldBeExcludedFromShops = m_BlinkPassive.ShouldBeExcludedFromShops; redScarf.CanBeDropped = m_BlinkPassive.CanBeDropped; redScarf.PreventStartingOwnerFromDropping = m_BlinkPassive.PreventStartingOwnerFromDropping; redScarf.PersistsOnDeath = m_BlinkPassive.PersistsOnDeath; redScarf.RespawnsIfPitfall = m_BlinkPassive.RespawnsIfPitfall; redScarf.PreventStartingOwnerFromDropping = m_BlinkPassive.PreventStartingOwnerFromDropping; redScarf.IgnoredByRat = m_BlinkPassive.IgnoredByRat; redScarf.SaveFlagToSetOnAcquisition = m_BlinkPassive.SaveFlagToSetOnAcquisition; redScarf.ForcedPositionInAmmonomicon = m_BlinkPassive.ForcedPositionInAmmonomicon; redScarf.UsesCustomCost = m_BlinkPassive.UsesCustomCost; redScarf.CustomCost = m_BlinkPassive.CustomCost; redScarf.PersistsOnPurchase = m_BlinkPassive.PersistsOnPurchase; redScarf.CanBeSold = m_BlinkPassive.CanBeSold; redScarf.passiveStatModifiers = m_BlinkPassive.passiveStatModifiers; redScarf.ArmorToGainOnInitialPickup = m_BlinkPassive.ArmorToGainOnInitialPickup; redScarf.minimapIcon = m_BlinkPassive.minimapIcon; redScarf.DodgeRollTimeMultiplier = m_BlinkPassive.DodgeRollTimeMultiplier; redScarf.DodgeRollDistanceMultiplier = m_BlinkPassive.DodgeRollDistanceMultiplier; redScarf.AdditionalInvulnerabilityFrames = m_BlinkPassive.AdditionalInvulnerabilityFrames; redScarf.ScarfPrefab = m_BlinkPassive.ScarfPrefab; redScarf.BlinkpoofVfx = m_BlinkPassive.BlinkpoofVfx; // Try to prevent original item from showing up. (can still be accessed via MTG console's give command however) if (ExpandSettings.EnableEXItems) { m_BlinkPassive.quality = ItemQuality.EXCLUDED; } }
private void OnFireStarted() { IntVector2 baseCellPosition = (transform.position.IntXY(VectorConversions.Floor) + new IntVector2(4, 2)); for (int X = -1; X < 2; X++) { for (int Y = -1; Y < 2; Y++) { IntVector2 PositionOffset = baseCellPosition + new IntVector2(X, Y); CellData cellData = GameManager.Instance.Dungeon.data[PositionOffset]; if (cellData != null) { cellData.OnCellGooped = (Action <CellData>)Delegate.Remove(cellData.OnCellGooped, new Action <CellData>(HandleGooped)); } } } specRigidbody.OnRigidbodyCollision = (SpeculativeRigidbody.OnRigidbodyCollisionDelegate)Delegate.Remove(specRigidbody.OnRigidbodyCollision, new SpeculativeRigidbody.OnRigidbodyCollisionDelegate(HandleCollision)); // specRigidbody.OnHitByBeam = (Action<BasicBeamController>)Delegate.Remove(specRigidbody.OnHitByBeam, new Action<BasicBeamController>(HandleBeamCollision)); GameObject PitManager = new GameObject("Jungle Pit Manager") { layer = 0 }; PitManager.transform.position = (transform.position + new Vector3(5, 2)); tk2dSprite PitDummySprite = PitManager.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(PitDummySprite, ExpandSecretDoorPrefabs.EXSecretDoorMinimapIcon.GetComponent <tk2dSprite>()); tk2dSprite pitSprite = PitManager.GetComponent <tk2dSprite>(); pitSprite.renderer.enabled = false; ExpandUtility.GenerateOrAddToRigidBody(PitManager, CollisionLayer.Trap, PixelCollider.PixelColliderGeneration.Manual, IsTrigger: true, dimensions: new IntVector2(2, 2)); JungleTreePitController junglePitManager = PitManager.AddComponent <JungleTreePitController>(); junglePitManager.targetLevelName = targetLevelName; StartCoroutine(HandleDelayedFireDamage()); }
public void ConfigureOnPlacement(RoomHandler room) { m_ParentRoom = room; if (PickupObjectDatabase.GetById(ItemID) && (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite) != null) { m_SubSpriteObject = new GameObject("Item Display Object", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; m_SubSpriteObject.transform.position = (transform.position + new Vector3(0.95f, 1)); m_ItemSprite = m_SubSpriteObject.GetComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(m_ItemSprite, (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite)); if (m_ParentRoom != null) { m_SubSpriteObject.transform.parent = m_ParentRoom.hierarchyParent; } if (AddOutline) { SpriteOutlineManager.AddOutlineToSprite(m_ItemSprite, BaseOutlineColor, 0.1f, 0f, SpriteOutlineManager.OutlineType.NORMAL); } } sprite.HeightOffGround = -2; if (m_ItemSprite) { sprite.AttachRenderer(m_ItemSprite); if (AddOutline) { SpriteOutlineManager.AddOutlineToSprite(m_ItemSprite, BaseOutlineColor, 0.1f, 0f, SpriteOutlineManager.OutlineType.NORMAL); } m_ItemSprite.HeightOffGround = 0.5f; m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.UpdateZDepth(); } sprite.UpdateZDepth(); }
public static void InitPrefabs(AssetBundle expandSharedAssets1) { EXSecretDoorAnimation = expandSharedAssets1.LoadAsset <GameObject>("EX_SecretDoor_Animation"); tk2dSpriteAnimation DoorSpriteAnimations = EXSecretDoorAnimation.AddComponent <tk2dSpriteAnimation>(); ExpandUtility.AddAnimation(DoorSpriteAnimations, ExpandPrefabs.EXSecretDoorCollection.GetComponent <tk2dSpriteCollectionData>(), m_DoorOpenSprites, "door_open", frameRate: 10); ExpandUtility.AddAnimation(DoorSpriteAnimations, ExpandPrefabs.EXSecretDoorCollection.GetComponent <tk2dSpriteCollectionData>(), m_DoorCloseSprites, "door_close", frameRate: 10); EXSecretDoorMinimapIcon = expandSharedAssets1.LoadAsset <GameObject>("EXSecretDoor_MinimapIcon"); SpriteSerializer.AddSpriteToObject(EXSecretDoorMinimapIcon, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_MinimapIcon"); EXSecretDoor_Hollow = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Hollow"); GameObject EXSecretDoorHollow_Frame_Top = EXSecretDoor_Hollow.transform.Find("FrameTop").gameObject; GameObject EXSecretDoorHollow_Frame_Bottom = EXSecretDoor_Hollow.transform.Find("FrameBottom").gameObject; GameObject EXSecretDoorHollow_Background = EXSecretDoor_Hollow.transform.Find("Background").gameObject; GameObject EXSecretDoorHollow_Light = EXSecretDoor_Hollow.transform.Find("Light").gameObject; GameObject EXSecretDoorHollow_Lock = EXSecretDoor_Hollow.transform.Find("Lock").gameObject; tk2dSprite m_DoorHollowSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Hollow, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00"); tk2dSprite m_DoorHollowBorderTopSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top"); tk2dSprite m_DoorHollowBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom"); tk2dSprite m_DoorHollowBackgroundSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background"); tk2dSprite m_DoorHollowLightSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollow_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red"); m_DoorHollowBorderTopSprite.HeightOffGround = 3; m_DoorHollowBorderBottomSprite.HeightOffGround = -0.5f; m_DoorHollowSprite.HeightOffGround = -1.5f; m_DoorHollowBackgroundSprite.HeightOffGround = -2f; m_DoorHollowLightSprite.HeightOffGround = 3.5f; ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Hollow, DoorSpriteAnimations, ClipFps: 10); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12)); ExpandSecretDoorPlacable m_SecretDoorHollowComponent = EXSecretDoor_Hollow.AddComponent <ExpandSecretDoorPlacable>(); m_SecretDoorHollowComponent.DoorTopBorderObject = EXSecretDoorHollow_Frame_Top; m_SecretDoorHollowComponent.DoorBottomBorderObject = EXSecretDoorHollow_Frame_Bottom; m_SecretDoorHollowComponent.DoorBackgroundObject = EXSecretDoorHollow_Background; m_SecretDoorHollowComponent.DoorLightObject = EXSecretDoorHollow_Light; GameObject m_RatLock = ExpandPrefabs.RatJailDoor.GetComponent <InteractableDoorController>().WorldLocks[0].gameObject; tk2dSprite EXLockSprite = EXSecretDoorHollow_Lock.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(EXLockSprite, m_RatLock.GetComponent <tk2dSprite>()); ExpandUtility.DuplicateSpriteAnimator(EXSecretDoorHollow_Lock, m_RatLock.GetComponent <tk2dSpriteAnimator>()); EXLockSprite.HeightOffGround = -0.3f; InteractableLock m_EXLockHollow = EXSecretDoorHollow_Lock.AddComponent <InteractableLock>(); m_EXLockHollow.Suppress = m_RatLock.GetComponent <InteractableLock>().Suppress; m_EXLockHollow.lockMode = InteractableLock.InteractableLockMode.RESOURCEFUL_RAT; m_EXLockHollow.JailCellKeyId = m_RatLock.GetComponent <InteractableLock>().JailCellKeyId; m_EXLockHollow.IdleAnimName = m_RatLock.GetComponent <InteractableLock>().IdleAnimName; m_EXLockHollow.UnlockAnimName = m_RatLock.GetComponent <InteractableLock>().UnlockAnimName; m_EXLockHollow.NoKeyAnimName = m_RatLock.GetComponent <InteractableLock>().NoKeyAnimName; m_EXLockHollow.SpitAnimName = m_RatLock.GetComponent <InteractableLock>().SpitAnimName; m_EXLockHollow.BustedAnimName = m_RatLock.GetComponent <InteractableLock>().BustedAnimName; m_SecretDoorHollowComponent.Lock = m_EXLockHollow; EXSecretDoor_Hollow.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); EXSecretDoor_Hollow_Unlocked = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Hollow_Unlocked"); GameObject EXSecretDoorHollowUnlocked_Frame_Top = EXSecretDoor_Hollow_Unlocked.transform.Find("FrameTop").gameObject; GameObject EXSecretDoorHollowUnlocked_Frame_Bottom = EXSecretDoor_Hollow_Unlocked.transform.Find("FrameBottom").gameObject; GameObject EXSecretDoorHollowUnlocked_Background = EXSecretDoor_Hollow_Unlocked.transform.Find("Background").gameObject; GameObject EXSecretDoorHollowUnlocked_Light = EXSecretDoor_Hollow_Unlocked.transform.Find("Light").gameObject; tk2dSprite m_DoorHollow_UnlockedSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Hollow_Unlocked, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00"); tk2dSprite m_DoorHollow_UnlockedBorderTopSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top"); tk2dSprite m_DoorHollow_UnlockedBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom"); tk2dSprite m_DoorHollow_UnlockedBackgroundSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background"); tk2dSprite m_DoorHollow_UnlockedLightSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorHollowUnlocked_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red"); m_DoorHollow_UnlockedBorderTopSprite.HeightOffGround = 3; m_DoorHollow_UnlockedBorderBottomSprite.HeightOffGround = -0.5f; m_DoorHollow_UnlockedSprite.HeightOffGround = -1.5f; m_DoorHollow_UnlockedBackgroundSprite.HeightOffGround = -2f; m_DoorHollow_UnlockedLightSprite.HeightOffGround = 3.5f; ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Hollow_Unlocked, DoorSpriteAnimations, ClipFps: 10); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Hollow_Unlocked, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12)); ExpandSecretDoorPlacable m_SecretDoorHollow_UnlockedComponent = EXSecretDoor_Hollow_Unlocked.AddComponent <ExpandSecretDoorPlacable>(); m_SecretDoorHollow_UnlockedComponent.DoorTopBorderObject = EXSecretDoorHollowUnlocked_Frame_Top; m_SecretDoorHollow_UnlockedComponent.DoorBottomBorderObject = EXSecretDoorHollowUnlocked_Frame_Bottom; m_SecretDoorHollow_UnlockedComponent.DoorBackgroundObject = EXSecretDoorHollowUnlocked_Background; m_SecretDoorHollow_UnlockedComponent.DoorLightObject = EXSecretDoorHollowUnlocked_Light; EXSecretDoor_Hollow_Unlocked.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); EXSecretDoor = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door"); GameObject EXSecretDoor_Frame_Top = EXSecretDoor.transform.Find("FrameTop").gameObject; GameObject EXSecretDoor_Frame_Bottom = EXSecretDoor.transform.Find("FrameBottom").gameObject; GameObject EXSecretDoor_Background = EXSecretDoor.transform.Find("Background").gameObject; GameObject EXSecretDoor_Light = EXSecretDoor.transform.Find("Light").gameObject; GameObject EXSecretDoor_Lock = EXSecretDoor.transform.Find("Lock").gameObject; tk2dSprite m_DoorSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00"); tk2dSprite m_DoorBorderTopSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_NoDecal_Top"); tk2dSprite m_DoorBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom"); tk2dSprite m_DoorBackgroundSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background"); tk2dSprite m_DoorLightSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red"); m_DoorBorderTopSprite.HeightOffGround = 3; m_DoorBorderBottomSprite.HeightOffGround = -0.5f; m_DoorSprite.HeightOffGround = -1.5f; m_DoorBackgroundSprite.HeightOffGround = -2f; m_DoorLightSprite.HeightOffGround = 3.5f; ExpandUtility.GenerateSpriteAnimator(EXSecretDoor, DoorSpriteAnimations, ClipFps: 10); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12)); ExpandSecretDoorPlacable m_SecretDoorComponent = EXSecretDoor.AddComponent <ExpandSecretDoorPlacable>(); m_SecretDoorComponent.DoorTopBorderObject = EXSecretDoor_Frame_Top; m_SecretDoorComponent.DoorBottomBorderObject = EXSecretDoor_Frame_Bottom; m_SecretDoorComponent.DoorBackgroundObject = EXSecretDoor_Background; m_SecretDoorComponent.DoorLightObject = EXSecretDoor_Light; Dungeon Base_Castle = DungeonDatabase.GetOrLoadByName("Base_Castle"); GameObject m_NormalLock = (Base_Castle.PatternSettings.flows[0].sharedInjectionData[1].InjectionData[0].exactRoom.placedObjects[0].nonenemyBehaviour as SecretFloorInteractableController).WorldLocks[0].gameObject; tk2dSprite EXLockNormalSprite = EXSecretDoor_Lock.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(EXLockNormalSprite, m_NormalLock.GetComponent <tk2dSprite>()); ExpandUtility.DuplicateSpriteAnimator(EXSecretDoor_Lock, m_NormalLock.GetComponent <tk2dSpriteAnimator>()); EXLockNormalSprite.HeightOffGround = 1.7f; InteractableLock m_EXLockNormal = EXSecretDoor_Lock.AddComponent <InteractableLock>(); m_EXLockNormal.Suppress = m_NormalLock.GetComponent <InteractableLock>().Suppress; m_EXLockNormal.lockMode = m_NormalLock.GetComponent <InteractableLock>().lockMode; m_EXLockNormal.JailCellKeyId = m_NormalLock.GetComponent <InteractableLock>().JailCellKeyId; m_EXLockNormal.IdleAnimName = m_NormalLock.GetComponent <InteractableLock>().IdleAnimName; m_EXLockNormal.UnlockAnimName = m_NormalLock.GetComponent <InteractableLock>().UnlockAnimName; m_EXLockNormal.NoKeyAnimName = m_NormalLock.GetComponent <InteractableLock>().NoKeyAnimName; m_EXLockNormal.SpitAnimName = m_NormalLock.GetComponent <InteractableLock>().SpitAnimName; m_EXLockNormal.BustedAnimName = m_NormalLock.GetComponent <InteractableLock>().BustedAnimName; m_SecretDoorComponent.Lock = m_EXLockNormal; EXSecretDoor.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); Base_Castle = null; m_NormalLock = null; EXSecretDoor_Unlocked = expandSharedAssets1.LoadAsset <GameObject>("EX_Secret_Door_Unlocked"); GameObject EXSecretDoorUnlocked_Frame_Top = EXSecretDoor_Unlocked.transform.Find("FrameTop").gameObject; GameObject EXSecretDoorUnlocked_Frame_Bottom = EXSecretDoor_Unlocked.transform.Find("FrameBottom").gameObject; GameObject EXSecretDoorUnlocked_Background = EXSecretDoor_Unlocked.transform.Find("Background").gameObject; GameObject EXSecretDoorUnlocked_Light = EXSecretDoor_Unlocked.transform.Find("Light").gameObject; tk2dSprite m_Door_UnlockedSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoor_Unlocked, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Open_00"); tk2dSprite m_Door_UnlockedBorderTopSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Frame_Top, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Top"); tk2dSprite m_Door_UnlockedBorderBottomSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Frame_Bottom, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Frame_Bottom"); tk2dSprite m_Door_UnlockedBackgroundSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Background, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Background"); tk2dSprite m_Door_UnlockedLightSprite = SpriteSerializer.AddSpriteToObject(EXSecretDoorUnlocked_Light, ExpandPrefabs.EXSecretDoorCollection, "EXSecretDoor_Light_Red"); m_Door_UnlockedBorderTopSprite.HeightOffGround = 3; m_Door_UnlockedBorderBottomSprite.HeightOffGround = -0.5f; m_Door_UnlockedSprite.HeightOffGround = -1.5f; m_Door_UnlockedBackgroundSprite.HeightOffGround = -2f; m_Door_UnlockedLightSprite.HeightOffGround = 3.5f; ExpandUtility.GenerateSpriteAnimator(EXSecretDoor_Unlocked, DoorSpriteAnimations, ClipFps: 10); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor_Unlocked, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12)); ExpandSecretDoorPlacable m_SecretDoor_UnlockedComponent = EXSecretDoor_Unlocked.AddComponent <ExpandSecretDoorPlacable>(); m_SecretDoor_UnlockedComponent.DoorTopBorderObject = EXSecretDoorUnlocked_Frame_Top; m_SecretDoor_UnlockedComponent.DoorBottomBorderObject = EXSecretDoorUnlocked_Frame_Bottom; m_SecretDoor_UnlockedComponent.DoorBackgroundObject = EXSecretDoorUnlocked_Background; m_SecretDoor_UnlockedComponent.DoorLightObject = EXSecretDoorUnlocked_Light; EXSecretDoor_Unlocked.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); }
public static void InitPrefabs(AssetBundle expandSharedAssets1) { List <string> m_DoorOpenSprites = new List <string>() { "EXSecretDoor_Open_00", "EXSecretDoor_Open_01", "EXSecretDoor_Open_02", "EXSecretDoor_Open_03", "EXSecretDoor_Open_04", "EXSecretDoor_Open_05", "EXSecretDoor_Open_06", "EXSecretDoor_Open_07" }; List <string> m_DoorCloseSprites = new List <string>() { "EXSecretDoor_Close_00", "EXSecretDoor_Close_01", "EXSecretDoor_Close_02", "EXSecretDoor_Close_03", "EXSecretDoor_Close_04", "EXSecretDoor_Close_05", "EXSecretDoor_Close_06", "EXSecretDoor_Close_07", }; EXSecretDoorMinimapIcon = expandSharedAssets1.LoadAsset <GameObject>("EXSecretDoor_MinimapIcon"); ItemBuilder.AddSpriteToObject(EXSecretDoorMinimapIcon, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_MinimapIcon"), false, false); EXSecretDoor = expandSharedAssets1.LoadAsset <GameObject>("EX Secret Door Entrance"); EXSecretDoor_Frame_Top = EXSecretDoor.transform.Find("EX Secret Door Top").gameObject; EXSecretDoor_Frame_Bottom = EXSecretDoor.transform.Find("EX Secret Door Bottom").gameObject; EXSecretDoor_Background = EXSecretDoor.transform.Find("EX Secret Door Background").gameObject; EXSecretDoor_Light = EXSecretDoor.transform.Find("EX Secret Door Light").gameObject; EXSecretDoor_Frame_Top.layer = LayerMask.NameToLayer("FG_Critical"); EXSecretDoor_Frame_Bottom.layer = LayerMask.NameToLayer("FG_Critical"); EXSecretDoor_Background.layer = LayerMask.NameToLayer("FG_Critical"); EXSecretDoor_Light.layer = LayerMask.NameToLayer("FG_Critical"); EXSecretDoor_Frame_Top.transform.parent = EXSecretDoor.transform; EXSecretDoor_Frame_Bottom.transform.parent = EXSecretDoor.transform; EXSecretDoor_Background.transform.parent = EXSecretDoor.transform; EXSecretDoor_Light.transform.parent = EXSecretDoor.transform; ItemBuilder.AddSpriteToObject(EXSecretDoor, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Open_00"), false, false); ItemBuilder.AddSpriteToObject(EXSecretDoor_Frame_Top, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_Top"), false, false); ItemBuilder.AddSpriteToObject(EXSecretDoor_Frame_Bottom, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_Bottom"), false, false); ItemBuilder.AddSpriteToObject(EXSecretDoor_Background, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Background"), false, false); ItemBuilder.AddSpriteToObject(EXSecretDoor_Light, expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Light_Red"), false, false); tk2dSprite m_DoorBorderTopSprite = EXSecretDoor_Frame_Top.GetComponent <tk2dSprite>(); m_DoorBorderTopSprite.HeightOffGround = 3; SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Frame_NoDecal_Top"), m_DoorBorderTopSprite.Collection); tk2dSprite m_DoorBorderBottomSprite = EXSecretDoor_Frame_Bottom.GetComponent <tk2dSprite>(); m_DoorBorderBottomSprite.HeightOffGround = -0.5f; tk2dSprite m_DoorSprite = EXSecretDoor.GetComponent <tk2dSprite>(); m_DoorSprite.HeightOffGround = -1.5f; tk2dSprite m_DoorBackgroundSprite = EXSecretDoor_Background.GetComponent <tk2dSprite>(); m_DoorBackgroundSprite.HeightOffGround = -2f; tk2dSprite m_DoorLightSprite = EXSecretDoor_Light.GetComponent <tk2dSprite>(); m_DoorLightSprite.HeightOffGround = 3.5f; SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("EXSecretDoor_Light_Green"), m_DoorLightSprite.Collection); foreach (string spriteName in m_DoorOpenSprites) { if (spriteName != "EXSecretDoor_Open_00") { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spriteName), m_DoorSprite.Collection); } } foreach (string spriteName in m_DoorCloseSprites) { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spriteName), m_DoorSprite.Collection); } ExpandUtility.GenerateSpriteAnimator(EXSecretDoor, ClipFps: 10); tk2dSpriteAnimator m_DoorAnimator = EXSecretDoor.GetComponent <tk2dSpriteAnimator>(); ExpandUtility.AddAnimation(m_DoorAnimator, m_DoorSprite.Collection, m_DoorOpenSprites, "door_open", frameRate: 10); ExpandUtility.AddAnimation(m_DoorAnimator, m_DoorSprite.Collection, m_DoorCloseSprites, "door_close", frameRate: 10); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 64), offset: new IntVector2(16, 0)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 14)); ExpandUtility.GenerateOrAddToRigidBody(EXSecretDoor, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, CanBeCarried: false, IsTrigger: true, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(32, 32), offset: new IntVector2(16, 12)); ExpandSecretDoorPlacable m_SecretDoorComponent = EXSecretDoor.AddComponent <ExpandSecretDoorPlacable>(); m_SecretDoorComponent.DoorTopBorderObject = EXSecretDoor_Frame_Top; m_SecretDoorComponent.DoorBottomBorderObject = EXSecretDoor_Frame_Bottom; m_SecretDoorComponent.DoorBackgroundObject = EXSecretDoor_Background; m_SecretDoorComponent.DoorLightObject = EXSecretDoor_Light; GameObject m_RatLock = ExpandPrefabs.RatJailDoorPlacable.gameObject.GetComponent <InteractableDoorController>().WorldLocks[0].gameObject; EXSecretDoor_Lock = EXSecretDoor.transform.Find("EX Secret Door Lock").gameObject; tk2dSprite EXLockSprite = EXSecretDoor_Lock.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(EXLockSprite, m_RatLock.GetComponent <tk2dSprite>()); EXLockSprite.HeightOffGround = -0.3f; tk2dSpriteAnimator m_EXLockAnimator = ExpandUtility.DuplicateSpriteAnimator(EXSecretDoor_Lock, m_RatLock.GetComponent <tk2dSpriteAnimator>(), true); InteractableLock m_EXLock = EXSecretDoor_Lock.AddComponent <InteractableLock>(); m_EXLock.Suppress = m_RatLock.GetComponent <InteractableLock>().Suppress; m_EXLock.lockMode = InteractableLock.InteractableLockMode.RESOURCEFUL_RAT; m_EXLock.JailCellKeyId = m_RatLock.GetComponent <InteractableLock>().JailCellKeyId; m_EXLock.IdleAnimName = m_RatLock.GetComponent <InteractableLock>().IdleAnimName; m_EXLock.UnlockAnimName = m_RatLock.GetComponent <InteractableLock>().UnlockAnimName; m_EXLock.NoKeyAnimName = m_RatLock.GetComponent <InteractableLock>().NoKeyAnimName; m_EXLock.SpitAnimName = m_RatLock.GetComponent <InteractableLock>().SpitAnimName; m_EXLock.BustedAnimName = m_RatLock.GetComponent <InteractableLock>().BustedAnimName; m_SecretDoorComponent.Lock = m_EXLock; EXSecretDoor_Lock.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); EXSecretDoorDestination = UnityEngine.Object.Instantiate(EXSecretDoor); EXSecretDoorDestination.name = "EX Secret Door (Exit)"; ExpandSecretDoorExitPlacable m_ExitDoorComponent = EXSecretDoorDestination.AddComponent <ExpandSecretDoorExitPlacable>(); m_ExitDoorComponent.MinimapIcon = ExpandPrefabs.exit_room_basic.associatedMinimapIcon; m_ExitDoorComponent.DoorBackgroundObject = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorBackgroundObject; m_ExitDoorComponent.DoorBottomBorderObject = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorBottomBorderObject; m_ExitDoorComponent.DoorLightObject = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorLightObject; m_ExitDoorComponent.DoorTopBorderObject = EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().DoorTopBorderObject; UnityEngine.Object.Destroy(EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>().Lock.gameObject); UnityEngine.Object.Destroy(EXSecretDoorDestination.GetComponent <ExpandSecretDoorPlacable>()); Dungeon Base_Castle = DungeonDatabase.GetOrLoadByName("Base_Castle"); GameObject m_NormalLock = (Base_Castle.PatternSettings.flows[0].sharedInjectionData[1].InjectionData[0].exactRoom.placedObjects[0].nonenemyBehaviour as SecretFloorInteractableController).WorldLocks[0].gameObject; // Setup copy with no rat decal and normal lock instead of rat lock. A general purpose version of the Mini-Elevator. EXSecretDoor_Normal = UnityEngine.Object.Instantiate(EXSecretDoor); EXSecretDoor_Normal.name = "EX Secret Door 2 (Entrance)"; Vector3 Lock2PositionOffset = (EXSecretDoor_Normal.transform.position + new Vector3(1.22f, 0.34f)); ExpandSecretDoorPlacable m_SecretDoor2Component = EXSecretDoor_Normal.GetComponent <ExpandSecretDoorPlacable>(); m_SecretDoor2Component.isHollowsElevator = false; UnityEngine.Object.Destroy(m_SecretDoor2Component.Lock.gameObject); m_SecretDoor2Component.DoorTopBorderObject.GetComponent <tk2dSprite>().SetSprite("EXSecretDoor_Frame_NoDecal_Top"); GameObject m_LockObject2 = UnityEngine.Object.Instantiate(m_NormalLock, Lock2PositionOffset, Quaternion.identity); m_LockObject2.gameObject.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); m_LockObject2.GetComponent <InteractableLock>().sprite.HeightOffGround = 1.7f; m_LockObject2.GetComponent <InteractableLock>().sprite.UpdateZDepth(); // m_LockObject2.SetActive(false); m_LockObject2.transform.SetParent(EXSecretDoor_Normal.transform, true); m_SecretDoor2Component.Lock = m_LockObject2.GetComponent <InteractableLock>(); /*m_ExitDoorComponent.DoorBackgroundObject.SetActive(false); * m_ExitDoorComponent.DoorBottomBorderObject.SetActive(false); * m_ExitDoorComponent.DoorLightObject.SetActive(false); * m_ExitDoorComponent.DoorTopBorderObject.SetActive(false);*/ EXSecretDoor_Normal.SetActive(false); EXSecretDoorDestination.SetActive(false); FakePrefab.MarkAsFakePrefab(EXSecretDoor_Normal); FakePrefab.MarkAsFakePrefab(EXSecretDoorDestination); UnityEngine.Object.DontDestroyOnLoad(EXSecretDoor_Normal); UnityEngine.Object.DontDestroyOnLoad(EXSecretDoorDestination); Base_Castle = null; m_NormalLock = null; }
public static void BuildPrefab() { ExpandPrefabs.EXFriendlyForgeHammer = new GameObject("Friendly_Forge_Hammer") { layer = 22 }; GameObject m_HitEffectObject = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().HitEffectAnimator.gameObject); GameObject m_TargetAnimatorObject = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().TargetAnimator.gameObject); GameObject m_ShadowObject = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShadowAnimator.gameObject); GameObject m_ShootPointObject = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShootPoint.gameObject); m_ShootPointObject.name = ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().ShootPoint.gameObject.name; m_HitEffectObject.transform.parent = ExpandPrefabs.EXFriendlyForgeHammer.transform; m_TargetAnimatorObject.transform.parent = ExpandPrefabs.EXFriendlyForgeHammer.transform; m_ShadowObject.transform.parent = ExpandPrefabs.EXFriendlyForgeHammer.transform; m_ShootPointObject.transform.parent = ExpandPrefabs.EXFriendlyForgeHammer.transform; ExpandPrefabs.EXFriendlyForgeHammer.SetActive(false); m_ShadowObject.GetComponent <tk2dSpriteAnimator>().playAutomatically = false; m_ShadowObject.GetComponent <tk2dSpriteAnimator>().DefaultClipId = 28; tk2dSprite m_NewHammerSprite = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(m_NewHammerSprite, ExpandPrefabs.ForgeHammer.GetComponent <tk2dSprite>()); tk2dSpriteAnimation m_SourceHammerAnimationLibrary = ExpandPrefabs.ForgeHammer.GetComponent <tk2dSpriteAnimator>().Library; tk2dSpriteAnimation m_HammerAnimationLibrary = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <tk2dSpriteAnimation>(); List <tk2dSpriteAnimationClip> m_Clips = new List <tk2dSpriteAnimationClip>(); foreach (tk2dSpriteAnimationClip clip in m_SourceHammerAnimationLibrary.clips) { if (!string.IsNullOrEmpty(clip.name)) { if (clip.name.ToLower().StartsWith("hammer_right_out")) { m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip)); } else if (clip.name.ToLower().StartsWith("hammer_left_out")) { m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip)); } else if (clip.name.ToLower().StartsWith("hammer_right_slam")) { m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip)); } else if (clip.name.ToLower().StartsWith("hammer_left_slam")) { m_Clips.Add(ExpandUtility.DuplicateAnimationClip(clip)); } } } if (m_Clips.Count > 0) { m_HammerAnimationLibrary.clips = m_Clips.ToArray(); } ExpandUtility.GenerateSpriteAnimator(ExpandPrefabs.EXFriendlyForgeHammer, m_HammerAnimationLibrary, 0, 0, false, false, false, false, false, false, 0, 0, false, false, false); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXFriendlyForgeHammer, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, false, false, false, false, true, new IntVector2(30, 24), new IntVector2(16, 24)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXFriendlyForgeHammer, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, true, true, false, false, false, false, false, true, new IntVector2(30, 8), new IntVector2(16, 16)); AIBulletBank m_HammerBulletBank = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <AIBulletBank>(); m_HammerBulletBank.useDefaultBulletIfMissing = true; m_HammerBulletBank.transforms = new List <Transform>(0); m_HammerBulletBank.Bullets = new List <AIBulletBank.Entry>() { new AIBulletBank.Entry() { Name = "default", BulletObject = ExpandPrefabs.EXFriendlyForgeHammerBullet, OverrideProjectile = false, PlayAudio = false, AudioSwitch = string.Empty, AudioEvent = string.Empty, AudioLimitOncePerFrame = false, AudioLimitOncePerAttack = false, MuzzleLimitOncePerFrame = false, MuzzleInheritsTransformDirection = false, SpawnShells = false, ShellForce = 1.75f, ShellForceVariance = 0.75f, DontRotateShell = false, ShellGroundOffset = 0, ShellsLimitOncePerFrame = false, rampBullets = false, rampStartHeight = 0, rampTime = 0, conditionalMinDegFromNorth = 0, forceCanHitEnemies = true, suppressHitEffectsIfOffscreen = false, preloadCount = 0, ProjectileData = new ProjectileData() { damage = 0, speed = 0, range = 0, damping = 0, UsesCustomAccelerationCurve = false, AccelerationCurve = new AnimationCurve(), CustomAccelerationCurveDuration = 0, onDestroyBulletScript = new BulletScriptSelector() { scriptTypeName = string.Empty } }, MuzzleFlashEffects = new VFXPool() { type = VFXPoolType.None, effects = new VFXComplex[0] } } }; GoopDefinition m_HammerGoopDefinition = Instantiate(ExpandPrefabs.ForgeHammer.GetComponent <ForgeHammerController>().GoopToDo); ExpandForgeHammerComponent EXFriendlyHammerController = ExpandPrefabs.EXFriendlyForgeHammer.AddComponent <ExpandForgeHammerComponent>(); EXFriendlyHammerController.HitEffectAnimator = m_HitEffectObject.GetComponent <tk2dSpriteAnimator>(); EXFriendlyHammerController.TargetAnimator = m_TargetAnimatorObject.GetComponent <tk2dSpriteAnimator>(); EXFriendlyHammerController.ShadowAnimator = m_ShadowObject.GetComponent <tk2dSpriteAnimator>(); EXFriendlyHammerController.ShootPoint = m_ShootPointObject.transform; EXFriendlyHammerController.GoopToDo = m_HammerGoopDefinition; FakePrefab.MarkAsFakePrefab(ExpandPrefabs.EXFriendlyForgeHammer); DontDestroyOnLoad(ExpandPrefabs.EXFriendlyForgeHammer); }
public static void GenerateGungeoneerMimicBoss(AssetBundle expandSharedAssets1, GameObject aiActorObject, PlayerController sourcePlayer = null) { if (sourcePlayer == null) { sourcePlayer = GameManager.Instance.PrimaryPlayer; } if (sourcePlayer == null) { return; } tk2dSprite playerSprite = aiActorObject.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(playerSprite, (sourcePlayer.sprite as tk2dSprite)); // If Player sprite was flipped (aka, player aiming/facing towards the left), then this could cause sprite being shifted left on AIActor. // Always set false to ensure this doesn't happen. playerSprite.FlipX = false; ExpandUtility.GenerateAIActorTemplate(aiActorObject, out m_CorpseObject, aiActorObject.name, System.Guid.NewGuid().ToString(), GunAttachOffset: new Vector3(0.3f, 0.25f, 0), StartingGunID: 472); AIActor CachedEnemyActor = aiActorObject.GetComponent <AIActor>(); if (!aiActorObject | !CachedEnemyActor) { return; } if (ExpandStats.debugMode) { ETGModConsole.Log("Spawning '" + CachedEnemyActor.ActorName + "' with GUID: " + CachedEnemyActor.EnemyGuid + " .", false); } GameObject m_NewHandObject = new GameObject("PlayerMimicHand"); tk2dSprite m_HandSprite = m_NewHandObject.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(m_HandSprite, sourcePlayer.primaryHand.gameObject.GetComponent <tk2dSprite>()); PlayerHandController m_HandController = m_NewHandObject.AddComponent <PlayerHandController>(); m_HandController.ForceRenderersOff = false; m_HandController.handHeightFromGun = 0.05f; CachedEnemyActor.aiShooter.handObject = m_HandController; // Generate BossCard based on current Player. Texture2D BossCardForeground = ExpandUtility.FlipTexture(Instantiate(sourcePlayer.BosscardSprites[0])); // Mirror thing will be used as static background. (will be the same for all possible boss cards) Texture2D BossCardBackground = expandSharedAssets1.LoadAsset <Texture2D>("MimicInMirror_BossCardBackground"); // Combine foreground boss card generated from PlayerController onto the static background image loased in earlier. Resolutions must match! Texture2D BossCardTexture = ExpandUtility.CombineTextures(BossCardBackground, BossCardForeground); GenericIntroDoer miniBossIntroDoer = aiActorObject.AddComponent <GenericIntroDoer>(); aiActorObject.AddComponent <ExpandGungeoneerMimicIntroDoer>(); miniBossIntroDoer.triggerType = GenericIntroDoer.TriggerType.PlayerEnteredRoom; miniBossIntroDoer.initialDelay = 0.15f; miniBossIntroDoer.cameraMoveSpeed = 14; miniBossIntroDoer.specifyIntroAiAnimator = null; miniBossIntroDoer.BossMusicEvent = "Play_MUS_Boss_Theme_Beholster"; miniBossIntroDoer.PreventBossMusic = false; miniBossIntroDoer.InvisibleBeforeIntroAnim = false; miniBossIntroDoer.preIntroAnim = string.Empty; miniBossIntroDoer.preIntroDirectionalAnim = string.Empty; miniBossIntroDoer.introAnim = "idle"; miniBossIntroDoer.introDirectionalAnim = string.Empty; miniBossIntroDoer.continueAnimDuringOutro = false; miniBossIntroDoer.cameraFocus = null; miniBossIntroDoer.roomPositionCameraFocus = Vector2.zero; miniBossIntroDoer.restrictPlayerMotionToRoom = false; miniBossIntroDoer.fusebombLock = false; miniBossIntroDoer.AdditionalHeightOffset = 0; miniBossIntroDoer.portraitSlideSettings = new PortraitSlideSettings() { bossNameString = "Dopplegunner", bossSubtitleString = "Imposter!", bossQuoteString = "Clone gone rogue...", bossSpritePxOffset = IntVector2.Zero, topLeftTextPxOffset = IntVector2.Zero, bottomRightTextPxOffset = IntVector2.Zero, bgColor = new Color(0, 0, 1, 1) }; if (BossCardTexture) { miniBossIntroDoer.portraitSlideSettings.bossArtSprite = BossCardTexture; miniBossIntroDoer.SkipBossCard = false; CachedEnemyActor.healthHaver.bossHealthBar = HealthHaver.BossBarType.MainBar; } else { miniBossIntroDoer.SkipBossCard = true; CachedEnemyActor.healthHaver.bossHealthBar = HealthHaver.BossBarType.SubbossBar; } miniBossIntroDoer.HideGunAndHand = true; miniBossIntroDoer.SkipFinalizeAnimation = true; miniBossIntroDoer.RegenerateCache(); CachedEnemyActor.BaseMovementSpeed = 8f; CachedEnemyActor.MovementSpeed = 8f; CachedEnemyActor.healthHaver.SetHealthMaximum(1000); CachedEnemyActor.healthHaver.ForceSetCurrentHealth(1000); CachedEnemyActor.healthHaver.overrideBossName = "Dopplegunner"; CachedEnemyActor.healthHaver.RegenerateCache(); CachedEnemyActor.EnemyId = Random.Range(2000, 9999); CachedEnemyActor.EnemyGuid = System.Guid.NewGuid().ToString(); CachedEnemyActor.OverrideDisplayName = ("Dopplegunner"); CachedEnemyActor.ActorName = ("Dopplegunner"); CachedEnemyActor.name = ("Dopplegunner"); CachedEnemyActor.CanTargetEnemies = false; CachedEnemyActor.CanTargetPlayers = true; if (sourcePlayer.characterIdentity == PlayableCharacters.Bullet) { CachedEnemyActor.EnemySwitchState = "Metal_Bullet_Man"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Convict) { CachedEnemyActor.EnemySwitchState = "Convict"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.CoopCultist) { CachedEnemyActor.EnemySwitchState = "Cultist"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Cosmonaut) { CachedEnemyActor.EnemySwitchState = "Cosmonaut"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Guide) { CachedEnemyActor.EnemySwitchState = "Guide"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Gunslinger) { CachedEnemyActor.EnemySwitchState = "Gunslinger"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Ninja) { CachedEnemyActor.EnemySwitchState = "Ninja"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Pilot) { CachedEnemyActor.EnemySwitchState = "Rogue"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Robot) { CachedEnemyActor.EnemySwitchState = "Robot"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Soldier) { CachedEnemyActor.EnemySwitchState = "Marine"; } else if (sourcePlayer.characterIdentity == PlayableCharacters.Eevee) { CachedEnemyActor.EnemySwitchState = "Convict"; ExpandShaders.ApplyParadoxPlayerShader(CachedEnemyActor.sprite); } else { CachedEnemyActor.EnemySwitchState = "Gun Cultist"; } ExpandGungeoneerMimicBossController playerMimicController = aiActorObject.AddComponent <ExpandGungeoneerMimicBossController>(); playerMimicController.m_Player = sourcePlayer; aiActorObject.AddComponent <ExpandGungeoneerMimicDeathController>(); if (CachedEnemyActor.GetComponent <ExpandGungeoneerMimicIntroDoer>()) { GenericIntroDoer genericIntroDoer = CachedEnemyActor.gameObject.GetComponent <GenericIntroDoer>(); FieldInfo field = typeof(GenericIntroDoer).GetField("m_specificIntroDoer", BindingFlags.Instance | BindingFlags.NonPublic); field.SetValue(genericIntroDoer, CachedEnemyActor.GetComponent <ExpandGungeoneerMimicIntroDoer>()); } CachedEnemyActor.aiAnimator.enabled = false; CachedEnemyActor.spriteAnimator.Stop(); CachedEnemyActor.spriteAnimator.DefaultClipId = 0; CachedEnemyActor.spriteAnimator.playAutomatically = false; List <tk2dSpriteAnimationClip> m_AnimationClips = new List <tk2dSpriteAnimationClip>(); foreach (tk2dSpriteAnimationClip clip in sourcePlayer.spriteAnimator.Library.clips) { if (!string.IsNullOrEmpty(clip.name)) { if (clip.name.ToLower() == "dodge") { m_AnimationClips.Add(clip); if (clip.frames != null && clip.frames.Length > 0) { if (!sourcePlayer.UseArmorlessAnim) { CachedEnemyActor.sprite.SetSprite(clip.frames[0].spriteId); } } } else if (clip.name.ToLower() == "dodge_armorless") { m_AnimationClips.Add(clip); if (clip.frames != null && clip.frames.Length > 0) { if (sourcePlayer.UseArmorlessAnim) { CachedEnemyActor.sprite.SetSprite(clip.frames[0].spriteId); } } } else if (clip.name.ToLower() == "run_down") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "run_down_armorless") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "death_shot") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "death_shot_armorless") { m_AnimationClips.Add(clip); } } } if (m_AnimationClips.Count > 0) { if (!CachedEnemyActor.spriteAnimator.Library) { CachedEnemyActor.spriteAnimator.Library = aiActorObject.AddComponent <tk2dSpriteAnimation>(); } CachedEnemyActor.spriteAnimator.Library.clips = m_AnimationClips.ToArray(); } CachedEnemyActor.healthHaver.RegenerateCache(); BehaviorSpeculator customBehaviorSpeculator = aiActorObject.AddComponent <BehaviorSpeculator>(); customBehaviorSpeculator.OverrideBehaviors = new List <OverrideBehaviorBase>(0); customBehaviorSpeculator.TargetBehaviors = new List <TargetBehaviorBase>(0); customBehaviorSpeculator.MovementBehaviors = new List <MovementBehaviorBase>(0); customBehaviorSpeculator.AttackBehaviors = new List <AttackBehaviorBase>(0); customBehaviorSpeculator.OtherBehaviors = new List <BehaviorBase>(0); customBehaviorSpeculator.InstantFirstTick = false; customBehaviorSpeculator.TickInterval = 0.1f; customBehaviorSpeculator.PostAwakenDelay = 0.5f; customBehaviorSpeculator.RemoveDelayOnReinforce = false; customBehaviorSpeculator.OverrideStartingFacingDirection = false; customBehaviorSpeculator.StartingFacingDirection = -90f; customBehaviorSpeculator.SkipTimingDifferentiator = false; customBehaviorSpeculator.RegenerateCache(); // BehaviorSpeculator is a serialized object. You must build these lists (or create new empty lists) and save them before the game can instantiate it correctly! ISerializedObject m_TargetBehaviorSpeculatorSeralized = customBehaviorSpeculator; m_TargetBehaviorSpeculatorSeralized.SerializedObjectReferences = new List <Object>(0); m_TargetBehaviorSpeculatorSeralized.SerializedStateKeys = new List <string>() { "OverrideBehaviors", "TargetBehaviors", "MovementBehaviors", "AttackBehaviors", "OtherBehaviors" }; m_TargetBehaviorSpeculatorSeralized.SerializedStateValues = new List <string>() { "[]", "[]", "[]", "[]", "[]" }; CachedEnemyActor.RegenerateCache(); return; }
private IEnumerator HandleTransitionToBellyFloor(PlayerController player) { player.ToggleRenderer(false, "got eaten"); player.ToggleGunRenderers(false, "got eaten"); player.ToggleHandRenderers(false, "got eaten"); yield return(null); float elapsed = 0f; float duration = 0.5f; Vector3 startPos = player.specRigidbody.GetUnitCenter(ColliderType.Ground); Vector3 finalOffset = (transform.position + new Vector3(4, 6)); GameObject dummySpriteObject = new GameObject("PlayerSpriteDupe", new Type[] { typeof(tk2dSprite) }) { layer = 22 }; dummySpriteObject.transform.position = startPos; tk2dSprite targetSprite = dummySpriteObject.GetComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(targetSprite, (player.sprite as tk2dSprite)); targetSprite.SetSprite(player.sprite.spriteId); yield return(null); AkSoundEngine.PostEvent("Stop_MUS_All", gameObject); while (elapsed < duration) { elapsed += BraveTime.DeltaTime; if (!targetSprite || !targetSprite.transform) { break; } targetSprite.transform.localScale = Vector3.Lerp(Vector3.one, new Vector3(0.01f, 0.01f, 1f), elapsed / duration); targetSprite.transform.position = Vector3.Lerp(startPos, finalOffset, elapsed / duration); yield return(null); } // AkSoundEngine.PostEvent("Play_CHR_muncher_eat_01", gameObject); // yield return new WaitForSeconds(0.15f); AkSoundEngine.PostEvent("Play_VO_lichA_cackle_01", gameObject); Vector2 BottomOffset = dummySpriteObject.transform.position; Vector2 TopOffset = dummySpriteObject.transform.position + new Vector3(1, 1); Color TargetColor = new Color(0.5f, 0.1f, 0.1f); GlobalSparksDoer.DoRandomParticleBurst(25, BottomOffset, TopOffset, new Vector3(-1, 1), 70f, 0.5f, null, new float?(0.75f), new Color?(TargetColor), GlobalSparksDoer.SparksType.BLOODY_BLOOD); GlobalSparksDoer.DoRandomParticleBurst(25, BottomOffset, TopOffset, Vector3.left, 70f, 0.5f, null, new float?(1.5f), new Color?(TargetColor), GlobalSparksDoer.SparksType.BLOODY_BLOOD); GlobalSparksDoer.DoRandomParticleBurst(25, BottomOffset, TopOffset, Vector3.left, 70f, 0.5f, null, new float?(2.25f), new Color?(TargetColor), GlobalSparksDoer.SparksType.BLOODY_BLOOD); GlobalSparksDoer.DoRandomParticleBurst(25, BottomOffset, TopOffset, new Vector3(-1, -1), 70f, 0.5f, null, new float?(3), new Color?(TargetColor), GlobalSparksDoer.SparksType.BLOODY_BLOOD); yield return(new WaitForSeconds(1)); Pixelator.Instance.FadeToBlack(0.15f, false, 0f); yield return(new WaitForSeconds(0.3f)); AkSoundEngine.PostEvent("Play_CHR_muncher_chew_01", gameObject); yield return(new WaitForSeconds(4));; Destroy(dummySpriteObject); player.ToggleRenderer(true, "got eaten"); player.ToggleGunRenderers(true, "got eaten"); player.ToggleHandRenderers(true, "got eaten"); player.ClearAllInputOverrides(); GameManager.Instance.LoadCustomLevel("tt_belly"); yield break; }
private void DoInitialConfiguration(PlayerController player) { m_AIActor.sprite.SetSprite(player.sprite.Collection, player.sprite.GetCurrentSpriteDef().name); tk2dSprite m_HandSprite = m_AIActor.aiShooter.handObject.gameObject.AddComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(m_HandSprite, player.primaryHand.gameObject.GetComponent <tk2dSprite>()); m_AIActor.aiShooter.handObject.sprite.SetSprite(player.primaryHand.sprite.Collection, player.primaryHand.sprite.GetCurrentSpriteDef().name); // Generate BossCard based on current Player. Texture2D BossCardForeground = ExpandUtility.FlipTexture(Instantiate(player.BosscardSprites[0])); // Mirror thing will be used as static background. (will be the same for all possible boss cards) Texture2D BossCardBackground = ExpandAssets.LoadAsset <Texture2D>("MimicInMirror_BossCardBackground"); // Combine foreground boss card generated from PlayerController onto the static background image loased in earlier. Resolutions must match! Texture2D BossCardTexture = ExpandUtility.CombineTextures(BossCardBackground, BossCardForeground); GenericIntroDoer miniBossIntroDoer = gameObject.GetComponent <GenericIntroDoer>(); if (BossCardTexture) { miniBossIntroDoer.portraitSlideSettings.bossArtSprite = BossCardTexture; } if (player.characterIdentity == PlayableCharacters.Bullet) { m_AIActor.EnemySwitchState = "Metal_Bullet_Man"; } else if (player.characterIdentity == PlayableCharacters.Convict) { m_AIActor.EnemySwitchState = "Convict"; } else if (player.characterIdentity == PlayableCharacters.CoopCultist) { m_AIActor.EnemySwitchState = "Cultist"; } else if (player.characterIdentity == PlayableCharacters.Cosmonaut) { m_AIActor.EnemySwitchState = "Cosmonaut"; } else if (player.characterIdentity == PlayableCharacters.Guide) { m_AIActor.EnemySwitchState = "Guide"; } else if (player.characterIdentity == PlayableCharacters.Gunslinger) { m_AIActor.EnemySwitchState = "Gunslinger"; } else if (player.characterIdentity == PlayableCharacters.Ninja) { m_AIActor.EnemySwitchState = "Ninja"; } else if (player.characterIdentity == PlayableCharacters.Pilot) { m_AIActor.EnemySwitchState = "Rogue"; } else if (player.characterIdentity == PlayableCharacters.Robot) { m_AIActor.EnemySwitchState = "Robot"; } else if (player.characterIdentity == PlayableCharacters.Soldier) { m_AIActor.EnemySwitchState = "Marine"; } else if (player.characterIdentity == PlayableCharacters.Eevee) { m_AIActor.EnemySwitchState = "Convict"; ExpandShaders.ApplyParadoxPlayerShader(m_AIActor.sprite); } else { m_AIActor.EnemySwitchState = "Gun Cultist"; } List <tk2dSpriteAnimationClip> m_AnimationClips = new List <tk2dSpriteAnimationClip>(); foreach (tk2dSpriteAnimationClip clip in player.spriteAnimator.Library.clips) { if (!string.IsNullOrEmpty(clip.name)) { if (clip.name.ToLower() == "dodge") { m_AnimationClips.Add(clip); if (clip.frames != null && clip.frames.Length > 0) { if (!player.UseArmorlessAnim) { m_AIActor.sprite.SetSprite(clip.frames[0].spriteId); } } } else if (clip.name.ToLower() == "dodge_armorless") { m_AnimationClips.Add(clip); if (clip.frames != null && clip.frames.Length > 0) { if (player.UseArmorlessAnim) { m_AIActor.sprite.SetSprite(clip.frames[0].spriteId); } } } else if (clip.name.ToLower() == "run_down") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "run_down_armorless") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "death_shot") { m_AnimationClips.Add(clip); } else if (clip.name.ToLower() == "death_shot_armorless") { m_AnimationClips.Add(clip); } } } if (m_AnimationClips.Count > 0) { if (!m_AIActor.spriteAnimator.Library) { m_AIActor.spriteAnimator.Library = m_AIActor.gameObject.AddComponent <tk2dSpriteAnimation>(); } m_AIActor.spriteAnimator.Library.clips = m_AnimationClips.ToArray(); } MirrorController mirror = ExpandPrefabs.CurrsedMirror.GetComponent <MirrorController>(); MirrorBase = Instantiate(ExpandPrefabs.DoppelgunnerMirror, gameObject.transform.position - new Vector3(0.25f, 1), Quaternion.identity); ShatterSystem = Instantiate(mirror.ShatterSystem, MirrorBase.transform.position, Quaternion.identity); ShatterSystem.SetActive(false); ShatterSystem.transform.parent = MirrorBase.transform; MirrorShatterFX = Instantiate(ExpandPrefabs.DoppelgunnerMirrorFX, (MirrorBase.transform.position - Vector3.one), Quaternion.identity); MirrorShatterFX.SetActive(false); }