public static void Init(AssetBundle expandSharedAssets1) { PowBlockObject = expandSharedAssets1.LoadAsset <GameObject>("Pow Block"); tk2dSprite m_PowBlockSprite = SpriteSerializer.AddSpriteToObject(PowBlockObject, ExpandPrefabs.EXItemCollection, "PowBlock"); ExpandUtility.GenerateSpriteAnimator(PowBlockObject, playAutomatically: true); tk2dSpriteAnimator m_PowBlockAnimator = PowBlockObject.GetComponent <tk2dSpriteAnimator>(); ExpandUtility.AddAnimation(m_PowBlockAnimator, m_PowBlockSprite.Collection, PowBlockIdleSprites, "Idle", tk2dSpriteAnimationClip.WrapMode.Loop, 8); ExpandUtility.AddAnimation(m_PowBlockAnimator, m_PowBlockSprite.Collection, PowBlockUsedSprites, "POW", tk2dSpriteAnimationClip.WrapMode.Loop, 2); PowBlock powBlock = PowBlockObject.AddComponent <PowBlock>(); string shortDesc = "Shaken not stirred..."; string longDesc = "A special block that when stomped on causes a violent shaking.\n\nEnemies shall lose their footing."; ItemBuilder.SetupItem(powBlock, shortDesc, longDesc, "ex"); ItemBuilder.SetCooldownType(powBlock, ItemBuilder.CooldownType.Damage, 380f); powBlock.quality = ItemQuality.C; if (!ExpandSettings.EnableEXItems) { powBlock.quality = ItemQuality.EXCLUDED; } PowBlockPickupID = powBlock.PickupObjectId; }
public static void Init(AssetBundle expandSharedAssets1) { SonicBoxObject = expandSharedAssets1.LoadAsset <GameObject>("EXSonicBox"); SpriteSerializer.AddSpriteToObject(SonicBoxObject, ExpandPrefabs.EXItemCollection, "SonicBox_Idle_02"); ExpandUtility.GenerateSpriteAnimator(SonicBoxObject, playAutomatically: true); ExpandUtility.AddAnimation(SonicBoxObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_IdleFrames, "Idle", tk2dSpriteAnimationClip.WrapMode.Loop, 16); SonicBox sonicBoxItem = SonicBoxObject.AddComponent <SonicBox>(); string name = "Sonic Box"; string shortDesc = "Gotta Go Fast!"; string longDesc = "Sonic the Hedgehog has found his way to the Gungeon and loves to spin dash into the Gundead!"; ItemBuilder.SetupEXItem(sonicBoxItem, name, shortDesc, longDesc); sonicBoxItem.quality = ItemQuality.A; if (!ExpandSettings.EnableEXItems) { sonicBoxItem.quality = ItemQuality.EXCLUDED; } ; }
public static void Init(AssetBundle expandSharedAssets1) { CorruptedJunkObject = expandSharedAssets1.LoadAsset <GameObject>("Corrupted Junk"); CorruptedJunk poopSack = CorruptedJunkObject.AddComponent <CorruptedJunk>(); ItemBuilder.AddSpriteToObject(CorruptedJunkObject, expandSharedAssets1.LoadAsset <Texture2D>("corrupted_poopsack_09"), false, false); string shortDesc = "Next Time... What even is this!?"; string longDesc = "Just some corrupted junk.\n\nCarrying this around makes you question your sanity..."; ItemBuilder.SetupItem(poopSack, shortDesc, longDesc, "ex"); poopSack.quality = ItemQuality.A; poopSack.CanBeDropped = false; m_SpriteNames = new List <string> { "corrupted_poopsack_01", "corrupted_poopsack_02", "corrupted_poopsack_03", "corrupted_poopsack_04", "corrupted_poopsack_05", "corrupted_poopsack_06", "corrupted_poopsack_07", "corrupted_poopsack_08", "corrupted_poopsack_09", "corrupted_poopsack_10" }; foreach (string spritePath in m_SpriteNames) { if (spritePath != "corrupted_poopsack_09") { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(spritePath), CorruptedJunkObject.GetComponent <tk2dSprite>().Collection); } } ExpandUtility.GenerateSpriteAnimator(CorruptedJunkObject, playAutomatically: true); ExpandUtility.AddAnimation(CorruptedJunkObject.GetComponent <tk2dSpriteAnimator>(), CorruptedJunkObject.GetComponent <tk2dSprite>().Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20); }
public static void Init(AssetBundle expandSharedAssets1) { RockslideObject = expandSharedAssets1.LoadAsset <GameObject>("Rock Slide"); ItemBuilder.AddSpriteToObject(RockslideObject, expandSharedAssets1.LoadAsset <Texture2D>("rockslide"), false, false); RockSlide rockslide = RockslideObject.AddComponent <RockSlide>(); string shortDesc = "Crushing Defeat"; string longDesc = "Falling rocks are a well known threat to everyone, especially within the Gungeon.\n\nIt does not help that a long gone Gungeoneer accidentally popularized the idea of using falling debris as a weapon among the Gundead.\n\nHowever, they quickly grew tired of it, seeming too easy or effortless to eliminate Gungeoneers compared to the exhilarating experience of the combat they were forged for."; ItemBuilder.SetupItem(rockslide, shortDesc, longDesc, "ex"); ItemBuilder.SetCooldownType(rockslide, ItemBuilder.CooldownType.Damage, 275f); rockslide.quality = ItemQuality.B; List <string> spritePaths = new List <string>() { "plunger_fire_001", "plunger_fire_002", "plunger_fire_003", "plunger_fire_004", "plunger_fire_005", "plunger_fire_006" }; tk2dSprite rockslidesprite = RockslideObject.GetComponent <tk2dSprite>(); foreach (string sprite in spritePaths) { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(sprite), rockslidesprite.Collection); } ExpandUtility.GenerateSpriteAnimator(RockslideObject); tk2dSpriteAnimator rockslideAnimator = RockslideObject.GetComponent <tk2dSpriteAnimator>(); ExpandUtility.AddAnimation(rockslideAnimator, rockslidesprite.Collection, spritePaths, "Activate", frameRate: 8); RockSlidePickupID = rockslide.PickupObjectId; }
public static void Init(AssetBundle expandSharedAssets1) { CorruptedJunkObject = expandSharedAssets1.LoadAsset <GameObject>("Corrupted Junk"); CorruptedJunk poopSack = CorruptedJunkObject.AddComponent <CorruptedJunk>(); SpriteSerializer.AddSpriteToObject(CorruptedJunkObject, ExpandPrefabs.EXItemCollection, "corrupted_poopsack_09"); string shortDesc = "Next Time... What even is this!?"; string longDesc = "Just some corrupted junk.\n\nCarrying this around makes you question your sanity..."; ItemBuilder.SetupItem(poopSack, shortDesc, longDesc, "ex"); poopSack.quality = ItemQuality.A; if (!ExpandSettings.EnableEXItems) { poopSack.quality = ItemQuality.EXCLUDED; } poopSack.CanBeDropped = false; CorruptedJunkID = poopSack.PickupObjectId; m_SpriteNames = new List <string> { "corrupted_poopsack_01", "corrupted_poopsack_02", "corrupted_poopsack_03", "corrupted_poopsack_04", "corrupted_poopsack_05", "corrupted_poopsack_06", "corrupted_poopsack_07", "corrupted_poopsack_08", "corrupted_poopsack_09", "corrupted_poopsack_10" }; ExpandUtility.GenerateSpriteAnimator(CorruptedJunkObject, playAutomatically: true); ExpandUtility.AddAnimation(CorruptedJunkObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20); }
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 Init(AssetBundle expandSharedAssets1) { hammerItemObject = expandSharedAssets1.LoadAsset <GameObject>("Baby Good Hammer"); BabyGoodHammer babyGoodHammer = hammerItemObject.AddComponent <BabyGoodHammer>(); SpriteSerializer.AddSpriteToObject(hammerItemObject, ExpandPrefabs.EXItemCollection, "babygoodhammer"); string shortDesc = "It's Hammer Time!"; string longDesc = "Summons a Dead Blow Hammer.\n\nIt's cry sounds a lot like a whistle.\n\nThe closer you are to the Forge, the more powerful the hammers will be."; // ItemBuilder.SetupItem(babyGoodHammer, shortDesc, longDesc, "ex"); ItemBuilder.SetupItem(babyGoodHammer, shortDesc, longDesc, "ex"); ItemBuilder.SetCooldownType(babyGoodHammer, ItemBuilder.CooldownType.Damage, 350f); babyGoodHammer.quality = ItemQuality.B; if (!ExpandSettings.EnableEXItems) { babyGoodHammer.quality = ItemQuality.EXCLUDED; } // Hammer Spawn FX Object hammerSpawnFX = expandSharedAssets1.LoadAsset <GameObject>("HammerSpawningFX"); tk2dSprite hammerSpawnFXSprite = SpriteSerializer.AddSpriteToObject(hammerSpawnFX, ExpandPrefabs.EXItemCollection, "babygoodhammer_spawn_00"); List <string> spritePaths = new List <string>() { "babygoodhammer_spawn_00", "babygoodhammer_spawn_00", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_02", "babygoodhammer_spawn_03", "babygoodhammer_spawn_04", "babygoodhammer_spawn_05", "babygoodhammer_spawn_06", "babygoodhammer_spawn_07", "babygoodhammer_spawn_08", "babygoodhammer_spawn_09", "babygoodhammer_spawn_10", "babygoodhammer_spawn_11", "babygoodhammer_spawn_12", "babygoodhammer_spawn_13", "babygoodhammer_spawn_14", "babygoodhammer_spawn_15", "babygoodhammer_spawn_16", "babygoodhammer_spawn_17", "babygoodhammer_spawn_18", "babygoodhammer_spawn_19", "babygoodhammer_spawn_20", "babygoodhammer_spawn_21", "babygoodhammer_spawn_22", "babygoodhammer_spawn_23", "babygoodhammer_spawn_24", "babygoodhammer_spawn_25" }; /*foreach (string spriteName in spritePaths) { * if (spriteName != "babygoodhammer_spawn_00") { * SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset<Texture2D>(spriteName), hammerSpawnFXSprite.Collection); * } * }*/ ExpandUtility.GenerateSpriteAnimator(hammerSpawnFX); tk2dSpriteAnimator hammerAnimator = hammerSpawnFX.GetComponent <tk2dSpriteAnimator>(); List <string> spritePaths_reversed = new List <string>() { "babygoodhammer_spawn_25", "babygoodhammer_spawn_24", "babygoodhammer_spawn_23", "babygoodhammer_spawn_22", "babygoodhammer_spawn_21", "babygoodhammer_spawn_20", "babygoodhammer_spawn_19", "babygoodhammer_spawn_18", "babygoodhammer_spawn_17", "babygoodhammer_spawn_16", "babygoodhammer_spawn_15", "babygoodhammer_spawn_14", "babygoodhammer_spawn_13", "babygoodhammer_spawn_12", "babygoodhammer_spawn_11", "babygoodhammer_spawn_10", "babygoodhammer_spawn_09", "babygoodhammer_spawn_08", "babygoodhammer_spawn_07", "babygoodhammer_spawn_06", "babygoodhammer_spawn_05", "babygoodhammer_spawn_04", "babygoodhammer_spawn_03", "babygoodhammer_spawn_02", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_01", "babygoodhammer_spawn_00" }; ExpandUtility.AddAnimation(hammerAnimator, ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), spritePaths, "HammerSpawn", tk2dSpriteAnimationClip.WrapMode.Once); ExpandUtility.AddAnimation(hammerAnimator, ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), spritePaths_reversed, "HammerReturnSpawn", tk2dSpriteAnimationClip.WrapMode.Once); HammerPickupID = babyGoodHammer.PickupObjectId; }
private void HandleUIAnimation() { // if (m_PickedUp) { return; } MinimapUIController minimapDock = null; if (Minimap.Instance) { minimapDock = Minimap.Instance.UIMinimap; } else { minimapDock = FindObjectOfType <MinimapUIController>(); } if (minimapDock) { List <Tuple <tk2dSprite, PassiveItem> > m_DockItems = ReflectionHelpers.ReflectGetField <List <Tuple <tk2dSprite, PassiveItem> > >(typeof(MinimapUIController), "dockItems", minimapDock); if (m_DockItems != null && m_DockItems.Count > 0) { for (int i = 0; i < m_DockItems.Count; i++) { if (m_DockItems[i].Second is CorruptedJunk) { if (!m_DockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>()) { ExpandUtility.GenerateSpriteAnimator(m_DockItems[i].First.gameObject, playAutomatically: true); ExpandUtility.AddAnimation(m_DockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>(), m_DockItems[i].First.Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20); } if (m_DockItems[i].First.spriteAnimator) { if (!m_DockItems[i].First.spriteAnimator.IsPlaying("idle")) { m_DockItems[i].First.spriteAnimator.Play("idle"); } } } else { if (!m_PickedUp && UnityEngine.Random.value <= 0.6f) { ExpandShaders.Instance.ApplyGlitchShader(m_DockItems[i].First); } } } } List <Tuple <tk2dSprite, PassiveItem> > m_secondaryDockItems = ReflectionHelpers.ReflectGetField <List <Tuple <tk2dSprite, PassiveItem> > >(typeof(MinimapUIController), "secondaryDockItems", minimapDock); if (m_secondaryDockItems != null && m_secondaryDockItems.Count > 0) { for (int i = 0; i < m_secondaryDockItems.Count; i++) { if (m_secondaryDockItems[i].Second is CorruptedJunk) { if (!m_secondaryDockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>()) { ExpandUtility.GenerateSpriteAnimator(m_secondaryDockItems[i].First.gameObject, playAutomatically: true); ExpandUtility.AddAnimation(m_secondaryDockItems[i].First.gameObject.GetComponent <tk2dSpriteAnimator>(), m_secondaryDockItems[i].First.Collection, m_SpriteNames, "idle", tk2dSpriteAnimationClip.WrapMode.RandomLoop, 20); } if (m_secondaryDockItems[i].First.spriteAnimator) { if (!m_secondaryDockItems[i].First.spriteAnimator.IsPlaying("idle")) { m_secondaryDockItems[i].First.spriteAnimator.Play("idle"); } } } else { if (!m_PickedUp && UnityEngine.Random.value <= 0.6f) { ExpandShaders.Instance.ApplyGlitchShader(m_secondaryDockItems[i].First); } } } } } }
private void BuildBossPrefab(RoomHandler room) { AssetBundle expandSharedAssets1 = ResourceManager.LoadAssetBundle("ExpandSharedAuto"); List <string> m_MirrorMimicFadeInSprites = new List <string>() { "PlayerMimicMirror_MimicFadeIn_01", "PlayerMimicMirror_MimicFadeIn_02", "PlayerMimicMirror_MimicFadeIn_03", "PlayerMimicMirror_MimicFadeIn_04", "PlayerMimicMirror_MimicFadeIn_05", "PlayerMimicMirror_MimicFadeIn_06", "PlayerMimicMirror_MimicFadeIn_07", "PlayerMimicMirror_MimicFadeIn_08", "PlayerMimicMirror_MimicFadeIn_09", "PlayerMimicMirror_MimicFadeIn_10" }; List <string> m_MirrorCrackSprites = new List <string>() { "PlayerMimicMirror_MimicCrack_01", "PlayerMimicMirror_MimicCrack_02", "PlayerMimicMirror_MimicCrack_03", "PlayerMimicMirror_MimicCrack_04", "PlayerMimicMirror_MimicCrack_05" }; List <string> m_MirrorShatterFXSprites = new List <string>() { "PlayerMimicMirror_ShatterDebris_01", "PlayerMimicMirror_ShatterDebris_02", "PlayerMimicMirror_ShatterDebris_03", "PlayerMimicMirror_ShatterDebris_04", "PlayerMimicMirror_ShatterDebris_05", "PlayerMimicMirror_ShatterDebris_06", "PlayerMimicMirror_ShatterDebris_07", "PlayerMimicMirror_ShatterDebris_08", "PlayerMimicMirror_ShatterDebris_09", "PlayerMimicMirror_ShatterDebris_10" }; IntVector2 SpawnPosition = (gameObject.transform.PositionVector2().ToIntVector2() - room.area.basePosition); PlayerController CurrentPlayer = GameManager.Instance.PrimaryPlayer; GameObject m_CachedNewObject = new GameObject("Gungeoneer Mimic") { layer = 28 }; GenerateGungeoneerMimicBoss(expandSharedAssets1, m_CachedNewObject, CurrentPlayer); GameObject SpawnedBossObject = m_CachedNewObject.GetComponent <AIActor>().InstantiateObject(room, SpawnPosition, false); SpawnedBossObject.transform.parent = room.hierarchyParent; Destroy(m_CachedNewObject); PickupObject MimiclayItem = PickupObjectDatabase.GetById(Mimiclay.MimiclayPickupID); if (MimiclayItem) { SpawnedBossObject.GetComponent <AIActor>().AdditionalSafeItemDrops.Add(MimiclayItem); } MirrorController mirror = ExpandPrefabs.CurrsedMirrorPlacable.gameObject.GetComponent <MirrorController>(); GameObject MimicMirrorObject = new GameObject("MimicMirrorBase"); MimicMirrorObject.transform.position = (SpawnedBossObject.transform.position - new Vector3(0.25f, 1)); MimicMirrorObject.transform.parent = gameObject.transform; ItemBuilder.AddSpriteToObject(MimicMirrorObject, expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_Base"), false, false); tk2dSprite MirrorBaseSprite = MimicMirrorObject.GetComponent <tk2dSprite>(); SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_Broken"), MirrorBaseSprite.Collection); foreach (string SpriteName in m_MirrorMimicFadeInSprites) { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MirrorBaseSprite.Collection); } foreach (string SpriteName in m_MirrorCrackSprites) { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MirrorBaseSprite.Collection); } ExpandUtility.GenerateSpriteAnimator(MimicMirrorObject, AnimateDuringBossIntros: true, AlwaysIgnoreTimeScale: true, ignoreTimeScale: true); ExpandUtility.AddAnimation(MimicMirrorObject.GetComponent <tk2dSpriteAnimator>(), MirrorBaseSprite.Collection, m_MirrorMimicFadeInSprites, "PlayerMimicFadeIn", tk2dSpriteAnimationClip.WrapMode.Once, 8); ExpandUtility.AddAnimation(MimicMirrorObject.GetComponent <tk2dSpriteAnimator>(), MirrorBaseSprite.Collection, m_MirrorCrackSprites, "MirrorGlassCrack", tk2dSpriteAnimationClip.WrapMode.Once, 6); ExpandGungeoneerMimicIntroDoer playerMimicBossIntroDoer = SpawnedBossObject.GetComponent <ExpandGungeoneerMimicIntroDoer>(); playerMimicBossIntroDoer.MirrorBase = MimicMirrorObject; playerMimicBossIntroDoer.ShatterSystem = Instantiate(mirror.ShatterSystem, MimicMirrorObject.transform.position, Quaternion.identity); playerMimicBossIntroDoer.ShatterSystem.SetActive(false); playerMimicBossIntroDoer.ShatterSystem.transform.parent = MimicMirrorObject.transform; GameObject MimicMirrorFXObject = new GameObject("MirrorShatterFX"); MimicMirrorFXObject.transform.position = (MimicMirrorObject.transform.position - Vector3.one); MimicMirrorFXObject.transform.parent = gameObject.transform.parent; ItemBuilder.AddSpriteToObject(MimicMirrorFXObject, expandSharedAssets1.LoadAsset <Texture2D>("PlayerMimicMirror_ShatterDebris_01"), false, false); foreach (string SpriteName in m_MirrorShatterFXSprites) { SpriteBuilder.AddSpriteToCollection(expandSharedAssets1.LoadAsset <Texture2D>(SpriteName), MimicMirrorFXObject.GetComponent <tk2dSprite>().Collection); } ExpandUtility.GenerateSpriteAnimator(MimicMirrorFXObject, AnimateDuringBossIntros: true, AlwaysIgnoreTimeScale: true, ignoreTimeScale: true); ExpandUtility.AddAnimation(MimicMirrorFXObject.GetComponent <tk2dSpriteAnimator>(), MimicMirrorFXObject.GetComponent <tk2dSprite>().Collection, m_MirrorShatterFXSprites, "PlayerMimicShatter", tk2dSpriteAnimationClip.WrapMode.Once, 12); MimicMirrorFXObject.GetComponent <tk2dSprite>().HeightOffGround = 3.5f; MimicMirrorFXObject.GetComponent <tk2dSprite>().UpdateZDepth(); playerMimicBossIntroDoer.MirrorShatterFX = MimicMirrorFXObject; MimicMirrorFXObject.SetActive(false); expandSharedAssets1 = null; }
private static void Add(bool isGoldenVersion) { string upperColor = isGoldenVersion ? "Golden" : "Black"; string lowerColor = isGoldenVersion ? "golden" : "black"; Gun gun = ETGMod.Databases.Items.NewGun($"{upperColor} Revolver", $"gr_{lowerColor}_revolver"); Game.Items.Rename($"outdated_gun_mods:{lowerColor}_revolver", $"ex:{lowerColor}_revolver"); gun.gameObject.AddComponent <BlackAndGoldenRevolver>(); gun.SetShortDescription("Six Deep"); string longDescription = "Bullets fired from this cursed revolver jam enemies on hit, but also completely ignore their increased strength, damaging them as if they were unjammed."; if (isGoldenVersion) { longDescription += "\n\nThree bullet kin, that were completely unalike each other, set aside their differences to obtain this revolver, that was once carried by the bearer of a terrible curse. Their presence can still be felt while wielding it."; } else { longDescription += "\n\nThis revolver was once carried by the bearer of a terrible curse. It is cold to the touch. A dark wind blows."; } gun.SetLongDescription(longDescription); // frame rate can be adjusted if we don't like the current idle animation speed gun.SetupSprite(null, $"gr_{lowerColor}_revolver_idle_001", 5); var idleAnimation = gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.idleAnimation); var list = idleAnimation.frames.ToList(); // manually add the reversal of the animation so we don't load the same sprite multiple times for no reason (these frames don't really need to be duplicated) list.Add(list[2]); list.Add(list[1]); // add a few more frames of the idle frame so the animation has a slight pause before looping for (int i = 0; i < 5; i++) { list.Add(list[0]); } idleAnimation.frames = list.ToArray(); gun.SetAnimationFPS(gun.shootAnimation, 12); gun.SetAnimationFPS(gun.reloadAnimation, 14); // Every modded gun has base projectile it works with that is borrowed from other guns in the game. // The gun names are the names from the JSON dump! While most are the same, some guns named completely different things. If you need help finding gun names, ask a modder on the Gungeon discord. // which means its the ETGMod.Databases.Items / PickupObjectDatabase.Instance.InternalGetByName name, aka the pickupobject.name var defaultGun = PickupObjectDatabase.GetById(22) as Gun; gun.AddProjectileModuleFrom(defaultGun, true, false); // move the gun up with the hand in the second frame of the shooting animation (hand movement was done in GAE with a y offset of 1) //gun.GetComponent<tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).frames[1].FrameToDefinition().MakeOffset(new Vector2(0, 1)); gun.gunSwitchGroup = defaultGun.gunSwitchGroup; gun.muzzleFlashEffects = defaultGun.muzzleFlashEffects; gun.AddMuzzle(); gun.muzzleOffset.localPosition = new Vector3(1.2f, 0.8f, 0f); gun.barrelOffset.localPosition = new Vector3(1.4f, 0.8f, 0f); gun.DefaultModule.shootStyle = ProjectileModule.ShootStyle.SemiAutomatic; gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random; gun.DefaultModule.cooldownTime = 0.07f; gun.DefaultModule.numberOfShotsInClip = 6; gun.DefaultModule.angleVariance = 0; gun.DefaultModule.ammoCost = 1; var curseWhileHeld = new StatModifier { amount = 2, statToBoost = PlayerStats.StatType.Curse, modifyType = StatModifier.ModifyMethod.ADDITIVE }; gun.currentGunStatModifiers = new StatModifier[] { curseWhileHeld }; gun.shellCasing = defaultGun.shellCasing; gun.shellsToLaunchOnFire = 0; gun.shellsToLaunchOnReload = gun.DefaultModule.numberOfShotsInClip; gun.reloadShellLaunchFrame = defaultGun.reloadShellLaunchFrame; gun.reloadTime = 1f; gun.gunClass = GunClass.PISTOL; gun.SetBaseMaxAmmo(666); gun.quality = PickupObject.ItemQuality.EXCLUDED; gun.encounterTrackable.EncounterGuid = $"this is the {lowerColor} skull revolver"; Projectile projectile = isGoldenVersion ? WestBrosGoldenRevolverProjectile.AddComponent <Projectile>() : WestBrosBlackRevolverProjectile.AddComponent <Projectile>(); GameObject projectileChild = projectile.transform.Find("Sprite").gameObject; tk2dSprite projetileSprite = SpriteSerializer.AddSpriteToObject(projectileChild, ExpandCustomEnemyDatabase.WestBrosCollection, "gr_black_revolver_projectile_001"); ExpandUtility.GenerateSpriteAnimator(projectileChild, playAutomatically: true); ExpandUtility.AddAnimation(projectileChild.GetComponent <tk2dSpriteAnimator>(), projetileSprite.Collection, ProjectileSpriteList, "idle", tk2dSpriteAnimationClip.WrapMode.Loop, 13); SpeculativeRigidbody projectileRigidBody = projectile.gameObject.AddComponent <SpeculativeRigidbody>(); ExpandUtility.DuplicateRigidBody(projectileRigidBody, defaultGun.DefaultModule.projectiles[0].specRigidbody); ExpandUtility.DuplicateComponent(projectile, defaultGun.DefaultModule.projectiles[0]); gun.DefaultModule.projectiles[0] = projectile; projectile.baseData.damage = 14f; projectile.baseData.speed = 25f; projectile.baseData.force = 14f; // projectile.transform.parent = gun.barrelOffset; projectile.transform.localPosition = gun.barrelOffset.localPosition; projectile.shouldRotate = true; var comp = projectile.gameObject.AddComponent <SkullRevolverBullet>(); comp.jamsEnemies = true; ETGMod.Databases.Items.Add(gun, null, "ANY"); if (isGoldenVersion) { AddHoveringGunComponent(gun); GoldenRevolverID = gun.PickupObjectId; } else { BlackRevolverID = gun.PickupObjectId; } }
public static void Init(AssetBundle expandSharedAssets1) { SonicRingObject = expandSharedAssets1.LoadAsset <GameObject>("EXSonicRing"); SpriteSerializer.AddSpriteToObject(SonicRingObject, ExpandPrefabs.EXItemCollection, "SonicRing_Idle_05"); List <string> m_RingFrames = new List <string>(); for (int i = 1; i < 16; i++) { if (i < 10) { m_RingFrames.Add("SonicRing_Idle_0" + i.ToString()); } else { m_RingFrames.Add("SonicRing_Idle_" + i.ToString()); } } ExpandUtility.GenerateSpriteAnimator(SonicRingObject, playAutomatically: true); ExpandUtility.AddAnimation(SonicRingObject.GetComponent <tk2dSpriteAnimator>(), ExpandPrefabs.EXItemCollection.GetComponent <tk2dSpriteCollectionData>(), m_RingFrames, "idle", tk2dSpriteAnimationClip.WrapMode.Loop); ExpandUtility.GenerateOrAddToRigidBody(SonicRingObject, CollisionLayer.Pickup, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, offset: new IntVector2(0, 1), dimensions: new IntVector2(15, 14)); SonicRingObject.GetComponent <SpeculativeRigidbody>().PixelColliders[0].IsTrigger = true; PickupMover pickupMover = SonicRingObject.AddComponent <PickupMover>(); pickupMover.pathInterval = 0.25f; pickupMover.acceleration = 7; pickupMover.maxSpeed = 15; pickupMover.minRadius = 0; SonicRing sonicRing = SonicRingObject.AddComponent <SonicRing>(); string name = "Sonic Ring"; string shortDesc = "A Ring"; string longDesc = "A Simple Ring. Equilivent to one casing."; ItemBuilder.SetupEXItem(sonicRing, name, shortDesc, longDesc, "ex", false); sonicRing.quality = ItemQuality.COMMON; sonicRing.ItemSpansBaseQualityTiers = false; sonicRing.additionalMagnificenceModifier = 0; sonicRing.ItemRespectsHeartMagnificence = false; sonicRing.associatedItemChanceMods = new LootModData[0]; sonicRing.contentSource = ContentSource.BASE; sonicRing.ShouldBeExcludedFromShops = false; sonicRing.CanBeDropped = true; sonicRing.PreventStartingOwnerFromDropping = false; sonicRing.PersistsOnDeath = false; sonicRing.PersistsOnPurchase = false; sonicRing.RespawnsIfPitfall = true; sonicRing.PreventSaveSerialization = false; sonicRing.IgnoredByRat = false; sonicRing.SaveFlagToSetOnAcquisition = 0; sonicRing.UsesCustomCost = false; sonicRing.CustomCost = 0; sonicRing.CanBeSold = true; sonicRing.ForcedPositionInAmmonomicon = -1; sonicRing.currencyValue = 1; sonicRing.IsMetaCurrency = false; sonicRing.overrideBloopSpriteName = "SonicRing_Idle_05"; RingID = sonicRing.PickupObjectId; }