public static void BuildIcon() { TeleportIcon = SpriteBuilder.SpriteFromResource("BleakMod/Resources/phase_shift_vfx/phase_shift_vfx_idle_001"); tk2dBaseSprite vfxSprite = TeleportIcon.GetComponent <tk2dBaseSprite>(); vfxSprite.GetCurrentSpriteDef().ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.MiddleCenter, vfxSprite.GetCurrentSpriteDef().position3); FakePrefab.MarkAsFakePrefab(TeleportIcon); UnityEngine.Object.DontDestroyOnLoad(TeleportIcon); TeleportIcon.SetActive(false); List <string> vfxIdleSprites = new List <string> { "phase_shift_vfx_idle_001.png", "phase_shift_vfx_idle_002.png", "phase_shift_vfx_idle_003.png", "phase_shift_vfx_idle_004.png", "phase_shift_vfx_idle_005.png", "phase_shift_vfx_idle_006.png", "phase_shift_vfx_idle_007.png", "phase_shift_vfx_idle_008.png" }; var collection = TeleportIcon.GetComponent <tk2dSprite>().Collection; var idleIdsList = new List <int>(); foreach (string sprite in vfxIdleSprites) { idleIdsList.Add(SpriteBuilder.AddSpriteToCollection("BleakMod/Resources/phase_shift_vfx/" + sprite, collection)); } tk2dSpriteAnimator spriteAnimator = TeleportIcon.AddComponent <tk2dSpriteAnimator>(); spriteAnimator.playAutomatically = true; SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, "phase_shift_vfx_idle", tk2dSpriteAnimationClip.WrapMode.Loop, 8); }
public static void BuildPrefab() { bool flag = BabyGoodLovebulon.blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(BabyGoodLovebulon.guid); if (flag) { ETGModConsole.Log("shit. this mod has fallen comrades, we must seek Round King", false); } else { BabyGoodLovebulon.blobPrefab = CompanionBuilder.BuildPrefab("blobuloveman", BabyGoodLovebulon.guid, BabyGoodLovebulon.spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9)); BabyGoodLovebulon.RandomGoopTrailBehaviour randomGoopTrailBehaviour = BabyGoodLovebulon.blobPrefab.AddComponent <BabyGoodLovebulon.RandomGoopTrailBehaviour>(); AIAnimator component = BabyGoodLovebulon.blobPrefab.GetComponent <AIAnimator>(); component.MoveAnimation = new DirectionalAnimation { AnimNames = new string[] { "idle" }, Type = DirectionalAnimation.DirectionType.None }; component.IdleAnimation = component.MoveAnimation; bool flag2 = BabyGoodLovebulon.blobCollection == null; if (flag2) { BabyGoodLovebulon.blobCollection = SpriteBuilder.ConstructCollection(BabyGoodLovebulon.blobPrefab, "Lovebulon_Baby_Collection"); UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobCollection); for (int i = 0; i < BabyGoodLovebulon.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(BabyGoodLovebulon.spritePaths[i], BabyGoodLovebulon.blobCollection); } SpriteBuilder.AddAnimation(randomGoopTrailBehaviour.spriteAnimator, BabyGoodLovebulon.blobCollection, new List <int> { 0, 1, 2, 3, 4 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; } BehaviorSpeculator component2 = BabyGoodLovebulon.blobPrefab.GetComponent <BehaviorSpeculator>(); component2.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); component2.MovementBehaviors.Add(new SeekTargetBehavior { LineOfSight = false, StopWhenInRange = true, CustomRange = 1f }); randomGoopTrailBehaviour.aiActor.MovementSpeed = 7f; UnityEngine.Object.DontDestroyOnLoad(BabyGoodLovebulon.blobPrefab); FakePrefab.MarkAsFakePrefab(BabyGoodLovebulon.blobPrefab); BabyGoodLovebulon.blobPrefab.SetActive(false); } }
public static void Init() { string itemName = "Imposter's Knife"; string resourceName = "ImposterItems/Resources/imposter_knife"; GameObject obj = new GameObject(itemName); var item = obj.AddComponent <ImpostersKnife>(); ItemBuilder.AddSpriteToObject(itemName, resourceName, obj); string shortDesc = "Wasn't me"; string longDesc = "On use, deliver a quick short range, high damage stab towards a direction of your choosing.\n\nSharp, quick, reliable, and most importantly never runs out of ammo. It's no wonder why the knife is such an effective " + "killing device, held back only for it's short range..maybe there's some kind of workaround to that..."; ItemBuilder.SetupItem(item, shortDesc, longDesc, "spapi"); ItemBuilder.SetCooldownType(item, ItemBuilder.CooldownType.Damage, 500); item.consumable = false; item.quality = ItemQuality.SPECIAL; var cm = Instantiate((GameObject)BraveResources.Load("Global Prefabs/_ChallengeManager", ".prefab")); item.DarknessEffectShader = (cm.GetComponent <ChallengeManager>().PossibleChallenges.Where(c => c.challenge is DarknessChallengeModifier).First().challenge as DarknessChallengeModifier).DarknessEffectShader; VFXPool stabVFX = new VFXPool { type = VFXPoolType.All }; VFXComplex complex = new VFXComplex(); VFXObject vfxObj = new VFXObject { alignment = VFXAlignment.Fixed, attached = true, orphaned = false, persistsOnDeath = false, destructible = true, usesZHeight = true, zHeight = -0.25f }; GameObject stabKnifeObj = SpriteBuilder.SpriteFromResource("ImposterItems/Resources/imposter_knife_stab", new GameObject("ImposterKnifeStab")); stabKnifeObj.SetActive(false); FakePrefab.MarkAsFakePrefab(stabKnifeObj); DontDestroyOnLoad(stabKnifeObj); tk2dSpriteAnimator animator = stabKnifeObj.AddComponent <tk2dSpriteAnimator>(); SpriteBuilder.AddAnimation(animator, stabKnifeObj.GetComponent <tk2dBaseSprite>().Collection, new List <int> { stabKnifeObj.GetComponent <tk2dBaseSprite>().spriteId }, "stab", tk2dSpriteAnimationClip.WrapMode.Once).fps = 1; animator.playAutomatically = true; animator.DefaultClipId = animator.GetClipIdByName("stab"); SpriteAnimatorKiller killer = stabKnifeObj.AddComponent <SpriteAnimatorKiller>(); killer.fadeTime = -1f; killer.delayDestructionTime = -1f; killer.animator = animator; ConstructOffsetsFromAnchor(stabKnifeObj.GetComponent <tk2dBaseSprite>().GetCurrentSpriteDef(), tk2dBaseSprite.Anchor.MiddleLeft); vfxObj.effect = stabKnifeObj; complex.effects = new VFXObject[] { vfxObj }; stabVFX.effects = new VFXComplex[] { complex }; item.stabVfx = stabVFX; Destroy(cm); ImpostersKnifeId = item.PickupObjectId; Game.Items.Rename("spapi:imposter's_knife", "spapi:imposters_knife"); }
public static void Init() { string itemName = "Lich's Book"; string resourceName = "LichItems/Resources/lichsbook_item_001"; GameObject obj = new GameObject(itemName); var item = obj.AddComponent <LichsBookItem>(); ItemBuilder.AddSpriteToObject(itemName, resourceName, obj); string shortDesc = "Bang Bang Bang"; string longDesc = "A book about the know-how of shooting skills and knowledge of magic.\nThe book itself has magical power, Just unfolding it has a mysterious effect."; ItemBuilder.SetupItem(item, shortDesc, longDesc, "spapi"); ItemBuilder.SetCooldownType(item, ItemBuilder.CooldownType.Damage, 600); item.consumable = false; item.quality = ItemQuality.C; Game.Items.Rename("spapi:lich's_book", "spapi:lichs_book"); GameObject shadow = SpriteBuilder.SpriteFromResource("LichItems/Resources/lichsbook_shadow_001"); shadow.SetActive(false); FakePrefab.MarkAsFakePrefab(shadow); DontDestroyOnLoad(shadow); tk2dBaseSprite sprite = shadow.GetComponent <tk2dBaseSprite>(); ConstructOffsetsFromAnchor(sprite.GetCurrentSpriteDef(), tk2dBaseSprite.Anchor.LowerCenter); Shader shadowShader = GameManager.Instance.RewardManager.A_Chest.gameObject.transform.Find("Shadow").gameObject.GetComponent <tk2dSprite>().renderer.material.shader; sprite.GetCurrentSpriteDef().material.shader = shadowShader; sprite.GetCurrentSpriteDef().materialInst.shader = shadowShader; GameObject book = SpriteBuilder.SpriteFromResource("LichItems/Resources/lichsbook_depoy_001"); book.SetActive(false); FakePrefab.MarkAsFakePrefab(book); DontDestroyOnLoad(book); tk2dSpriteAnimator animator = book.gameObject.AddComponent <tk2dSpriteAnimator>(); List <int> ids = new List <int> { book.GetComponent <tk2dBaseSprite>().spriteId, SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_002", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_003", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_004", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_005", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_006", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_007", book.GetComponent <tk2dBaseSprite>().Collection), SpriteBuilder.AddSpriteToCollection("LichItems/Resources/lichsbook_depoy_008", book.GetComponent <tk2dBaseSprite>().Collection), }; foreach (int id in ids) { ConstructOffsetsFromAnchor(book.GetComponent <tk2dBaseSprite>().Collection.spriteDefinitions[id], tk2dBaseSprite.Anchor.LowerCenter); } SpriteBuilder.AddAnimation(animator, book.GetComponent <tk2dBaseSprite>().Collection, ids, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10; animator.DefaultClipId = animator.GetClipIdByName("idle"); animator.playAutomatically = true; book.AddComponent <LichsBook>().shadowPrefab = shadow; item.LichsBookPrefab = book; BuildLibrary(item); }
public static void BuildDronePrefab() { if (dronePrefab != null) { return; } dronePrefab = SpriteBuilder.SpriteFromResource(spritePaths[0], null).gameObject; dronePrefab.name = "Drone"; //setup rigidbody var item = Gungeon.Game.Items["dog"].GetComponent <CompanionItem>(); var baseRigidbody = EnemyDatabase.GetOrLoadByGuid(item.CompanionGuid).specRigidbody; var spriteAnimator = dronePrefab.AddComponent <tk2dSpriteAnimator>(); var body = dronePrefab.GetComponent <tk2dSprite>().SetUpSpeculativeRigidbody(new IntVector2(10, 5), new IntVector2(10, 5)); body.CollideWithTileMap = true; body.CollideWithOthers = true; if (droneCollection == null) { droneCollection = SpriteBuilder.ConstructCollection(dronePrefab, "Drone_Collection"); GameObject.DontDestroyOnLoad(droneCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], droneCollection); } SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>() { 0, 1 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop); SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>() { 2, 3 }, "forward", tk2dSpriteAnimationClip.WrapMode.Loop); SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>() { 4, 5 }, "back", tk2dSpriteAnimationClip.WrapMode.Loop); SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>() { 6, 7 }, "left", tk2dSpriteAnimationClip.WrapMode.Loop); SpriteBuilder.AddAnimation(spriteAnimator, droneCollection, new List <int>() { 8, 9 }, "right", tk2dSpriteAnimationClip.WrapMode.Loop); } GameObject.DontDestroyOnLoad(dronePrefab); FakePrefab.MarkAsFakePrefab(dronePrefab); dronePrefab.SetActive(false); }
public static void BuildPrefab() { if (blobPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid)) { Tools.PrintError("Tried to make the same Blob prefab twice!"); return; } blobPrefab = CompanionBuilder.BuildPrefab("Baby Good Blob", guid, spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9)); var blob = blobPrefab.AddComponent <RandomGoopTrailBehaviour>(); var aiAnimator = blobPrefab.GetComponent <AIAnimator>(); aiAnimator.MoveAnimation = new DirectionalAnimation() { AnimNames = new string[] { "idle" }, Type = DirectionalAnimation.DirectionType.None }; aiAnimator.IdleAnimation = aiAnimator.MoveAnimation; if (blobCollection == null) { blobCollection = SpriteBuilder.ConstructCollection(blobPrefab, "Baby_Good_Blob_Collection"); GameObject.DontDestroyOnLoad(blobCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], blobCollection); } SpriteBuilder.AddAnimation(blob.spriteAnimator, blobCollection, new List <int>() { 0, 1, 2, 3, 4, 5 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5; } var bs = blobPrefab.GetComponent <BehaviorSpeculator>(); bs.MovementBehaviors.Add(new CompanionFollowPlayerBehavior() { IdleAnimations = new string[] { "idle" } }); bs.MovementBehaviors.Add(new SeekTargetBehavior() { LineOfSight = false, StopWhenInRange = true, CustomRange = 1f }); blob.aiActor.MovementSpeed = 7; GameObject.DontDestroyOnLoad(blobPrefab); FakePrefab.MarkAsFakePrefab(blobPrefab); blobPrefab.SetActive(false); }
//protected override void OnDestroy() //{ // base.OnDestroy(); //} public static void BuildPrefab() { if (prefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid)) { return; } //Create the prefab with a starting sprite and hitbox offset/size BabyGoodShellicopter.ChopperPrefab = CompanionBuilder.BuildPrefab("Baby Good Shellicopter", guid, BabyGoodShellicopter.spritePaths[0], new IntVector2(3, 3), new IntVector2(9, 9)); BabyGoodShellicopter.ChopperBehavior chopperBehavior = BabyGoodShellicopter.ChopperPrefab.AddComponent <BabyGoodShellicopter.ChopperBehavior>(); AIAnimator aiAnimator = chopperBehavior.aiAnimator; aiAnimator.directionalType = AIAnimator.DirectionalType.Rotation; bool flag3 = BabyGoodShellicopter.chopperCollection == null; if (flag3) { BabyGoodShellicopter.chopperCollection = SpriteBuilder.ConstructCollection(BabyGoodShellicopter.ChopperPrefab, "Penguin_Collection"); UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.chopperCollection); for (int i = 0; i < BabyGoodShellicopter.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(BabyGoodShellicopter.spritePaths[i], BabyGoodShellicopter.chopperCollection); } SpriteBuilder.AddAnimation(chopperBehavior.spriteAnimator, BabyGoodShellicopter.chopperCollection, new List <int> { 0, 1, 2 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 15f; } chopperBehavior.aiActor.MovementSpeed = 9f; chopperBehavior.specRigidbody.Reinitialize(); chopperBehavior.specRigidbody.CollideWithTileMap = false; chopperBehavior.aiActor.CanTargetEnemies = true; chopperBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true); BehaviorSpeculator behaviorSpeculator = chopperBehavior.behaviorSpeculator; behaviorSpeculator.AttackBehaviors.Add(new BabyGoodShellicopter.ChopperAttackBehavior()); behaviorSpeculator.MovementBehaviors.Add(new BabyGoodShellicopter.ApproachEnemiesBehavior()); behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior()); UnityEngine.Object.DontDestroyOnLoad(BabyGoodShellicopter.ChopperPrefab); FakePrefab.MarkAsFakePrefab(BabyGoodShellicopter.ChopperPrefab); BabyGoodShellicopter.ChopperPrefab.SetActive(false); }
private static void BuildTarget() { targetPrefab = SpriteBuilder.SpriteFromResource("BleakMod/Resources/winchester_targets/winchester_target_001"); tk2dBaseSprite vfxSprite = targetPrefab.GetComponent <tk2dBaseSprite>(); vfxSprite.GetCurrentSpriteDef().ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter, vfxSprite.GetCurrentSpriteDef().position3); FakePrefab.MarkAsFakePrefab(targetPrefab); UnityEngine.Object.DontDestroyOnLoad(targetPrefab); targetPrefab.SetActive(false); List <string> vfxIdleSprites = new List <string> { "winchester_target_001.png", "winchester_target_002.png", "winchester_target_003.png", "winchester_target_004.png", "winchester_target_005.png", "winchester_target_006.png", "winchester_target_007.png", "winchester_target_008.png", "winchester_target_009.png", "winchester_target_010.png", "winchester_target_011.png", "winchester_target_012.png", "winchester_target_013.png", "winchester_target_014.png", }; var collection = targetPrefab.GetComponent <tk2dSprite>().Collection; var idleIdsList = new List <int>(); foreach (string sprite in vfxIdleSprites) { idleIdsList.Add(SpriteBuilder.AddSpriteToCollection("BleakMod/Resources/winchester_targets/" + sprite, collection)); } tk2dSpriteAnimator spriteAnimator = targetPrefab.AddComponent <tk2dSpriteAnimator>(); spriteAnimator.playAutomatically = true; SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, "winchetser_target_idle", tk2dSpriteAnimationClip.WrapMode.Loop, 7); var body = targetPrefab.GetComponent <tk2dSprite>().SetUpSpeculativeRigidbody(IntVector2.Zero, new IntVector2(20, 23)); //Numbers at the end are the dimensions of the hitbox body.CollideWithTileMap = false; body.PrimaryPixelCollider.CollisionLayer = CollisionLayer.BulletBlocker; }
// Token: 0x0600015D RID: 349 RVA: 0x0000D300 File Offset: 0x0000B500 public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps, tk2dSpriteAnimationClip.WrapMode warpmode = tk2dSpriteAnimationClip.WrapMode.Loop) { tk2dSpriteCollectionData tk2dSpriteCollectionData = aiAnimator.GetComponent <tk2dSpriteCollectionData>(); bool flag = !tk2dSpriteCollectionData; bool flag2 = flag; bool flag3 = flag2; if (flag3) { tk2dSpriteCollectionData = SpriteBuilder.ConstructCollection(aiAnimator.gameObject, aiAnimator.name + "_collection"); } string[] resourceNames = ResourceExtractor.GetResourceNames(); List <int> list = new List <int>(); for (int i = 0; i < resourceNames.Length; i++) { bool flag4 = resourceNames[i].StartsWith(spriteDirectory.Replace('/', '.'), StringComparison.OrdinalIgnoreCase); bool flag5 = flag4; bool flag6 = flag5; if (flag6) { list.Add(SpriteBuilder.AddSpriteToCollection(resourceNames[i], tk2dSpriteCollectionData)); } } bool flag7 = list.Count == 0; bool flag8 = flag7; bool flag9 = flag8; if (flag9) { ETGModConsole.Log("No sprites found for animation " + name); } tk2dSpriteAnimationClip tk2dSpriteAnimationClip = SpriteBuilder.AddAnimation(aiAnimator.spriteAnimator, tk2dSpriteCollectionData, list, name, warpmode); tk2dSpriteAnimationClip.fps = (float)fps; return(tk2dSpriteAnimationClip); }
public static tk2dSpriteAnimationClip BuildAnimation(AIAnimator aiAnimator, string name, string spriteDirectory, int fps) { tk2dSpriteCollectionData collection = aiAnimator.GetComponent <tk2dSpriteCollectionData>(); if (!collection) { collection = SpriteBuilder.ConstructCollection(aiAnimator.gameObject, $"{aiAnimator.name}_collection"); } string[] resources = ResourceExtractor.GetResourceNames(); List <int> indices = new List <int>(); for (int i = 0; i < resources.Length; i++) { if (resources[i].StartsWith(spriteDirectory.Replace('/', '.') + ".", StringComparison.OrdinalIgnoreCase)) { indices.Add(SpriteBuilder.AddSpriteToCollection(resources[i], collection)); } } tk2dSpriteAnimationClip clip = SpriteBuilder.AddAnimation(aiAnimator.spriteAnimator, collection, indices, name, tk2dSpriteAnimationClip.WrapMode.Once); clip.fps = fps; return(clip); }
/// <summary> /// Creates a shop object along with an npc /// </summary> /// <param name="name">Name of the npc</param> /// <param name="prefix">Mod prefix (for example Bot)</param> /// /// <param name="idleSpritePaths">List of *FULL* sprite paths for the idle animation</param> /// <param name="idleFps">Fps of the idle animation (base game tends to use around 6)</param> /// /// <param name="talkSpritePaths">List of *FULL* sprite paths for the talk animation</param> /// <param name="talkFps">Fps of the talk animation (base game tends to use around 8)</param> /// /// <param name="lootTable">Shop loot table</param> /// <param name="currency">What is used to buy items at the shop</param> /// /// <param name="runBasedMultilineGenericStringKey">String key for normal convos</param> /// <param name="runBasedMultilineStopperStringKey">String key for if you try talking to an npc to much</param> /// <param name="purchaseItemStringKey">String key for when the player buys something</param> /// <param name="purchaseItemFailedStringKey">String key for when the player tries but fails to buy something</param> /// <param name="introStringKey">String key for when the player enters the room</param> /// <param name="attackedStringKey">String key for when the player shoots at the npc</param> /// <param name="costModifier">The multiplier for shop prices</param> /// <param name="itemPositions">The offset for the item(s) sold by your npc, the amount of items sold is based off how many offsets you add here (if you just want the 3 normally items spots you can use ItsDaFuckinShopApi.defaultItemPositions)</param> /// <param name="giveStatsOnPurchase">Whether the shop modifies stats after the player buys an item for example how cursula gives curse</param> /// <param name="statsToGiveOnPurchase"> The stats given when the player buys an item (will be ingored if statsToGiveOnPurchase is false)</param> /// /// <param name="CustomCanBuy">The method that gets called to check if the player can buy an item (useless if currency isnt set to CUSTOM)</param> /// <param name="CustomRemoveCurrency">The method that gets called remove currency from the player (useless if currency isnt set to CUSTOM)</param> /// <param name="CustomPrice">The method that gets called to get the price of an item (useless if currency isnt set to CUSTOM)</param> /// /// <param name="currencyIconPath">Sprite path for your custom currency sprite</param> /// <param name="currencyName">The name you want your custom currecy sprite to have (i should probably remove this...)</param> /// /// <param name="hasCarpet">Whether the shop has a carpet or something else that they sit on</param> /// <param name="carpetSpritePath">Sprite path for the carpet or whatever</param> /// /// <param name="hasMinimapIcon">Whether the shop has a minimap icon to show what room theyre in</param> /// <param name="minimapIconSpritePath">Sprite path minimap icon leave blank to just use deafult smiley face</param> /// /// <param name="addToMainNpcPool">Whether the shop should be added to the pool of npcs that show up in the main shop a long side bello</param> /// <param name="percentChanceForMainPool">How likely it is for the shop to show up in the main pool base game shops use 0.1</param> /// /// <param name="prerequisites">These do unlocks and shit</param> /// <returns></returns> public static GameObject SetUpShop(string name, string prefix, List <string> idleSpritePaths, int idleFps, List <string> talkSpritePaths, int talkFps, GenericLootTable lootTable, CustomShopItemController.ShopCurrencyType currency, string runBasedMultilineGenericStringKey, string runBasedMultilineStopperStringKey, string purchaseItemStringKey, string purchaseItemFailedStringKey, string introStringKey, string attackedStringKey, Vector3 talkPointOffset, Vector3[] itemPositions = null, float costModifier = 1, bool giveStatsOnPurchase = false, StatModifier[] statsToGiveOnPurchase = null, Func <CustomShopController, PlayerController, int, bool> CustomCanBuy = null, Func <CustomShopController, PlayerController, int, int> CustomRemoveCurrency = null, Func <CustomShopController, CustomShopItemController, PickupObject, int> CustomPrice = null, Func <PlayerController, PickupObject, int, bool> OnPurchase = null, Func <PlayerController, PickupObject, int, bool> OnSteal = null, string currencyIconPath = "", string currencyName = "", bool canBeRobbed = true, bool hasCarpet = false, string carpetSpritePath = "", bool hasMinimapIcon = false, string minimapIconSpritePath = "", bool addToMainNpcPool = false, float percentChanceForMainPool = 0.1f, DungeonPrerequisite[] prerequisites = null) { try { if (prerequisites == null) { prerequisites = new DungeonPrerequisite[0]; } //bool isBreachShop = false; Vector3 breachPos = Vector3.zero; var shared_auto_001 = ResourceManager.LoadAssetBundle("shared_auto_001"); var shared_auto_002 = ResourceManager.LoadAssetBundle("shared_auto_002"); var SpeechPoint = new GameObject("SpeechPoint"); SpeechPoint.transform.position = talkPointOffset; var npcObj = SpriteBuilder.SpriteFromResource(idleSpritePaths[0], new GameObject(prefix + ":" + name)); FakePrefab.MarkAsFakePrefab(npcObj); UnityEngine.Object.DontDestroyOnLoad(npcObj); npcObj.SetActive(false); npcObj.layer = 22; var collection = npcObj.GetComponent <tk2dSprite>().Collection; SpeechPoint.transform.parent = npcObj.transform; FakePrefab.MarkAsFakePrefab(SpeechPoint); UnityEngine.Object.DontDestroyOnLoad(SpeechPoint); SpeechPoint.SetActive(true); var idleIdsList = new List <int>(); var talkIdsList = new List <int>(); foreach (string sprite in idleSpritePaths) { idleIdsList.Add(SpriteBuilder.AddSpriteToCollection(sprite, collection)); } foreach (string sprite in talkSpritePaths) { talkIdsList.Add(SpriteBuilder.AddSpriteToCollection(sprite, collection)); } tk2dSpriteAnimator spriteAnimator = npcObj.AddComponent <tk2dSpriteAnimator>(); SpriteBuilder.AddAnimation(spriteAnimator, collection, idleIdsList, name + "_idle", tk2dSpriteAnimationClip.WrapMode.Loop, idleFps); SpriteBuilder.AddAnimation(spriteAnimator, collection, talkIdsList, name + "_talk", tk2dSpriteAnimationClip.WrapMode.Loop, talkFps); SpeculativeRigidbody rigidbody = GenerateOrAddToRigidBody(npcObj, CollisionLayer.BulletBlocker, PixelCollider.PixelColliderGeneration.Manual, true, true, true, false, false, false, false, true, new IntVector2(20, 18), new IntVector2(5, 0)); TalkDoerLite talkDoer = npcObj.AddComponent <TalkDoerLite>(); talkDoer.placeableWidth = 4; talkDoer.placeableHeight = 3; talkDoer.difficulty = 0; talkDoer.isPassable = true; talkDoer.usesOverrideInteractionRegion = false; talkDoer.overrideRegionOffset = Vector2.zero; talkDoer.overrideRegionDimensions = Vector2.zero; talkDoer.overrideInteractionRadius = -1; talkDoer.PreventInteraction = false; talkDoer.AllowPlayerToPassEventually = true; talkDoer.speakPoint = SpeechPoint.transform; talkDoer.SpeaksGleepGlorpenese = false; talkDoer.audioCharacterSpeechTag = "oldman"; talkDoer.playerApproachRadius = 5; talkDoer.conversationBreakRadius = 5; talkDoer.echo1 = null; talkDoer.echo2 = null; talkDoer.PreventCoopInteraction = false; talkDoer.IsPaletteSwapped = false; talkDoer.PaletteTexture = null; talkDoer.OutlineDepth = 0.5f; talkDoer.OutlineLuminanceCutoff = 0.05f; talkDoer.MovementSpeed = 3; talkDoer.PathableTiles = CellTypes.FLOOR; UltraFortunesFavor dreamLuck = npcObj.AddComponent <UltraFortunesFavor>(); dreamLuck.goopRadius = 2; dreamLuck.beamRadius = 2; dreamLuck.bulletRadius = 2; dreamLuck.bulletSpeedModifier = 0.8f; dreamLuck.vfxOffset = 0.625f; dreamLuck.sparkOctantVFX = shared_auto_001.LoadAsset <GameObject>("FortuneFavor_VFX_Spark"); AIAnimator aIAnimator = GenerateBlankAIAnimator(npcObj); aIAnimator.spriteAnimator = spriteAnimator; aIAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = name + "_idle", AnimNames = new string[] { "" }, Flipped = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None } }; aIAnimator.TalkAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = name + "_talk", AnimNames = new string[] { "" }, Flipped = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None } }; var basenpc = ResourceManager.LoadAssetBundle("shared_auto_001").LoadAsset <GameObject>("Merchant_Key").transform.Find("NPC_Key").gameObject; PlayMakerFSM iHaveNoFuckingClueWhatThisIs = npcObj.AddComponent <PlayMakerFSM>(); UnityEngine.JsonUtility.FromJsonOverwrite(UnityEngine.JsonUtility.ToJson(basenpc.GetComponent <PlayMakerFSM>()), iHaveNoFuckingClueWhatThisIs); FieldInfo fsmStringParams = typeof(ActionData).GetField("fsmStringParams", BindingFlags.NonPublic | BindingFlags.Instance); (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[1].ActionData) as List <FsmString>)[0].Value = runBasedMultilineGenericStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[1].ActionData) as List <FsmString>)[1].Value = runBasedMultilineStopperStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[4].ActionData) as List <FsmString>)[0].Value = purchaseItemStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[5].ActionData) as List <FsmString>)[0].Value = purchaseItemFailedStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[7].ActionData) as List <FsmString>)[0].Value = introStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[8].ActionData) as List <FsmString>)[0].Value = attackedStringKey; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[9].ActionData) as List <FsmString>)[0].Value = "#SUBSHOP_GENERIC_CAUGHT_STEALING"; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[10].ActionData) as List <FsmString>)[0].Value = "#SHOP_GENERIC_NO_SALE_LABEL"; (fsmStringParams.GetValue(iHaveNoFuckingClueWhatThisIs.FsmStates[12].ActionData) as List <FsmString>)[0].Value = "#COOP_REBUKE"; npcObj.name = prefix + ":" + name; var posList = new List <Transform>(); for (int i = 0; i < itemPositions.Length; i++) { var ItemPoint = new GameObject("ItemPoint" + i); ItemPoint.transform.position = itemPositions[i]; FakePrefab.MarkAsFakePrefab(ItemPoint); UnityEngine.Object.DontDestroyOnLoad(ItemPoint); ItemPoint.SetActive(true); posList.Add(ItemPoint.transform); } var ItemPoint1 = new GameObject("ItemPoint1"); ItemPoint1.transform.position = new Vector3(1.125f, 2.125f, 1); FakePrefab.MarkAsFakePrefab(ItemPoint1); UnityEngine.Object.DontDestroyOnLoad(ItemPoint1); ItemPoint1.SetActive(true); var ItemPoint2 = new GameObject("ItemPoint2"); ItemPoint2.transform.position = new Vector3(2.625f, 1f, 1); FakePrefab.MarkAsFakePrefab(ItemPoint2); UnityEngine.Object.DontDestroyOnLoad(ItemPoint2); ItemPoint2.SetActive(true); var ItemPoint3 = new GameObject("ItemPoint3"); ItemPoint3.transform.position = new Vector3(4.125f, 2.125f, 1); FakePrefab.MarkAsFakePrefab(ItemPoint3); UnityEngine.Object.DontDestroyOnLoad(ItemPoint3); ItemPoint3.SetActive(true); var shopObj = new GameObject(prefix + ":" + name + "_Shop").AddComponent <CustomShopController>(); FakePrefab.MarkAsFakePrefab(shopObj.gameObject); UnityEngine.Object.DontDestroyOnLoad(shopObj.gameObject); shopObj.gameObject.SetActive(false); shopObj.currencyType = currency; shopObj.ActionAndFuncSetUp(CustomCanBuy, CustomRemoveCurrency, CustomPrice, OnPurchase, OnSteal); if (!string.IsNullOrEmpty(currencyIconPath)) { shopObj.customPriceSprite = AddCustomCurrencyType(currencyIconPath, $"{prefix}:{currencyName}"); } else { shopObj.customPriceSprite = currencyName; } //GungeonAPI.ToolsGAPI.AddNewItemToAtlas() shopObj.canBeRobbed = canBeRobbed; shopObj.placeableHeight = 5; shopObj.placeableWidth = 5; shopObj.difficulty = 0; shopObj.isPassable = true; shopObj.baseShopType = BaseShopController.AdditionalShopType.TRUCK;//shopType; shopObj.FoyerMetaShopForcedTiers = false; shopObj.IsBeetleMerchant = false; shopObj.ExampleBlueprintPrefab = null; shopObj.shopItems = lootTable; shopObj.spawnPositions = posList.ToArray();//{ ItemPoint1.transform, ItemPoint2.transform, ItemPoint3.transform }; foreach (var pos in shopObj.spawnPositions) { pos.parent = shopObj.gameObject.transform; } shopObj.shopItemsGroup2 = null; shopObj.spawnPositionsGroup2 = null; shopObj.spawnGroupTwoItem1Chance = 0.5f; shopObj.spawnGroupTwoItem2Chance = 0.5f; shopObj.spawnGroupTwoItem3Chance = 0.5f; shopObj.shopkeepFSM = npcObj.GetComponent <PlayMakerFSM>(); shopObj.shopItemShadowPrefab = shared_auto_001.LoadAsset <GameObject>("Merchant_Key").GetComponent <BaseShopController>().shopItemShadowPrefab; shopObj.prerequisites = prerequisites; //shopObj.shopItemShadowPrefab = shopObj.cat = null; if (hasMinimapIcon) { if (!string.IsNullOrEmpty(minimapIconSpritePath)) { shopObj.OptionalMinimapIcon = SpriteBuilder.SpriteFromResource(minimapIconSpritePath); UnityEngine.Object.DontDestroyOnLoad(shopObj.OptionalMinimapIcon); FakePrefab.MarkAsFakePrefab(shopObj.OptionalMinimapIcon); } else { shopObj.OptionalMinimapIcon = ResourceCache.Acquire("Global Prefabs/Minimap_NPC_Icon") as GameObject; } } shopObj.ShopCostModifier = costModifier; shopObj.FlagToSetOnEncounter = GungeonFlags.NONE; shopObj.giveStatsOnPurchase = giveStatsOnPurchase; shopObj.statsToGive = statsToGiveOnPurchase; //shopObj. /*if (isBreachShop) * { * shopObj.gameObject.AddComponent<BreachShopComp>().offset = breachPos; * BreachShopTools.registeredShops.Add(prefix + ":" + name, shopObj.gameObject); * * shopObj.FoyerMetaShopForcedTiers = true; * * var exampleBlueprintObj = SpriteBuilder.SpriteFromResource(carpetSpritePath, new GameObject(prefix + ":" + name + "_ExampleBlueprintPrefab")); * exampleBlueprintObj.GetComponent<tk2dSprite>().SortingOrder = 2; * FakePrefab.MarkAsFakePrefab(exampleBlueprintObj); * UnityEngine.Object.DontDestroyOnLoad(exampleBlueprintObj); * exampleBlueprintObj.SetActive(false); * * //var item = exampleBlueprintObj.AddComponent<ItemBlueprintItem>(); * //item.quality = PickupObject.ItemQuality.SPECIAL; * //item.PickupObjectId = 99999999; * * * * shopObj.ExampleBlueprintPrefab = shared_auto_001.LoadAsset<GameObject>("NPC_Beetle_Merchant_Foyer").GetComponent<BaseShopController>().ExampleBlueprintPrefab; * }*/ npcObj.transform.parent = shopObj.gameObject.transform; npcObj.transform.position = new Vector3(1.9375f, 3.4375f, 5.9375f); if (hasCarpet) { var carpetObj = SpriteBuilder.SpriteFromResource(carpetSpritePath, new GameObject(prefix + ":" + name + "_Carpet")); carpetObj.GetComponent <tk2dSprite>().SortingOrder = 2; FakePrefab.MarkAsFakePrefab(carpetObj); UnityEngine.Object.DontDestroyOnLoad(carpetObj); carpetObj.SetActive(true); carpetObj.transform.position = new Vector3(0, 0, 1.7f); carpetObj.transform.parent = shopObj.gameObject.transform; carpetObj.layer = 20; } npcObj.SetActive(true); if (addToMainNpcPool) { shared_auto_002.LoadAsset <DungeonPlaceable>("shopannex_contents_01").variantTiers.Add(new DungeonPlaceableVariant { percentChance = percentChanceForMainPool, unitOffset = new Vector2(-0.5f, -1.25f), nonDatabasePlaceable = shopObj.gameObject, enemyPlaceableGuid = "", pickupObjectPlaceableId = -1, forceBlackPhantom = false, addDebrisObject = false, prerequisites = prerequisites, //shit for unlocks gose here sooner or later materialRequirements = new DungeonPlaceableRoomMaterialRequirement[0], }); } ItsDaFuckinShopApi.builtShops.Add(prefix + ":" + name, shopObj.gameObject); return(shopObj.gameObject); } catch (Exception message) { ETGModConsole.Log(message.ToString()); return(null); } }
public static void BuildPrefab() { bool flag = GregTheEgg.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(GregTheEgg.guid); if (!flag) { GregTheEgg.prefab = CompanionBuilder.BuildPrefab("Greg The Egg", GregTheEgg.guid, "NevernamedsItems/Resources/Companions/Greg/gregtheegg_idle_001", new IntVector2(1, 2), new IntVector2(9, 12)); var companionController = GregTheEgg.prefab.AddComponent <GregTheEggBehaviour>(); companionController.CanInterceptBullets = true; companionController.companionID = CompanionController.CompanionIdentifier.NONE; companionController.aiActor.MovementSpeed = 5f; companionController.aiActor.healthHaver.PreventAllDamage = false; companionController.aiActor.CollisionDamage = 0f; companionController.aiActor.specRigidbody.CollideWithOthers = true; companionController.aiActor.specRigidbody.CollideWithTileMap = false; companionController.aiActor.healthHaver.ForceSetCurrentHealth(3000f); //4000 companionController.aiActor.healthHaver.SetHealthMaximum(3000f, null, false); //4000 companionController.aiActor.specRigidbody.PixelColliders.Clear(); companionController.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 1, ManualOffsetY = 2, ManualWidth = 9, ManualHeight = 12, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companionController.aiAnimator.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.PlayerHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 1, ManualOffsetY = 2, ManualWidth = 9, ManualHeight = 12, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); BehaviorSpeculator component = GregTheEgg.prefab.GetComponent <BehaviorSpeculator>(); component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); //SET UP ANIMATIONS AIAnimator aiAnimator = companionController.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "run", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "die", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "die", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] } }, new AIAnimator.NamedDirectionalAnimation { name = "spawnloot", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "spawnloot", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] } } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "idle", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; //ADD SPRITES TO THE ANIMATIONS bool flag3 = GregTheEgg.GregAnimationCollection == null; if (flag3) { GregTheEgg.GregAnimationCollection = SpriteBuilder.ConstructCollection(GregTheEgg.prefab, "GregTheEgg_Collection"); UnityEngine.Object.DontDestroyOnLoad(GregTheEgg.GregAnimationCollection); for (int i = 0; i < GregTheEgg.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(GregTheEgg.spritePaths[i], GregTheEgg.GregAnimationCollection); } //Loot Spawning Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int> { 13, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, }, "spawnloot", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f; //Idling Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int> { 9, 10, 11, 12 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 6f; //Running Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int> { 16, 17, 18, 19, 20, 21, 22, 23 }, "run", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; //Cracking and Dying Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, GregTheEgg.GregAnimationCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f; } } }
public static void BuildPrefab() { // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93"); bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { prefab = EnemyBuilder.BuildPrefab("Jesterlet", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false); var companion = prefab.AddComponent <EnemyBehavior>(); companion.aiActor.knockbackDoer.weight = 200; companion.aiActor.MovementSpeed = 2f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = false; companion.aiActor.aiAnimator.HitReactChance = 0.05f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = true; companion.aiActor.healthHaver.ForceSetCurrentHealth(15f); companion.aiActor.CollisionKnockbackStrength = 5f; companion.aiActor.CanTargetPlayers = true; companion.aiActor.healthHaver.SetHealthMaximum(15f, null, false); companion.aiActor.specRigidbody.PixelColliders.Clear(); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 12, ManualHeight = 26, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 12, ManualHeight = 26, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle", "idle_two" } }; DirectionalAnimation done3456 = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "prepare", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "prepare", anim = done3456 } }; bool flag3 = JesterletCollection == null; if (flag3) { JesterletCollection = SpriteBuilder.ConstructCollection(prefab, "Jesterlet_Collection"); UnityEngine.Object.DontDestroyOnLoad(JesterletCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], JesterletCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int> { 2, 3 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int> { 0, 1 }, "idle_two", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, JesterletCollection, new List <int> { 4, 5, 6, 7 }, "prepare", tk2dSpriteAnimationClip.WrapMode.Once).fps = 4f; } var bs = prefab.GetComponent <BehaviorSpeculator>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = false, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f } }; shootpoint = new GameObject("f**k"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject; bs.AttackBehaviors = new List <AttackBehaviorBase>() { new ShootBehavior() { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(TeleportScript)), LeadAmount = 0f, InitialCooldown = 5f, AttackCooldown = 10f, RequiresLineOfSight = false, ChargeAnimation = "prepare", ChargeTime = 1f, Uninterruptible = true }, }; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; Game.Enemies.Add("cak:jestlet", companion.aiActor); } }
public static void AdvAddAnimation(this AIAnimator targetAnimator, string animationName, DirectionalAnimation.DirectionType directionality, CompanionBuilder.AnimationType AnimationType, List <DirectionalAnimationData> AnimData) { List <string> subAnimNames = new List <string>(); foreach (DirectionalAnimationData data in AnimData) { subAnimNames.Add(data.subAnimationName); tk2dSpriteCollectionData tk2dSpriteCollectionData = targetAnimator.GetComponent <tk2dSpriteCollectionData>(); if (!tk2dSpriteCollectionData) { tk2dSpriteCollectionData = SpriteBuilder.ConstructCollection(targetAnimator.gameObject, targetAnimator.name + "_collection"); } string[] resourceNames = ResourceExtractor.GetResourceNames(); List <int> list = new List <int>(); for (int i = 0; i < resourceNames.Length; i++) { if (resourceNames[i].StartsWith(data.pathDirectory.Replace('/', '.'), StringComparison.OrdinalIgnoreCase)) { // ETGModConsole.Log($"Resource Found: {resourceNames[i]}."); list.Add(SpriteBuilder.AddSpriteToCollection(resourceNames[i], tk2dSpriteCollectionData)); } } //ETGModConsole.Log($"Adding animation {data.subAnimationName} with list length {list.Count}."); tk2dSpriteAnimationClip tk2dSpriteAnimationClip = SpriteBuilder.AddAnimation(targetAnimator.spriteAnimator, tk2dSpriteCollectionData, list, data.subAnimationName, data.wrapMode); tk2dSpriteAnimationClip.fps = (float)data.fps; } if (AnimationType != CompanionBuilder.AnimationType.Other) { DirectionalAnimation newDirectionalAnimation = new DirectionalAnimation { Type = directionality, Flipped = new DirectionalAnimation.FlipType[subAnimNames.Count], AnimNames = subAnimNames.ToArray(), Prefix = string.Empty, }; switch (AnimationType) { case CompanionBuilder.AnimationType.Idle: targetAnimator.IdleAnimation = newDirectionalAnimation; break; case CompanionBuilder.AnimationType.Move: targetAnimator.MoveAnimation = newDirectionalAnimation; break; case CompanionBuilder.AnimationType.Hit: targetAnimator.HitAnimation = newDirectionalAnimation; break; case CompanionBuilder.AnimationType.Talk: targetAnimator.TalkAnimation = newDirectionalAnimation; break; case CompanionBuilder.AnimationType.Flight: targetAnimator.FlightAnimation = newDirectionalAnimation; break; case CompanionBuilder.AnimationType.Fidget: if (targetAnimator.IdleFidgetAnimations == null) { targetAnimator.IdleFidgetAnimations = new List <DirectionalAnimation>(); } targetAnimator.IdleFidgetAnimations.Add(newDirectionalAnimation); break; } } else { AIAnimator.NamedDirectionalAnimation newOtheranim = new AIAnimator.NamedDirectionalAnimation { name = animationName, anim = new DirectionalAnimation { Prefix = animationName, Type = directionality, Flipped = new DirectionalAnimation.FlipType[subAnimNames.Count], AnimNames = subAnimNames.ToArray(), } }; if (targetAnimator.OtherAnimations == null) { targetAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>(); } targetAnimator.OtherAnimations.Add(newOtheranim); } }
public static GameObject BuildPrefab() { var bomb = SpriteBuilder.SpriteFromResource("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_001.png", new GameObject("Lvl2Molotov")); bomb.SetActive(false); FakePrefab.MarkAsFakePrefab(bomb); var animator = bomb.AddComponent <tk2dSpriteAnimator>(); var collection = (PickupObjectDatabase.GetById(108) as SpawnObjectPlayerItem).objectToSpawn.GetComponent <tk2dSpriteAnimator>().Library.clips[0].frames[0].spriteCollection; //DEPLOYMENT var deployAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_004.png", collection), }, "lvl2mol_throw", tk2dSpriteAnimationClip.WrapMode.Once); deployAnimation.fps = 12; foreach (var frame in deployAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var explodeAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_002.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_003.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_burst_004.png", collection), }, "lvl2mol_burst", tk2dSpriteAnimationClip.WrapMode.Once); explodeAnimation.fps = 16; foreach (var frame in explodeAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var armedAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_002.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_003.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/lvl2molotov_spin_004.png", collection), }, "lvl2mol_default", tk2dSpriteAnimationClip.WrapMode.LoopSection); armedAnimation.fps = 10.0f; armedAnimation.loopStart = 0; foreach (var frame in armedAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } CustomThrowableObject throwable = new CustomThrowableObject { doEffectOnHitGround = true, OnThrownAnimation = "lvl2mol_throw", OnHitGroundAnimation = "lvl2mol_burst", DefaultAnim = "lvl2mol_default", destroyOnHitGround = false, thrownSoundEffect = "Play_OBJ_item_throw_01", effectSoundEffect = "Play_OBJ_glassbottle_shatter_01", }; bomb.AddComponent <CustomThrowableObject>(throwable); bomb.AddComponent <LvL2MolotovEffect>(); return(bomb); }
// Token: 0x06000061 RID: 97 RVA: 0x00005358 File Offset: 0x00003558 public static void BuildPrefab() { bool flag = HappyLad.PenguinPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(HappyLad.guid); bool flag2 = flag; if (!flag2) { HappyLad.PenguinPrefab = CompanionBuilder.BuildPrefab("Happy Lad", HappyLad.guid, HappyLad.spritePaths[0], new IntVector2(1, 0), new IntVector2(7, 12)); HappyLad.PenguinBehavior penguinBehavior = HappyLad.PenguinPrefab.AddComponent <HappyLad.PenguinBehavior>(); AIAnimator aiAnimator = penguinBehavior.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_right", "run_left" } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_right", "idle_left" } }; bool flag3 = HappyLad.iceCollection == null; if (flag3) { HappyLad.iceCollection = SpriteBuilder.ConstructCollection(HappyLad.PenguinPrefab, "Ice_Collection"); UnityEngine.Object.DontDestroyOnLoad(HappyLad.iceCollection); for (int i = 0; i < HappyLad.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(HappyLad.spritePaths[i], HappyLad.iceCollection); } SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int> { 0, 1 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int> { 2, 3 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int> { 0, 1 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, HappyLad.iceCollection, new List <int> { 2, 3 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; } penguinBehavior.aiActor.MovementSpeed = 7f; penguinBehavior.specRigidbody.Reinitialize(); penguinBehavior.specRigidbody.CollideWithTileMap = false; penguinBehavior.aiActor.CanTargetEnemies = true; BehaviorSpeculator behaviorSpeculator = penguinBehavior.behaviorSpeculator; behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowCursorBehaviour { IdleAnimations = new string[] { "idle" } }); UnityEngine.Object.DontDestroyOnLoad(HappyLad.PenguinPrefab); FakePrefab.MarkAsFakePrefab(HappyLad.PenguinPrefab); HappyLad.PenguinPrefab.SetActive(false); } }
private static void CreateOverheadCard(FoyerCharacterSelectFlag selectCharacter, CustomCharacterData data) { try { if (selectCharacter.OverheadElement == null) { Debug.LogError($"CHR_{data.nameShort}Panel is null"); return; } if (selectCharacter.OverheadElement?.name == $"CHR_{data.nameShort}Panel") { Debug.LogError($"CHR_{data.nameShort}Panel already exists"); return; } //Create new card instance selectCharacter.ClearOverheadElement(); var theCauseOfMySuffering = FakePrefab.Clone(selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>().gameObject); selectCharacter.OverheadElement = PrefabAPI.PrefabBuilder.Clone(selectCharacter.OverheadElement); //selectCharacter.OverheadElement.SetActive(true); selectCharacter.OverheadElement.name = $"CHR_{data.nameShort}Panel"; selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>().followTransform = selectCharacter.transform; //selectCharacter.OverheadElement.AddComponent<BotsMod.Debugger>(); //BotsMod.BotsModule.Log("0", BotsMod.BotsModule.LOST_COLOR); var customFoyerController = selectCharacter.gameObject.AddComponent <CustomCharacterFoyerController>(); customFoyerController.metaCost = data.metaCost; customFoyerController.useGlow = data.useGlow; customFoyerController.emissiveColor = data.emissiveColor; customFoyerController.emissiveColorPower = data.emissiveColorPower; customFoyerController.emissivePower = data.emissivePower; customFoyerController.data = data; string replaceKey = data.baseCharacter.ToString().ToUpper(); if (data.baseCharacter == PlayableCharacters.Soldier) { replaceKey = "MARINE"; } if (data.baseCharacter == PlayableCharacters.Pilot) { replaceKey = "ROGUE"; } if (data.baseCharacter == PlayableCharacters.Eevee) { replaceKey = "PARADOX"; } //Change text var infoPanel = selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>(); //infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text = "my ass"; //BotsMod.BotsModule.Log((infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text).ToStringIfNoString(), BotsMod.BotsModule.LOST_COLOR); dfLabel nameLabel = infoPanel.textPanel.transform.Find("NameLabel").GetComponent <dfLabel>(); //why? its 3:50am and this is currently the funniest shit to me and you are powerless to stop me :) nameLabel.Text = "#CHAR_" + data.nameShort.ToString().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper() .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper() .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper() .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper() .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper();;// nameLabel.GetLocalizationKey().Replace(replaceKey, data.identity.ToString()); //BotsMod.BotsModule.Log(replaceKey, BotsMod.BotsModule.LOST_COLOR); dfLabel pastKilledLabel = infoPanel.textPanel.transform.Find("PastKilledLabel").GetComponent <dfLabel>(); //pastKilledLabel.Text = "(Past Killed)"; pastKilledLabel.ProcessMarkup = true; pastKilledLabel.ColorizeSymbols = true; if (data.metaCost != 0) { pastKilledLabel.ModifyLocalizedText(pastKilledLabel.Text + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])"); pastKilledLabel.ModifyLocalizedText("(Past Killed)" + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])"); } infoPanel.itemsPanel.enabled = true; var spriteObject = FakePrefab.Clone(infoPanel.itemsPanel.GetComponentInChildren <dfSprite>().gameObject); //spriteObject.SetActive(false); var posList = new List <Vector3>(); var locPosList = new List <Vector3>(); foreach (var child in infoPanel.itemsPanel.GetComponentsInChildren <dfSprite>()) { //BotsMod.BotsModule.Log(child.name + " " + child.transform.position + " -- " + child.transform.localPosition); posList.Add(child.transform.position); locPosList.Add(child.transform.localPosition); UnityEngine.Object.DestroyImmediate(child.gameObject); } for (int i = 0; i < data.loadoutSpriteNames.Count; i++) { var sprite = FakePrefab.Clone(spriteObject).GetComponent <dfSprite>(); sprite.gameObject.SetActive(true); sprite.SpriteName = data.loadoutSpriteNames[i]; sprite.Size = new Vector2(data.loadoutSprites[i].width * 3, data.loadoutSprites[i].height * 3); sprite.Atlas = GameUIRoot.Instance.ConversationBar.portraitSprite.Atlas; sprite.transform.parent = infoPanel.itemsPanel.transform; infoPanel.itemsPanel.Controls.Add(sprite); sprite.transform.position = new Vector3(1 + ((i + 0.1f) * 0.1f), -((i + 0.1f) * 0.1f), 0); sprite.transform.localPosition = new Vector3(((i + 0.1f) * 0.1f), 0, 0); //BotsMod.BotsModule.Log(data.loadoutSpriteNames[i] + sprite.transform.position + " -- " + sprite.transform.localPosition); } if (data.foyerCardSprites != null) { var facecard = selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>(); theCauseOfMySuffering.transform.parent = facecard.transform.parent; theCauseOfMySuffering.transform.localScale = new Vector3(1, 1, 1); theCauseOfMySuffering.transform.localPosition = new Vector3(0, 1.687546f, 0.2250061f); theCauseOfMySuffering.transform.parent.localPosition = new Vector3(0, 0, 0); theCauseOfMySuffering.transform.parent.localScale = new Vector3(0.2f, 0.2f, 1); theCauseOfMySuffering.transform.parent.localScale = new Vector3(0.1975309f, 0.1975309f, 1); //theCauseOfMySuffering.transform.localScale = Vector3.one; //facecard.gameObject.SetActive(false); facecard.transform.parent = null; UnityEngine.Object.Destroy(facecard.gameObject); facecard = theCauseOfMySuffering.GetComponent <CharacterSelectFacecardIdleDoer>(); facecard.gameObject.name = data.nameShort + " Sprite FaceCard"; //facecard.RegenerateCache(); Debug.Log($"foyer cards arent null. {facecard.gameObject.transform.parent.position}"); Debug.Log($"foyer cards arent null. {facecard.gameObject.activeSelf}"); var orig = facecard.sprite.Collection; var idleAnimName = $"{data.nameShort}_facecard_idle"; var appearAnimName = $"{data.nameShort}_facecard_appear"; List <int> idleAnimIds = new List <int>(); List <int> appearAnimIds = new List <int>(); List <int> toCopyAppearAnimIds = new List <int> { 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, }; List <int> toCopyIdleAnimIds = new List <int> { 241, 242, 243, 244, }; foreach (var sprite in data.foyerCardSprites) { if (sprite.name.ToLower().Contains("appear")) { appearAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}")); } else if (sprite.name.ToLower().Contains("idle")) { idleAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}")); } //ETGModConsole.Log(sprite.name); } Debug.Log($"anchors done"); for (int i = 0; i < appearAnimIds.Count; i++) { orig.spriteDefinitions[appearAnimIds[i]].position0 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position0 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position0; orig.spriteDefinitions[appearAnimIds[i]].position1 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position1 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position1; orig.spriteDefinitions[appearAnimIds[i]].position2 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position2 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position2; orig.spriteDefinitions[appearAnimIds[i]].position3 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position3 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position3; /* * var safeForLaterName = orig.spriteDefinitions[appearAnimIds[i]].name; * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].boundsDataCenter; * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].boundsDataExtents; * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataCenter; * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataExtents; * var safeForLaterUv = orig.spriteDefinitions[appearAnimIds[i]].uvs; * * * * def.name = safeForLaterName; * def.boundsDataCenter = safeForLaterBoundsDataCenter; * def.boundsDataExtents = safeForLaterBoundsDataExtents; * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter; * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents; * def.uvs = safeForLaterUv; * * orig.spriteDefinitions[appearAnimIds[i]] = def;*/ } Debug.Log($"appearAnimIds position0-3 done"); for (int i = 0; i < idleAnimIds.Count; i++) { orig.spriteDefinitions[idleAnimIds[i]].position0 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position0 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position0; orig.spriteDefinitions[idleAnimIds[i]].position1 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position1 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position1; orig.spriteDefinitions[idleAnimIds[i]].position2 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position2 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position2; orig.spriteDefinitions[idleAnimIds[i]].position3 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position3 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position3; /* * var safeForLaterName = orig.spriteDefinitions[idleAnimIds[i]].name; * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].boundsDataCenter; * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].boundsDataExtents; * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataCenter; * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataExtents; * var safeForLaterUv = orig.spriteDefinitions[idleAnimIds[i]].uvs; * * * * def.name = safeForLaterName; * def.boundsDataCenter = safeForLaterBoundsDataCenter; * def.boundsDataExtents = safeForLaterBoundsDataExtents; * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter; * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents; * def.uvs = safeForLaterUv; * * orig.spriteDefinitions[idleAnimIds[i]] = def;*/ } Debug.Log($"idleAnimIds position0-3 done"); foreach (var def in orig.spriteDefinitions) { if (def.name.ToLower().Contains("appear") || def.name.ToLower().Contains("idle")) { //ETGModConsole.Log($"{def.name} [{orig.GetSpriteIdByName(def.name)}]: {def.position0} - {def.position1} - {def.position2} - {def.position3}"); } } facecard.gameObject.SetActive(true); facecard.spriteAnimator = facecard.gameObject.GetComponent <tk2dSpriteAnimator>(); SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, idleAnimIds, idleAnimName, tk2dSpriteAnimationClip.WrapMode.Loop, 4); var name = SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, appearAnimIds, appearAnimName, tk2dSpriteAnimationClip.WrapMode.Once, 17); Debug.Log($"anims added"); facecard.spriteAnimator.DefaultClipId = facecard.spriteAnimator.Library.GetClipIdByName(appearAnimName); foreach (var anim in facecard.spriteAnimator.Library.clips) { //ETGModConsole.Log($"{anim.name}: {anim.frames.Length}"); } facecard.appearAnimation = appearAnimName; facecard.coreIdleAnimation = idleAnimName; Debug.Log($"foyer card done"); } //selectCharacter.CreateOverheadElement(); } catch (Exception e) { Debug.LogError("overhead thing broke: " + e); } }
public static void BuildPrefab() { // bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { AIActor aIActor = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5"); prefab = EnemyBuilder.BuildPrefab("DrawnKin", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), true); var companion = prefab.AddComponent <EnemyBehavior>();; companion.aiActor.knockbackDoer.weight = 50; companion.aiActor.MovementSpeed = 2f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = false; companion.aiActor.aiAnimator.HitReactChance = 0f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = false; companion.aiActor.healthHaver.ForceSetCurrentHealth(30f); companion.aiActor.CollisionKnockbackStrength = 5f; companion.aiActor.CanTargetPlayers = true; companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true); companion.aiActor.healthHaver.SetHealthMaximum(30f, null, false); companion.aiActor.specRigidbody.PixelColliders.Clear(); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 15, ManualHeight = 17, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 15, ManualHeight = 17, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "die", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "die_right", "die_left" } } } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_front_right", "idle_front_left", "idle_back_right", "idle_back_left" } }; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.FourWay, Flipped = new DirectionalAnimation.FlipType[4], AnimNames = new string[] { "run_back_right", "run_front_right", "run_front_left", "run_back_left", } }; bool flag3 = DrawnKinCollection == null; if (flag3) { DrawnKinCollection = SpriteBuilder.ConstructCollection(prefab, "DrawnKin_Collection"); UnityEngine.Object.DontDestroyOnLoad(DrawnKinCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], DrawnKinCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 0, 3 }, "idle_back_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 1, 2 }, "idle_back_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 0, 3 }, "idle_front_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 1, 2 }, "idle_front_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 10, 11, 12, 13, 14, 15 }, "run_back_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 22, 23, 24, 25, 26, 27 }, "run_back_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 4, 5, 6, 7, 8, 9 }, "run_front_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; SpriteBuilder.AddAnimation(companion.spriteAnimator, DrawnKinCollection, new List <int> { 16, 17, 18, 19, 20, 21 }, "run_front_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; } var bs = prefab.GetComponent <BehaviorSpeculator>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = true, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f } }; bs.AttackBehaviors = new List <AttackBehaviorBase>() { new ShootGunBehavior() { GroupCooldownVariance = 0.2f, LineOfSight = false, WeaponType = WeaponType.BulletScript, OverrideBulletName = null, BulletScript = new CustomBulletScriptSelector(typeof(Drawn47Script)), FixTargetDuringAttack = true, StopDuringAttack = true, LeadAmount = 0, LeadChance = 1, RespectReload = true, MagazineCapacity = 8, ReloadSpeed = 5f, EmptiesClip = true, SuppressReloadAnim = false, TimeBetweenShots = -1, PreventTargetSwitching = true, OverrideAnimation = null, OverrideDirectionalAnimation = null, HideGun = false, UseLaserSight = false, UseGreenLaser = false, PreFireLaserTime = -1, AimAtFacingDirectionWhenSafe = false, Cooldown = 0.6f, CooldownVariance = 0, AttackCooldown = 0, GlobalCooldown = 0, InitialCooldown = 0, InitialCooldownVariance = 0, GroupName = null, GroupCooldown = 0, MinRange = 0, Range = 16, MinWallDistance = 0, MaxEnemiesInRoom = 0, MinHealthThreshold = 0, MaxHealthThreshold = 1, HealthThresholds = new float[0], AccumulateHealthThresholds = true, targetAreaStyle = null, IsBlackPhantom = false, resetCooldownOnDamage = null, RequiresLineOfSight = true, MaxUsages = 0, } }; bs.MovementBehaviors = new List <MovementBehaviorBase> { new SeekTargetBehavior { StopWhenInRange = true, CustomRange = 7f, LineOfSight = false, ReturnToSpawn = false, SpawnTetherDistance = 0f, PathInterval = 0.5f, SpecifyRange = false, MinActiveRange = 0f, MaxActiveRange = 0f } }; //BehaviorSpeculator load = EnemyDatabase.GetOrLoadByGuid("206405acad4d4c33aac6717d184dc8d4").behaviorSpeculator; //Tools.DebugInformation(load); bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; GameObject m_CachedGunAttachPoint = companion.transform.Find("GunAttachPoint").gameObject; EnemyBuilder.DuplicateAIShooterAndAIBulletBank(prefab, aIActor.aiShooter, aIActor.GetComponent <AIBulletBank>(), CakeIDs.Drawn47, m_CachedGunAttachPoint.transform); Game.Enemies.Add("cak:drawnkin", companion.aiActor); ItemsMod.Strings.Enemies.Set("#DRAWNKIN", "Drawn Kin"); companion.aiActor.OverrideDisplayName = "#DRAWNKIN"; companion.aiActor.ActorName = "#DRAWNKIN"; companion.aiActor.name = "#DRAWNKIN"; } }
public static void BuildPrefab() { // bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { //float AttackAnimationThingAMaWhatIts = 0.5f; prefab = EnemyBuilder.BuildPrefab("ink_book", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false); var companion = prefab.AddComponent <EnemyBehavior>(); companion.aiActor.knockbackDoer.weight = 100; companion.aiActor.MovementSpeed = 2.5f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = true; companion.aiActor.aiAnimator.HitReactChance = 0f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.healthHaver.ForceSetCurrentHealth(20f); companion.aiActor.CollisionKnockbackStrength = 0f; companion.aiActor.procedurallyOutlined = false; companion.aiActor.CanTargetPlayers = true; companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false); companion.aiActor.specRigidbody.PixelColliders.Clear(); companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "die", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "die_left", "die_right" } } } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_left", "idle_right" } }; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_left", "run_right" } }; bool flag3 = InkedBook == null; if (flag3) { InkedBook = SpriteBuilder.ConstructCollection(prefab, "InkBooklet_Collection"); UnityEngine.Object.DontDestroyOnLoad(InkedBook); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], InkedBook); } SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 0, 1 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 0, 1 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 5f; SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 0, 1 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f; SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 0, 1 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 10f; SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 2, 3, 4, 5, 6 }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; SpriteBuilder.AddAnimation(companion.spriteAnimator, InkedBook, new List <int> { 2, 3, 4, 5, 6 }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; //companion.aiActor.gameObject.AddComponent<ColliderComponent>(); var bs = prefab.GetComponent <BehaviorSpeculator>(); prefab.GetComponent <ObjectVisibilityManager>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; shootpoint = new GameObject("beepskysmash"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("beepskysmash").gameObject; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = true, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f, } }; bs.AttackBehaviors = new List <AttackBehaviorBase>() { new ShootBehavior() { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(SkellScript)), LeadAmount = 0f, AttackCooldown = 5f, InitialCooldown = 1f, RequiresLineOfSight = true, StopDuring = ShootBehavior.StopType.Attack, Uninterruptible = true, } }; bs.MovementBehaviors = new List <MovementBehaviorBase> { new SeekTargetBehavior { StopWhenInRange = true, CustomRange = 7f, LineOfSight = false, ReturnToSpawn = false, SpawnTetherDistance = 0f, PathInterval = 0.5f, SpecifyRange = false, MinActiveRange = 0f, MaxActiveRange = 0f } }; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; Game.Enemies.Add("cak:ink_booklet", companion.aiActor); ItemsMod.Strings.Enemies.Set("#INKBOOK", "Ink Booklet"); companion.aiActor.OverrideDisplayName = "#INKBOOK"; companion.aiActor.ActorName = "#INKBOOK"; companion.aiActor.name = "#INKBOOK"; } } }
public static GameObject BuildPrefab() { var bomb = SpriteBuilder.SpriteFromResource("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", new GameObject("InfantryGrenade")); bomb.SetActive(false); FakePrefab.MarkAsFakePrefab(bomb); var animator = bomb.AddComponent <tk2dSpriteAnimator>(); var collection = (PickupObjectDatabase.GetById(108) as SpawnObjectPlayerItem).objectToSpawn.GetComponent <tk2dSpriteAnimator>().Library.clips[0].frames[0].spriteCollection; var deployAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection), }, "infantrygrenade_throw", tk2dSpriteAnimationClip.WrapMode.Once); deployAnimation.fps = 12; foreach (var frame in deployAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var explodeAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_explode_001.png", collection), }, "infantrygrenade_explode", tk2dSpriteAnimationClip.WrapMode.Once); explodeAnimation.fps = 30; foreach (var frame in explodeAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var armedAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection), }, "infantrygrenade_primed", tk2dSpriteAnimationClip.WrapMode.LoopSection); armedAnimation.fps = 10.0f; armedAnimation.loopStart = 0; foreach (var frame in armedAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var audioListener = bomb.AddComponent <AudioAnimatorListener>(); audioListener.animationAudioEvents = new ActorAudioEvent[] { new ActorAudioEvent { eventName = "Play_OBJ_mine_beep_01", eventTag = "beep" } }; ProximityMine proximityMine = new ProximityMine { explosionData = new ExplosionData { useDefaultExplosion = false, doDamage = true, forceUseThisRadius = false, damageRadius = 3f, damageToPlayer = 0, damage = 30, breakSecretWalls = false, secretWallsRadius = 3.5f, forcePreventSecretWallDamage = false, doDestroyProjectiles = true, doForce = true, pushRadius = 3, force = 25, debrisForce = 12.5f, preventPlayerForce = false, explosionDelay = 0.1f, usesComprehensiveDelay = false, comprehensiveDelay = 0, playDefaultSFX = false, doScreenShake = true, ss = new ScreenShakeSettings { magnitude = 1, speed = 6.5f, time = 0.22f, falloff = 0, direction = new Vector2(0, 0), vibrationType = ScreenShakeSettings.VibrationType.Auto, simpleVibrationStrength = Vibration.Strength.Medium, simpleVibrationTime = Vibration.Time.Normal }, doStickyFriction = true, doExplosionRing = true, isFreezeExplosion = false, freezeRadius = 5, IsChandelierExplosion = false, rotateEffectToNormal = false, ignoreList = new List <SpeculativeRigidbody>(), overrideRangeIndicatorEffect = null, effect = StaticExplosionDatas.explosiveRoundsExplosion.effect, freezeEffect = null, }, explosionStyle = ProximityMine.ExplosiveStyle.TIMED, detectRadius = 3.5f, explosionDelay = 1f, usesCustomExplosionDelay = false, customExplosionDelay = 0.1f, deployAnimName = "infantrygrenade_throw", explodeAnimName = "infantrygrenade_explode", idleAnimName = "infantrygrenade_primed", MovesTowardEnemies = false, HomingTriggeredOnSynergy = false, HomingDelay = 3.25f, HomingRadius = 10, HomingSpeed = 4, }; var boom = bomb.AddComponent <ProximityMine>(proximityMine); return(bomb); }
// Token: 0x0600023B RID: 571 RVA: 0x00015AB8 File Offset: 0x00013CB8 //public override DebrisObject Drop(PlayerController player) //{ // player.OnAllyFlipCompleted = (Action<FlippableCover>)Delegate.Remove(player.OnAllyFlipCompleted, new Action<FlippableCover>(this.HandleFlip)); // player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(player.OnNewFloorLoaded, new Action<PlayerController>(this.HandleNewFloor)); /// this.DestroyCompanions(); // return base.Drop(player); //} // Token: 0x0600023C RID: 572 RVA: 0x00015B1C File Offset: 0x00013D1C public static void BuildPrefab() { bool flag = AbilityRebel.AllyPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(AbilityRebel.guid); bool flag2 = flag; bool flag3 = !flag2; if (flag3) { AbilityRebel.AllyPrefab = CompanionBuilder.BuildPrefab("Ally Boi", AbilityRebel.guid, AbilityRebel.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9)); AbilityRebel.AllyBehavior allyBehavior = AbilityRebel.AllyPrefab.AddComponent <AbilityRebel.AllyBehavior>(); allyBehavior.aiAnimator.facingType = AIAnimator.FacingType.Movement; allyBehavior.aiAnimator.faceSouthWhenStopped = false; allyBehavior.aiAnimator.faceTargetWhenStopped = true; AIAnimator aiAnimator = allyBehavior.aiAnimator; //AIBulletBank aiBulletBlank = aiBulletBlank. //allyBehavior.aiShooter.equippedGunId = 79; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "run", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "die", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "die", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] } } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, AnimNames = new string[] { "idle_right", "idle_left" }, Flipped = new DirectionalAnimation.FlipType[2] }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "idle_right", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; DirectionalAnimation anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "attack", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "attack", anim = anim } }; AIAnimator.NamedDirectionalAnimation namedDirectionalAnimation = new AIAnimator.NamedDirectionalAnimation(); namedDirectionalAnimation.name = "spawn"; namedDirectionalAnimation.anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "spawn", AnimNames = new string[] { "spawn" }, Flipped = new DirectionalAnimation.FlipType[1] }; bool flag4 = AbilityRebel.AllyBoiCollection == null; bool flag5 = flag4; if (flag5) { AbilityRebel.AllyBoiCollection = SpriteBuilder.ConstructCollection(AbilityRebel.AllyPrefab, "Ally_Boi_Collection"); UnityEngine.Object.DontDestroyOnLoad(AbilityRebel.AllyBoiCollection); for (int i = 0; i < AbilityRebel.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(AbilityRebel.spritePaths[i], AbilityRebel.AllyBoiCollection); } SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 43 }, "attack", tk2dSpriteAnimationClip.WrapMode.Once).fps = 20f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 37, 38, 39, 40, 41, 42 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 37, 38, 39, 40, 41, 42 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 31, 32, 33, 34, 35, 36 }, "run", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 31, 32, 33, 34, 35, 36 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 12f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 25, 26, 27, 28, 29, 30 }, "die", tk2dSpriteAnimationClip.WrapMode.Once).fps = 12f; SpriteBuilder.AddAnimation(allyBehavior.spriteAnimator, AbilityRebel.AllyBoiCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, "spawn", tk2dSpriteAnimationClip.WrapMode.Once).fps = 24f; } allyBehavior.aiActor.MovementSpeed = 10f; allyBehavior.aiActor.HasShadow = false; allyBehavior.aiActor.CanTargetPlayers = false; BehaviorSpeculator behaviorSpeculator = allyBehavior.behaviorSpeculator; behaviorSpeculator.AttackBehaviors.Add(new AbilityRebel.AllyAttackBehavior()); behaviorSpeculator.MovementBehaviors.Add(new AbilityRebel.ApproachEnemiesBehavior()); behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); UnityEngine.Object.DontDestroyOnLoad(AbilityRebel.AllyPrefab); FakePrefab.MarkAsFakePrefab(AbilityRebel.AllyPrefab); AbilityRebel.AllyPrefab.SetActive(false); allyBehavior.CanInterceptBullets = true; allyBehavior.aiActor.healthHaver.PreventAllDamage = false; allyBehavior.aiActor.CollisionDamage = 0f; allyBehavior.aiActor.specRigidbody.CollideWithOthers = true; allyBehavior.aiActor.specRigidbody.CollideWithTileMap = false; allyBehavior.aiActor.healthHaver.ForceSetCurrentHealth(12f); allyBehavior.aiActor.healthHaver.SetHealthMaximum(12f, null, false); allyBehavior.aiActor.specRigidbody.PixelColliders.Clear(); allyBehavior.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.PlayerHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 16, ManualHeight = 24, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 });; /* * allyBehavior.aiAnimator.specRigidbody.PixelColliders.Add(new PixelCollider * { * ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, * CollisionLayer = CollisionLayer.PlayerHitBox, * IsTrigger = false, * BagleUseFirstFrameOnly = false, * SpecifyBagelFrame = string.Empty, * BagelColliderNumber = 0, * ManualOffsetX = 0, * ManualOffsetY = 0, * ManualWidth = 1, * ManualHeight = 1, * ManualDiameter = 0, * ManualLeftX = 0, * ManualLeftY = 0, * ManualRightX = 0, * ManualRightY = 0 * });*/ } }
// Token: 0x06000061 RID: 97 RVA: 0x00005358 File Offset: 0x00003558 public static void BuildPrefab() { bool flag = IceOgreHead.PenguinPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(IceOgreHead.guid); bool flag2 = flag; if (!flag2) { IceOgreHead.PenguinPrefab = CompanionBuilder.BuildPrefab("Ice Ogre Head", IceOgreHead.guid, IceOgreHead.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9)); IceOgreHead.PenguinBehavior penguinBehavior = IceOgreHead.PenguinPrefab.AddComponent <IceOgreHead.PenguinBehavior>(); AIAnimator aiAnimator = penguinBehavior.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_right", "run_left" } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_right", "idle_left" } }; bool flag3 = IceOgreHead.iceCollection == null; if (flag3) { IceOgreHead.iceCollection = SpriteBuilder.ConstructCollection(IceOgreHead.PenguinPrefab, "Ice_Collection"); UnityEngine.Object.DontDestroyOnLoad(IceOgreHead.iceCollection); for (int i = 0; i < IceOgreHead.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(IceOgreHead.spritePaths[i], IceOgreHead.iceCollection); } SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int> { 0, 1, 2, 3 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int> { 4, 5, 6, 7 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int> { 8, 9, 10, 11, 12, 13, 14 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; SpriteBuilder.AddAnimation(penguinBehavior.spriteAnimator, IceOgreHead.iceCollection, new List <int> { 15, 16, 17, 18, 19, 20, 21 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; } penguinBehavior.aiActor.MovementSpeed = 7f; penguinBehavior.specRigidbody.Reinitialize(); penguinBehavior.specRigidbody.CollideWithTileMap = false; penguinBehavior.aiActor.CanTargetEnemies = true; BehaviorSpeculator behaviorSpeculator = penguinBehavior.behaviorSpeculator; behaviorSpeculator.AttackBehaviors.Add(new IceOgreHead.PenguinAttackBehavior()); behaviorSpeculator.MovementBehaviors.Add(new IceOgreHead.ApproachEnemiesBehavior()); behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); UnityEngine.Object.DontDestroyOnLoad(IceOgreHead.PenguinPrefab); FakePrefab.MarkAsFakePrefab(IceOgreHead.PenguinPrefab); IceOgreHead.PenguinPrefab.SetActive(false); } }
public static void BuildPrefab() { bool flag = StrangeArrow.arrowPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(StrangeArrow.guid); bool flag2 = flag; if (!flag2) { StrangeArrow.arrowPrefab = CompanionBuilder.BuildPrefab("Strange Arrow", StrangeArrow.guid, StrangeArrow.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9)); StrangeArrow.arrowBehavior arrowsBehavior = StrangeArrow.arrowPrefab.AddComponent <StrangeArrow.arrowBehavior>(); AIAnimator aiAnimator = arrowsBehavior.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_right", "run_left" } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_right", "idle_left" } }; bool flag3 = StrangeArrow.arrowCollection == null; if (flag3) { StrangeArrow.arrowCollection = SpriteBuilder.ConstructCollection(StrangeArrow.arrowPrefab, "StrangeArrow_Collection"); UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowCollection); for (int i = 0; i < StrangeArrow.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(StrangeArrow.spritePaths[i], StrangeArrow.arrowCollection); } SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int> { 0, 1 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int> { 2, 3 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5f; SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int> { 4, 5 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; SpriteBuilder.AddAnimation(arrowsBehavior.spriteAnimator, StrangeArrow.arrowCollection, new List <int> { 6, 7 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 14f; } arrowsBehavior.aiActor.MovementSpeed = 7f; arrowsBehavior.specRigidbody.Reinitialize(); arrowsBehavior.specRigidbody.CollideWithTileMap = false; arrowsBehavior.aiActor.CanTargetEnemies = true; BehaviorSpeculator behaviorSpeculator = arrowsBehavior.behaviorSpeculator; behaviorSpeculator.AttackBehaviors.Add(new StrangeArrow.arrowAttackBehavior()); behaviorSpeculator.MovementBehaviors.Add(new StrangeArrow.ApproachEnemiesBehavior()); behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); UnityEngine.Object.DontDestroyOnLoad(StrangeArrow.arrowPrefab); FakePrefab.MarkAsFakePrefab(StrangeArrow.arrowPrefab); StrangeArrow.arrowPrefab.SetActive(false); } }
public static void BuildPrefab() { bool flag = PointZero.PointZeroPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(PointZero.guid); bool flag2 = flag; if (!flag2) { PointZero.PointZeroPrefab = CompanionBuilder.BuildPrefab("Point Zero", PointZero.guid, PointZero.spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9)); PointZero.PointZeroBehaviour pointZeroBehavior = PointZero.PointZeroPrefab.AddComponent <PointZero.PointZeroBehaviour>(); AIAnimator aiAnimator = pointZeroBehavior.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_right", "run_left" } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_right", "idle_left" } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "attack_right", "attack_left" } }; bool flag3 = PointZero.pointzeroCollection == null; if (flag3) { PointZero.pointzeroCollection = SpriteBuilder.ConstructCollection(PointZero.PointZeroPrefab, "Penguin_Collection"); UnityEngine.Object.DontDestroyOnLoad(PointZero.pointzeroCollection); for (int i = 0; i < PointZero.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(PointZero.spritePaths[i], PointZero.pointzeroCollection); } SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 8, 9, 10, 11, 12, 13, 14, 15 }, "attack_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(pointZeroBehavior.spriteAnimator, PointZero.pointzeroCollection, new List <int> { 8, 9, 10, 11, 12, 13, 14, 15 }, "attack_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; } pointZeroBehavior.aiActor.MovementSpeed = 5f; pointZeroBehavior.specRigidbody.Reinitialize(); pointZeroBehavior.specRigidbody.CollideWithTileMap = false; pointZeroBehavior.aiActor.CanTargetEnemies = true; pointZeroBehavior.aiActor.SetIsFlying(true, "Flying Enemy", true, true); BehaviorSpeculator behaviorSpeculator = pointZeroBehavior.behaviorSpeculator; behaviorSpeculator.AttackBehaviors.Add(new PointZero.PointZeroAttackBehavior()); behaviorSpeculator.MovementBehaviors.Add(new PointZero.ApproachEnemiesBehavior()); behaviorSpeculator.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); UnityEngine.Object.DontDestroyOnLoad(PointZero.PointZeroPrefab); FakePrefab.MarkAsFakePrefab(PointZero.PointZeroPrefab); PointZero.PointZeroPrefab.SetActive(false); } }
public static void BuildPrefab() { // bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { prefab = EnemyBuilder.BuildPrefab("Flame_Clone", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false); var companion = prefab.AddComponent <EnemyBehavior>(); companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true); companion.aiActor.EffectResistances = new ActorEffectResistance[] { new ActorEffectResistance() { resistAmount = 1, resistType = EffectResistanceType.Fire }, }; companion.aiActor.knockbackDoer.weight = 800; companion.aiActor.MovementSpeed = 5f; companion.aiActor.name = "Killinder Clone"; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = false; companion.aiActor.aiAnimator.HitReactChance = 0f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = false; companion.aiActor.CollisionKnockbackStrength = 5f; companion.aiActor.healthHaver.SetHealthMaximum(15f, null, false); AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle" } }; bool flag3 = OphaimCollection == null; if (flag3) { OphaimCollection = SpriteBuilder.ConstructCollection(prefab, "Inflamed_Eye_Collection"); UnityEngine.Object.DontDestroyOnLoad(OphaimCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], OphaimCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, OphaimCollection, new List <int> { 0, 1, 2, 3 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; } var bs = prefab.GetComponent <BehaviorSpeculator>(); float[] angles = { 135, 45, 125, 45 }; prefab.GetComponent <ObjectVisibilityManager>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; shootpoint = new GameObject("f**k"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = true, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f, } }; bs.AttackBehaviors = new List <AttackBehaviorBase>() { new ShootBehavior() { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(FlameShooter)), LeadAmount = 0f, AttackCooldown = 3f, RequiresLineOfSight = false, Uninterruptible = true } }; companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; Game.Enemies.Add("cak:flame_clone", companion.aiActor); } }
public static void BuildPrefab() { bool flag = Peanut.prefab != null || CompanionBuilder.companionDictionary.ContainsKey(Peanut.guid); if (!flag) { Peanut.prefab = CompanionBuilder.BuildPrefab("Peanut Companion", Peanut.guid, "NevernamedsItems/Resources/Companions/PeanutCompanion/peanut_idlesouth_001", new IntVector2(16, 11), new IntVector2(8, 9)); var companionController = Peanut.prefab.AddComponent <PeanutCompanionBehaviour>(); companionController.companionID = CompanionController.CompanionIdentifier.NONE; companionController.aiActor.MovementSpeed = 5f; companionController.aiActor.healthHaver.PreventAllDamage = true; companionController.aiActor.CollisionDamage = 0f; companionController.aiActor.specRigidbody.CollideWithOthers = false; companionController.aiActor.specRigidbody.CollideWithTileMap = false; BehaviorSpeculator component = Peanut.prefab.GetComponent <BehaviorSpeculator>(); component.AttackBehaviors.Add(new CustomCompanionBehaviours.PeanutAttackBehaviour()); component.MovementBehaviors.Add(new CustomCompanionBehaviours.SimpleCompanionApproach()); component.MovementBehaviors.Add(new CompanionFollowPlayerBehavior { IdleAnimations = new string[] { "idle" } }); //SET UP ANIMATIONS AIAnimator aiAnimator = companionController.aiAnimator; aiAnimator. aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.FourWayCardinal, Flipped = new DirectionalAnimation.FlipType[4], AnimNames = new string[] { "move_north", "move_east", "move_south", "move_west", } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.FourWayCardinal, Flipped = new DirectionalAnimation.FlipType[4], AnimNames = new string[] { "idle_north", "idle_east", "idle_south", "idle_west", } }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "attack", anim = new DirectionalAnimation { Prefix = "attack", Type = DirectionalAnimation.DirectionType.FourWayCardinal, Flipped = new DirectionalAnimation.FlipType[4], AnimNames = new string[] { "attack_west", "attack_east", "attack_north", "attack_south" } } }, }; //ADD SPRITES TO THE ANIMATIONS if (Peanut.PeanutAnimationCollection == null) { Peanut.PeanutAnimationCollection = SpriteBuilder.ConstructCollection(Peanut.prefab, "PeanutCompanion_Collection"); UnityEngine.Object.DontDestroyOnLoad(Peanut.PeanutAnimationCollection); for (int i = 0; i < Peanut.spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(Peanut.spritePaths[i], Peanut.PeanutAnimationCollection); } //Idling Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 0, 1, 2, 3 }, "idle_west", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 4, 5, 6, 7, }, "idle_east", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 8, 9, 10, 11, }, "idle_north", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 12, 13, 14, 15, }, "idle_south", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 4f; //Running Animation SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 16, 17, 18, 19, 20, 21 }, "move_west", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 22, 23, 24, 25, 26, 27 }, "move_east", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 28, 29, 30, 31, 32, 33 }, "move_north", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 34, 35, 36, 37, 38, 39 }, "move_south", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 8f; //ATTACKING ANIMATIONS SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 40, 41, 42, 43, 44, 45, 46, 47 }, "attack_east", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 48, 49, 50, 51, 52, 53, 54, 55 }, "attack_west", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 56, 57, 58, 59, 60, 61, 62 }, "attack_north", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; SpriteBuilder.AddAnimation(companionController.spriteAnimator, Peanut.PeanutAnimationCollection, new List <int> { 63, 64, 65, 66, 67, 68, 69, 70 }, "attack_south", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; } } }
public static void BuildPrefab() { // bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { //float AttackAnimationThingAMaWhatIts = 0.5f; prefab = EnemyBuilder.BuildPrefab("ammomimic_cakaaaa", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false); var companion = prefab.AddComponent <EnemyBehavior>(); companion.aiActor.knockbackDoer.weight = 100; companion.aiActor.MovementSpeed = 2.5f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 50f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = true; companion.aiActor.aiAnimator.HitReactChance = 0f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = true; companion.aiActor.healthHaver.ForceSetCurrentHealth(20f); companion.aiActor.CollisionKnockbackStrength = 1f; companion.aiActor.procedurallyOutlined = false; companion.aiActor.CanTargetPlayers = false; companion.aiActor.healthHaver.SetHealthMaximum(20f, null, false); companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.PlayerCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.PlayerBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 13, ManualHeight = 13, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "die", anim = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "die_left", "die_right" } } } }; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle_left", "idle_right" } }; aiAnimator.MoveAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "run_left", "run_right" } }; bool flag3 = ammomimicCollection == null; if (flag3) { ammomimicCollection = SpriteBuilder.ConstructCollection(prefab, "ammomimic_Collection"); UnityEngine.Object.DontDestroyOnLoad(ammomimicCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], ammomimicCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, }, "run_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, }, "run_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0 }, "die_right", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; SpriteBuilder.AddAnimation(companion.spriteAnimator, ammomimicCollection, new List <int> { 0 }, "die_left", tk2dSpriteAnimationClip.WrapMode.Once).fps = 8f; //companion.aiActor.gameObject.AddComponent<ColliderComponent>(); var bs = prefab.GetComponent <BehaviorSpeculator>(); prefab.GetComponent <ObjectVisibilityManager>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("9b4fb8a2a60a457f90dcf285d34143ac").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; shootpoint = new GameObject("ammosh"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("ammosh").gameObject; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; Game.Enemies.Add("cak:ammomimic", companion.aiActor); ItemsMod.Strings.Enemies.Set("#AMMOMIMIC", "Ammomimic"); companion.aiActor.OverrideDisplayName = "#AMMOMIMIC"; companion.aiActor.ActorName = "#AMMOMIMIC"; companion.aiActor.name = "#AMMOMIMIC"; } } }
public static void BuildPrefab() { // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93"); bool flag = prefab != null || BossBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { prefab = BossBuilder.BuildPrefab("Flame Chamber", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false, true); var companion = prefab.AddComponent <EnemyBehavior2>(); companion.aiActor.knockbackDoer.weight = 200; companion.aiActor.MovementSpeed = 6f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = true; companion.aiActor.IgnoreForRoomClear = false; companion.aiActor.aiAnimator.HitReactChance = 0.05f; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = true; companion.aiActor.healthHaver.ForceSetCurrentHealth(500f); companion.aiActor.healthHaver.SetHealthMaximum(500f); companion.aiActor.CollisionKnockbackStrength = 5f; companion.aiActor.procedurallyOutlined = true; companion.aiActor.CanTargetPlayers = true; ItemsMod.Strings.Enemies.Set("#FLAMECHAMBER", "Killinder"); ItemsMod.Strings.Enemies.Set("#????", "???"); ItemsMod.Strings.Enemies.Set("#SUBTITLE", "FLAME CHAMBER"); ItemsMod.Strings.Enemies.Set("#QUOTE", "THE 36 CHAMBERS"); companion.aiActor.healthHaver.overrideBossName = "#FLAMECHAMBER"; companion.aiActor.OverrideDisplayName = "#FLAMECHAMBER"; companion.aiActor.ActorName = "#FLAMECHAMBER"; companion.aiActor.name = "#FLAMECHAMBER"; companion.aiActor.SetIsFlying(true, "Flying Enemy", true, true); prefab.name = companion.aiActor.OverrideDisplayName; GenericIntroDoer miniBossIntroDoer = prefab.AddComponent <GenericIntroDoer>(); miniBossIntroDoer.triggerType = GenericIntroDoer.TriggerType.PlayerEnteredRoom; miniBossIntroDoer.initialDelay = 0.15f; miniBossIntroDoer.cameraMoveSpeed = 14; miniBossIntroDoer.specifyIntroAiAnimator = null; miniBossIntroDoer.BossMusicEvent = "Play_MUS_Boss_Theme_Beholster"; companion.aiActor.ShadowObject = EnemyDatabase.GetOrLoadByGuid("c00390483f394a849c36143eb878998f").ShadowObject; companion.aiActor.HasShadow = true; miniBossIntroDoer.PreventBossMusic = false; miniBossIntroDoer.InvisibleBeforeIntroAnim = false; miniBossIntroDoer.preIntroAnim = string.Empty; miniBossIntroDoer.preIntroDirectionalAnim = string.Empty; miniBossIntroDoer.introAnim = "intro"; 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 = "#FLAMECHAMBER", bossSubtitleString = "#SUBTITLE", bossQuoteString = "#QUOTE", bossSpritePxOffset = IntVector2.Zero, topLeftTextPxOffset = IntVector2.Zero, bottomRightTextPxOffset = IntVector2.Zero, bgColor = ExtendedColours.orange }; miniBossIntroDoer.SkipBossCard = false; miniBossIntroDoer.portraitSlideSettings.bossArtSprite = BossCardTexture; companion.aiActor.healthHaver.bossHealthBar = HealthHaver.BossBarType.MainBar; miniBossIntroDoer.SkipFinalizeAnimation = true; miniBossIntroDoer.RegenerateCache(); //BehaviorSpeculator aIActor = EnemyDatabase.GetOrLoadByGuid("465da2bb086a4a88a803f79fe3a27677").behaviorSpeculator; //Tools.DebugInformation(aIActor); ///// companion.aiActor.healthHaver.SetHealthMaximum(500f, null, false); companion.aiActor.specRigidbody.PixelColliders.Clear(); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 10, ManualWidth = 50, ManualHeight = 50, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 10, ManualWidth = 50, ManualHeight = 50, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "idle", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; DirectionalAnimation almostdone = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "intro", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "intro", anim = almostdone } }; DirectionalAnimation done2 = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "bigeyes", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "bigeyes", anim = done2 } }; DirectionalAnimation done32 = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.Single, Prefix = "eyes", AnimNames = new string[1], Flipped = new DirectionalAnimation.FlipType[1] }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation> { new AIAnimator.NamedDirectionalAnimation { name = "eyes", anim = done32 } }; bool flag3 = BishopCollection == null; if (flag3) { BishopCollection = SpriteBuilder.ConstructCollection(prefab, "FlameChamber_Collection"); UnityEngine.Object.DontDestroyOnLoad(BishopCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], BishopCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int> { 0, 1, 2, 3 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int> { 4, 5, 6, 7, 8, 9, 34 }, "intro", tk2dSpriteAnimationClip.WrapMode.Once).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int> { 31 }, "bigeyes", tk2dSpriteAnimationClip.WrapMode.Once).fps = 6f; SpriteBuilder.AddAnimation(companion.spriteAnimator, BishopCollection, new List <int> { 32 }, "eyes", tk2dSpriteAnimationClip.WrapMode.Once).fps = 6f; } var bs = prefab.GetComponent <BehaviorSpeculator>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; shootpoint = new GameObject("attach"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("attach").gameObject; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = false, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f } }; float[] angles = { 45, 135, 225, 135 }; bs.MovementBehaviors = new List <MovementBehaviorBase> { new PingPongAroundBehavior2 { startingAngles = angles } }; bs.AttackBehaviorGroup.AttackBehaviors = new List <AttackBehaviorGroup.AttackGroupItem> { new AttackBehaviorGroup.AttackGroupItem() { Probability = 1, Behavior = new ShootBehavior { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(ChamberShot)), LeadAmount = 0f, AttackCooldown = 4.5f, TellAnimation = "bigeyes", RequiresLineOfSight = false, StopDuring = ShootBehavior.StopType.Attack, Uninterruptible = true }, NickName = "Lucky Sixes" }, new AttackBehaviorGroup.AttackGroupItem() { Probability = 1, Behavior = new ShootBehavior { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(FireLine)), LeadAmount = 0f, AttackCooldown = 4.5f, TellAnimation = "bigeyes", RequiresLineOfSight = false, StopDuring = ShootBehavior.StopType.Attack, Uninterruptible = true }, NickName = "Fire In Da Hole" }, new AttackBehaviorGroup.AttackGroupItem() { Probability = 1.5f, Behavior = new TeleportBehavior() { AttackableDuringAnimation = true, AllowCrossRoomTeleportation = false, teleportRequiresTransparency = false, hasOutlinesDuringAnim = true, ManuallyDefineRoom = false, StayOnScreen = true, AvoidWalls = true, GoneTime = 0.7f, OnlyTeleportIfPlayerUnreachable = false, MinDistanceFromPlayer = 7f, MaxDistanceFromPlayer = -1f, teleportInBulletScript = new CustomBulletScriptSelector(typeof(PoofScript)), teleportOutBulletScript = new CustomBulletScriptSelector(typeof(PoofScript)), AttackCooldown = 5f, InitialCooldown = 0f, RequiresLineOfSight = false, roomMax = new Vector2(0, 0), roomMin = new Vector2(0, 0), GlobalCooldown = 0.5f, Cooldown = 1f, InitialCooldownVariance = 0f, goneAttackBehavior = null, IsBlackPhantom = false, GroupName = null, GroupCooldown = 0f, MinRange = 3, Range = 10, MinHealthThreshold = 0, AccumulateHealthThresholds = true, targetAreaStyle = null, HealthThresholds = new float[0], MinWallDistance = 1, }, NickName = "Flameport" }, new AttackBehaviorGroup.AttackGroupItem() { Probability = 0.5f, Behavior = new ShootBehavior { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(ShotgunBall)), LeadAmount = 0f, TellAnimation = "eyes", AttackCooldown = 4.5f, RequiresLineOfSight = false, StopDuring = ShootBehavior.StopType.Attack, Uninterruptible = true }, NickName = "Large Shotgunball" }, }; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; companion.aiActor.CollisionSetsPlayerOnFire = true; companion.aiActor.EffectResistances = new ActorEffectResistance[] { new ActorEffectResistance() { resistAmount = 1, resistType = EffectResistanceType.Fire }, }; Game.Enemies.Add("cak:flamechamber", companion.aiActor); } }
public static void BuildPrefab() { // source = EnemyDatabase.GetOrLoadByGuid("c50a862d19fc4d30baeba54795e8cb93"); bool flag = prefab != null || EnemyBuilder.Dictionary.ContainsKey(guid); bool flag2 = flag; if (!flag2) { prefab = EnemyBuilder.BuildPrefab("mimekin", guid, spritePaths[0], new IntVector2(0, 0), new IntVector2(8, 9), false); var companion = prefab.AddComponent <EnemyBehavior>(); companion.aiActor.knockbackDoer.weight = 200; companion.aiActor.MovementSpeed = 2f; companion.aiActor.healthHaver.PreventAllDamage = false; companion.aiActor.CollisionDamage = 1f; companion.aiActor.HasShadow = false; companion.aiActor.IgnoreForRoomClear = false; companion.aiActor.specRigidbody.CollideWithOthers = true; companion.aiActor.specRigidbody.CollideWithTileMap = true; companion.aiActor.PreventFallingInPitsEver = true; companion.aiActor.healthHaver.ForceSetCurrentHealth(25f); companion.aiActor.CollisionKnockbackStrength = 5f; companion.aiActor.CanTargetPlayers = true; companion.aiActor.healthHaver.SetHealthMaximum(25f, null, false); companion.aiActor.specRigidbody.PixelColliders.Clear(); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyCollider, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 12, ManualHeight = 26, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }); companion.aiActor.specRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyHitBox, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = 0, ManualOffsetY = 0, ManualWidth = 12, ManualHeight = 26, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); companion.aiActor.CorpseObject = EnemyDatabase.GetOrLoadByGuid("c0ff3744760c4a2eb0bb52ac162056e6").CorpseObject; companion.aiActor.PreventBlackPhantom = false; AIAnimator aiAnimator = companion.aiAnimator; aiAnimator.IdleAnimation = new DirectionalAnimation { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[2], AnimNames = new string[] { "idle", "idle_two" } }; bool flag3 = RoyalJesterletCollection == null; if (flag3) { RoyalJesterletCollection = SpriteBuilder.ConstructCollection(prefab, "RoyalJesterlet_Collection"); UnityEngine.Object.DontDestroyOnLoad(RoyalJesterletCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], RoyalJesterletCollection); } SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int> { 2, 3 }, "idle", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; SpriteBuilder.AddAnimation(companion.spriteAnimator, RoyalJesterletCollection, new List <int> { 0, 1 }, "idle_two", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 7f; } var bs = prefab.GetComponent <BehaviorSpeculator>(); BehaviorSpeculator behaviorSpeculator = EnemyDatabase.GetOrLoadByGuid("01972dee89fc4404a5c408d50007dad5").behaviorSpeculator; bs.OverrideBehaviors = behaviorSpeculator.OverrideBehaviors; bs.OtherBehaviors = behaviorSpeculator.OtherBehaviors; bs.TargetBehaviors = new List <TargetBehaviorBase> { new TargetPlayerBehavior { Radius = 35f, LineOfSight = false, ObjectPermanence = true, SearchInterval = 0.25f, PauseOnTargetSwitch = false, PauseTime = 0.25f } }; shootpoint = new GameObject("f**k"); shootpoint.transform.parent = companion.transform; shootpoint.transform.position = companion.sprite.WorldCenter; GameObject m_CachedGunAttachPoint = companion.transform.Find("f**k").gameObject; bs.AttackBehaviors = new List <AttackBehaviorBase>() { new ShootBehavior() { ShootPoint = m_CachedGunAttachPoint, BulletScript = new CustomBulletScriptSelector(typeof(TransparentBulletScript)), LeadAmount = 0f, InitialCooldown = 3f, AttackCooldown = 5f, RequiresLineOfSight = false, ChargeTime = 1f, Uninterruptible = true }, }; bs.InstantFirstTick = behaviorSpeculator.InstantFirstTick; bs.TickInterval = behaviorSpeculator.TickInterval; bs.PostAwakenDelay = behaviorSpeculator.PostAwakenDelay; bs.RemoveDelayOnReinforce = behaviorSpeculator.RemoveDelayOnReinforce; bs.OverrideStartingFacingDirection = behaviorSpeculator.OverrideStartingFacingDirection; bs.StartingFacingDirection = behaviorSpeculator.StartingFacingDirection; bs.SkipTimingDifferentiator = behaviorSpeculator.SkipTimingDifferentiator; Game.Enemies.Add("cak:mimekin", companion.aiActor); SpriteBuilder.AddSpriteToCollection("CakeMod/Resources/mimekin/mime_left_001", SpriteBuilder.ammonomiconCollection); if (companion.GetComponent <EncounterTrackable>() != null) { UnityEngine.Object.Destroy(companion.GetComponent <EncounterTrackable>()); } companion.encounterTrackable = companion.gameObject.AddComponent <EncounterTrackable>(); companion.encounterTrackable.journalData = new JournalEntry(); companion.encounterTrackable.EncounterGuid = "cak:mimekin"; companion.encounterTrackable.prerequisites = new DungeonPrerequisite[0]; companion.encounterTrackable.journalData.SuppressKnownState = false; companion.encounterTrackable.journalData.IsEnemy = true; companion.encounterTrackable.journalData.SuppressInAmmonomicon = false; companion.encounterTrackable.ProxyEncounterGuid = ""; companion.encounterTrackable.journalData.AmmonomiconSprite = "CakeMod/Resources/mimekin/mime_left_001"; companion.encounterTrackable.journalData.enemyPortraitSprite = ItemAPI.ResourceExtractor.GetTextureFromResource("CakeMod\\Resources\\mimepic.png"); ItemsMod.Strings.Enemies.Set("#THE_MIME", "Mime Kin"); ItemsMod.Strings.Enemies.Set("#THE_MIME_SHORTDESC", "Invisible Man"); ItemsMod.Strings.Enemies.Set("#THE_MIME_LONGDESC", "Masters of mimicking and mimery, these clever bullets use their connection to a silent force to enchant bullets with a fraction of their power."); companion.encounterTrackable.journalData.PrimaryDisplayName = "#THE_MIME"; companion.encounterTrackable.journalData.NotificationPanelDescription = "#THE_MIME_SHORTDESC"; companion.encounterTrackable.journalData.AmmonomiconFullEntry = "#THE_MIME_LONGDESC"; EnemyBuilder.AddEnemyToDatabase(companion.gameObject, "cak:mimekin"); EnemyDatabase.GetEntry("cak:mimekin").ForcedPositionInAmmonomicon = 32; EnemyDatabase.GetEntry("cak:mimekin").isInBossTab = false; EnemyDatabase.GetEntry("cak:mimekin").isNormalEnemy = true; } }
public static void BuildPrefab() { if (pikaPrefab != null || CompanionBuilder.companionDictionary.ContainsKey(guid)) { Tools.PrintError("Tried to make the same Pikachu prefab twice!"); return; } pikaPrefab = CompanionBuilder.BuildPrefab("Pikachu", guid, spritePaths[0], new IntVector2(3, 2), new IntVector2(8, 9)); var pika = pikaPrefab.AddComponent <PikaBehavior>(); var aiAnimator = pika.aiAnimator; aiAnimator.MoveAnimation = new DirectionalAnimation() { //animation Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None }, AnimNames = new string[] { "run_right", "run_left" }, }; aiAnimator.IdleAnimation = new DirectionalAnimation() { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None }, AnimNames = new string[] { "idle_right", "idle_left" }, }; var attackAnim = new DirectionalAnimation() { Type = DirectionalAnimation.DirectionType.TwoWayHorizontal, Flipped = new DirectionalAnimation.FlipType[] { DirectionalAnimation.FlipType.None, DirectionalAnimation.FlipType.None }, AnimNames = new string[] { "attack_right", "attack_left" }, }; aiAnimator.OtherAnimations = new List <AIAnimator.NamedDirectionalAnimation>() { new AIAnimator.NamedDirectionalAnimation() { name = "attack", anim = attackAnim } }; if (pikaCollection == null) { pikaCollection = SpriteBuilder.ConstructCollection(pikaPrefab, "Pikachu_Collection"); GameObject.DontDestroyOnLoad(pikaCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], pikaCollection); } SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 0, 1, 2, 3 }, "idle_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5; SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 4, 5, 6, 7 }, "idle_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 5; SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 8, 9, 10, 11, 12, 13 }, "run_left", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10; SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 14, 15, 16, 17, 18, 19 }, "run_right", tk2dSpriteAnimationClip.WrapMode.Loop).fps = 10; SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 20, 21 }, "attack_left", tk2dSpriteAnimationClip.WrapMode.RandomLoop).fps = 20; SpriteBuilder.AddAnimation(pika.spriteAnimator, pikaCollection, new List <int>() { 22, 23 }, "attack_right", tk2dSpriteAnimationClip.WrapMode.RandomLoop).fps = 20; } pika.aiActor.MovementSpeed = 7f; pika.specRigidbody.Reinitialize(); var bs = pika.behaviorSpeculator; bs.AttackBehaviors.Add(new ElectricityAttackBehavior()); bs.MovementBehaviors.Add(new ApproachEnemiesBehavior()); bs.MovementBehaviors.Add(new CompanionFollowPlayerBehavior() { IdleAnimations = new string[] { "idle" } }); GameObject.DontDestroyOnLoad(pikaPrefab); FakePrefab.MarkAsFakePrefab(pikaPrefab); pikaPrefab.SetActive(false); }