Пример #1
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            headsetBuff            = ScriptableObject.CreateInstance <BuffDef>();
            headsetBuff.buffColor  = new Color(0.5f, 0.575f, 0.95f);
            headsetBuff.canStack   = true;
            headsetBuff.isDebuff   = false;
            headsetBuff.name       = "TKSATHeadset";
            headsetBuff.iconSprite = Addressables.LoadAssetAsync <Sprite>("RoR2/Base/ShockNearby/texBuffTeslaIcon.tif")
                                     .WaitForCompletion();
            ContentAddition.AddBuffDef(headsetBuff);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/headsetIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "You Broke It");
            LanguageAPI.Add(achiDescToken, "Kill a boss with a maximum damage H3AD-5T v2 explosion.");
            itemDef.unlockableDef = unlockable;
        }
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/deadManSwitchIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Nine Lives");
            LanguageAPI.Add(achiDescToken, "Survive falling to low health 9 times in the same run (must return to above 50% health each time).");
            itemDef.unlockableDef = unlockable;

            deadManSwitchBuff            = ScriptableObject.CreateInstance <BuffDef>();
            deadManSwitchBuff.buffColor  = Color.red;
            deadManSwitchBuff.canStack   = false;
            deadManSwitchBuff.isDebuff   = false;
            deadManSwitchBuff.isCooldown = true;
            deadManSwitchBuff.name       = "TKSATDeadManSwitch";
            deadManSwitchBuff.iconSprite = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/MiscIcons/deadManSwitchBuff.png");
            ContentAddition.AddBuffDef(deadManSwitchBuff);
        }
Пример #3
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            speedBuff            = ScriptableObject.CreateInstance <BuffDef>();
            speedBuff.buffColor  = Color.white;
            speedBuff.canStack   = true;
            speedBuff.isDebuff   = false;
            speedBuff.name       = "TKSATSkeinSpeed";
            speedBuff.iconSprite = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/MiscIcons/skeinSpeedBuffIcon.png");
            ContentAddition.AddBuffDef(speedBuff);

            resistBuff            = ScriptableObject.CreateInstance <BuffDef>();
            resistBuff.buffColor  = Color.white;
            resistBuff.canStack   = true;
            resistBuff.isDebuff   = false;
            resistBuff.name       = "TKSATSkeinResist";
            resistBuff.iconSprite = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/MiscIcons/skeinResistBuffIcon.png");
            ContentAddition.AddBuffDef(resistBuff);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/skeinIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Phenomenal Cosmic Power");
            LanguageAPI.Add(achiDescToken, "Complete all 4 Item Set achievements from Tinker's Satchel.");
            itemDef.unlockableDef = unlockable;
        }
Пример #4
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var tempPfb = LegacyResourcesAPI.Load <GameObject>("Prefabs/Projectiles/GravSphere").InstantiateClone("temporary setup prefab", false);
            var proj    = tempPfb.GetComponent <RoR2.Projectile.ProjectileSimple>();

            proj.desiredForwardSpeed = 0;
            proj.lifetime            = PULL_VFX_DURATION;
            var projCtrl = tempPfb.GetComponent <RoR2.Projectile.ProjectileController>();

            projCtrl.procCoefficient = 0;
            var dmg = proj.GetComponent <RoR2.Projectile.ProjectileDamage>();

            dmg.damage  = 0f;
            dmg.enabled = false;
            var force = tempPfb.GetComponent <RadialForce>();

            force.enabled = false;

            var sph = tempPfb.transform.Find("Sphere");

            sph.gameObject.SetActive(false);

            var sps     = tempPfb.transform.Find("Sparks");
            var spsPart = sps.GetComponent <ParticleSystem>();
            var spsMain = spsPart.main;

            spsMain.startSpeed = new ParticleSystem.MinMaxCurve(10f, 30f);
            var spsShape = spsPart.shape;

            spsShape.radius = 4f;

            blackHolePrefab = tempPfb.InstantiateClone("KleinBottleProcPrefab", true);
            UnityEngine.Object.Destroy(tempPfb);

            ContentAddition.AddProjectile(blackHolePrefab);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/kleinBottleIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Can't Touch This");
            LanguageAPI.Add(achiDescToken, "Block, or take 1 or less points of damage from, 3 attacks in a row.");
            itemDef.unlockableDef = unlockable;
        }
Пример #5
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/triBroochIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Rasputin");
            LanguageAPI.Add(achiDescToken, "As a team: stun, then freeze, then ignite the same enemy within 3 seconds.");
            itemDef.unlockableDef = unlockable;
        }
Пример #6
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/defibIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Medic!");
            LanguageAPI.Add(achiDescToken, "Item Set: Shareable healing. Have 4 or more (of 7) at once.");
            itemDef.unlockableDef = unlockable;
        }
Пример #7
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/kintsugiIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Planned Obsolescence");
            LanguageAPI.Add(achiDescToken, "Have at least 20 items, at least half of which are broken/consumed/scrapped.");
            itemDef.unlockableDef = unlockable;
        }
Пример #8
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/mugIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "...So I Fired Again");
            LanguageAPI.Add(achiDescToken, "Miss 1,000 TOTAL projectile attacks.");
            itemDef.unlockableDef = unlockable;

            whiffsStatDef = RoR2.Stats.StatDef.Register("tksatMugAchievementProgress", RoR2.Stats.StatRecordType.Sum, RoR2.Stats.StatDataType.ULong, 0);
        }
Пример #9
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/shootToHealIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "One-Man Band");
            LanguageAPI.Add(achiDescToken, "Item Set: Musical instruments. Have 3 or more (of 5) at once.");
            itemDef.unlockableDef = unlockable;

            R2API.Networking.NetworkingAPI.RegisterMessageType <MsgHealTargetAndSelf>();
        }
Пример #10
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var partMtl = Addressables.LoadAssetAsync <Material>("RoR2/Base/Common/VFX/matCritImpactHeavy.mat")
                          .WaitForCompletion();

            vfxPrefab.transform.Find("Background/IndParticleR").GetComponent <ParticleSystemRenderer>().material = partMtl;
            vfxPrefab.transform.Find("Background/IndParticleL").GetComponent <ParticleSystemRenderer>().material = partMtl;

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/motionTrackerIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Why Won't You Die?!");
            LanguageAPI.Add(achiDescToken, "Fully charge a Teleporter without killing the boss or dying.");
            itemDef.unlockableDef = unlockable;
        }
Пример #11
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/recombobulatorIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Risktaker");
            LanguageAPI.Add(achiDescToken, "Recycle a rare or boss item.");
            equipmentDef.unlockableDef = unlockable;

            if (Compat_ClassicItems.enabled)
            {
                LanguageAPI.Add("TKSAT_RECOMBOBULATOR_CI_EMBRYO_APPEND", "\n<style=cStack>Beating Embryo: Roll twice and choose the rarer result.</style>");
                Compat_ClassicItems.RegisterEmbryoHook(equipmentDef, "TKSAT_RECOMBOBULATOR_CI_EMBRYO_APPEND", () => "TKSAT.QuantumRecombobulator");
            }
        }
Пример #12
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            bouncyPhysmat = Addressables.LoadAssetAsync <PhysicMaterial>("RoR2/Base/Common/physmatBouncy.physicMaterial")
                            .WaitForCompletion();

            var tspp = new GameObject("TkSatTempSetupPrefabPrefab");
            var tsp  = tspp.InstantiateClone("TkSatTempSetupPrefab", false);

            GameObject.Destroy(tspp);
            tsp.AddComponent <EffectComponent>();
            var dstroy = tsp.AddComponent <DestroyOnTimer>();

            dstroy.duration = 1f;
            tsp.AddComponent <RandomPinballSFXOnEnable>();
            var vfx = tsp.AddComponent <VFXAttributes>();

            vfx.vfxPriority  = VFXAttributes.VFXPriority.Medium;
            vfx.vfxIntensity = VFXAttributes.VFXIntensity.Medium;
            tsp.AddComponent <NetworkIdentity>();
            effectPrefab = tsp.InstantiateClone("TkSatPinballSFXHandler");
            GameObject.Destroy(tsp);
            ContentAddition.AddEffect(effectPrefab);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/pinballIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Woe, Explosions Be Upon Ye");
            LanguageAPI.Add(achiDescToken, "Item Set: Damage-on-kill. Have 3 or more (of 6) at once.");
            itemDef.unlockableDef = unlockable;
        }
Пример #13
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            moustacheBuff            = ScriptableObject.CreateInstance <BuffDef>();
            moustacheBuff.buffColor  = new Color(0.85f, 0.2f, 0.2f);
            moustacheBuff.canStack   = true;
            moustacheBuff.isDebuff   = false;
            moustacheBuff.name       = "TKSATMoustache";
            moustacheBuff.iconSprite = iconResource;
            ContentAddition.AddBuffDef(moustacheBuff);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/moustacheIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Big Brawl");
            LanguageAPI.Add(achiDescToken, "Participate in a very busy fight.");
            itemDef.unlockableDef = unlockable;
        }
Пример #14
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            var tempPfb = LegacyResourcesAPI.Load <GameObject>("Prefabs/Projectiles/GravSphere").InstantiateClone("temporary setup prefab", false);
            var proj    = tempPfb.GetComponent <RoR2.Projectile.ProjectileSimple>();

            proj.desiredForwardSpeed = 0;
            proj.lifetime            = 0.5f;
            var projCtrl = tempPfb.GetComponent <RoR2.Projectile.ProjectileController>();

            projCtrl.procCoefficient = 0;
            var dmg = proj.GetComponent <RoR2.Projectile.ProjectileDamage>();

            dmg.damage  = 0f;
            dmg.enabled = false;
            var force = tempPfb.GetComponent <RadialForce>();

            force.enabled = false;

            var sph = tempPfb.transform.Find("Sphere");

            sph.gameObject.SetActive(false);

            var sps      = tempPfb.transform.Find("Sparks");
            var spsPart  = sps.GetComponent <ParticleSystem>();
            var spsShape = spsPart.shape;

            spsShape.radius = 30f;

            blackHolePrefab = tempPfb.InstantiateClone("LodestoneProcPrefab", true);
            UnityEngine.Object.Destroy(tempPfb);

            ContentAddition.AddProjectile(blackHolePrefab);

            validObjectNamesRB.UnionWith(new[] {
                "HealPack(Clone)",
                "StickyBomb(Clone)",
                "TkSatPixieMovePack(Clone)",
                "TkSatPixieAttackPack(Clone)",
                "TkSatPixieDamagePack(Clone)",
                "TkDatPixieArmorPack(Clone)",
                "AmmoPack(Clone)",
                "BonusMoneyPack(Clone)",
                "ShurikenProjectile(Clone)",
                "FireMeatBall(Clone)",
                "DeathProjectile(Clone)",
                "BeamSphere(Clone)",
                "GravSphere(Clone)",
                "Sawmerang(Clone)",
                "LunarSunProjectile(Clone)"
            });
            validObjectNamesNoRB.UnionWith(new[] { //may have RB, but should teleport anyways
                "DeskplantWard(Clone)",
                "CrippleWard(Clone)",
                "WarbannerWard(Clone)",
                "DamageZoneWard(Clone)"
            });

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/lodestoneIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Drive Me Closer");
            LanguageAPI.Add(achiDescToken, "Item Set: Close-range. Have 6 or more (of 15) at once.");
            equipmentDef.unlockableDef = unlockable;

            if (Compat_ClassicItems.enabled)
            {
                LanguageAPI.Add("TKSAT_LODESTONE_CI_EMBRYO_APPEND", "\n<style=cStack>Beating Embryo: Double range and damage.</style>");
                Compat_ClassicItems.RegisterEmbryoHook(equipmentDef, "TKSAT_LODESTONE_CI_EMBRYO_APPEND", () => "TKSAT.Lodestone");
            }
        }
Пример #15
0
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            genericSpeedBoostBuff            = ScriptableObject.CreateInstance <BuffDef>();
            genericSpeedBoostBuff.buffColor  = Color.red;
            genericSpeedBoostBuff.canStack   = true;
            genericSpeedBoostBuff.isDebuff   = false;
            genericSpeedBoostBuff.name       = modInfo.shortIdentifier + "GoFasterUnhandled";
            genericSpeedBoostBuff.iconSprite = Addressables.LoadAssetAsync <Sprite>("RoR2/Base/Common/texMovespeedBuffIcon.tif")
                                               .WaitForCompletion();
            ContentAddition.AddBuffDef(genericSpeedBoostBuff);

            engiSpeedBoostBuff            = ScriptableObject.CreateInstance <BuffDef>();
            engiSpeedBoostBuff.buffColor  = Color.red;
            engiSpeedBoostBuff.canStack   = true;
            engiSpeedBoostBuff.isDebuff   = false;
            engiSpeedBoostBuff.name       = modInfo.shortIdentifier + "GoFasterEngi";
            engiSpeedBoostBuff.iconSprite = Addressables.LoadAssetAsync <Sprite>("RoR2/Base/Common/texMovespeedBuffIcon.tif")
                                            .WaitForCompletion();
            ContentAddition.AddBuffDef(engiSpeedBoostBuff);

            var tmpPrefab = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Captain/CaptainAirstrikeAltProjectile.prefab")
                            .WaitForCompletion()
                            .InstantiateClone("TkSatTempSetupPrefab", false);

            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CommandoBody/CommandoBodyRoll"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CommandoBody/CommandoSlide"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/HuntressBody/HuntressBlink"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/HuntressBody/HuntressMiniBlink"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/Bandit2Body/ThrowSmokeBomb"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/ToolbotBody/ToolbotBodyToolbotDash"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/EngiBody/EngiBodyPlaceBubbleShield"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/EngiBody/EngiHarpoons"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/MageBody/MageBodyWall"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/MercBody/MercBodyFocusedAssault"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/MercBody/MercBodyAssaulter"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/TreebotBody/TreebotBodySonicBoom"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/TreebotBody/TreebotBodyPlantSonicBoom"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/LoaderBody/ChargeFist"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/LoaderBody/ChargeZapFist"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CrocoBody/CrocoLeap"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CrocoBody/CrocoChainableLeap"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CaptainBody/PrepAirstrike"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CaptainBody/PrepAirstrikeAlt"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CaptainBody/CallAirstrike"));
            handledSkillDefs.Add(LegacyResourcesAPI.Load <SkillDef>("SkillDefs/CaptainBody/CallAirstrikeAlt"));

            skillIconOverlay = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/SkillIcons/GoFasterStripesOverlay.png");

            /*var ghost = tmpPrefab.GetComponent<ProjectileController>().ghostPrefab.InstantiateClone("TkSatTempSetupPrefab2", false);
             *
             * ghost.AddComponent<SwooceTrajectoryPredictor>();
             *
             * tmpPrefab.GetComponent<ProjectileController>().ghostPrefab = ghost.InstantiateClone("TkSatCaptainStrikeJumperAltGhost", false);
             * GameObject.Destroy(ghost);*/

            tmpPrefab.AddComponent <SwooceTrajectoryPredictor>();

            captainStrikeJumperAltProjectile = tmpPrefab.InstantiateClone("TkSatCaptainStrikeJumperAltProjectile", true);

            GameObject.Destroy(tmpPrefab);

            var achiNameToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_NAME";
            var achiDescToken = $"ACHIEVEMENT_TKSAT_{name.ToUpper(System.Globalization.CultureInfo.InvariantCulture)}_DESCRIPTION";

            unlockable                 = ScriptableObject.CreateInstance <UnlockableDef>();
            unlockable.cachedName      = $"TkSat_{name}Unlockable";
            unlockable.sortScore       = 200;
            unlockable.achievementIcon = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/UnlockIcons/goFasterIcon.png");
            ContentAddition.AddUnlockableDef(unlockable);
            LanguageAPI.Add(achiNameToken, "Faster Than Recommended");
            LanguageAPI.Add(achiDescToken, "Trimp.");
            itemDef.unlockableDef = unlockable;
        }