static void RegisterStates()
 {
     LoadoutAPI.AddSkill(typeof(FireVoidspikes));
     LoadoutAPI.AddSkill(typeof(GroundPound));
     LoadoutAPI.AddSkill(typeof(BlinkState));
     LoadoutAPI.AddSkill(typeof(RevertFormState));
 }
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            LanguageAPI.Add("BULLETSTORM_DODGEUTILITY_REPLACEMENT_NAME", "Dodge Roll");
            LanguageAPI.Add("BULLETSTORM_DODGEUTILITY_REPLACEMENT_DESCRIPTION", "Teaching of the Dodge Roll:\n" +
                            "Roll forward, gaining brief invulnerability.");

            LoadoutAPI.AddSkill(typeof(Lunar.TeleportUtilitySkillState));
            dodgeRollSkillDef = ScriptableObject.CreateInstance <SkillDef>();
            dodgeRollSkillDef.activationState            = new SerializableEntityStateType(typeof(Lunar.TeleportUtilitySkillState));
            dodgeRollSkillDef.activationStateMachineName = "Weapon";
            dodgeRollSkillDef.baseMaxStock                 = 1;
            dodgeRollSkillDef.baseRechargeInterval         = 8f;
            dodgeRollSkillDef.beginSkillCooldownOnSkillEnd = true;
            dodgeRollSkillDef.canceledFromSprinting        = false;
            dodgeRollSkillDef.fullRestockOnAssign          = true;
            dodgeRollSkillDef.interruptPriority            = InterruptPriority.Skill;
            dodgeRollSkillDef.isBullets             = false;
            dodgeRollSkillDef.isCombatSkill         = true;
            dodgeRollSkillDef.mustKeyPress          = false;
            dodgeRollSkillDef.noSprint              = true;
            dodgeRollSkillDef.rechargeStock         = 1;
            dodgeRollSkillDef.requiredStock         = 1;
            dodgeRollSkillDef.shootDelay            = 0f;
            dodgeRollSkillDef.stockToConsume        = 1;
            dodgeRollSkillDef.icon                  = Resources.Load <Sprite>("textures/difficultyicons/texDifficultyEclipse8Icon");
            dodgeRollSkillDef.skillDescriptionToken = "BULLETSTORM_DODGEUTILITY_REPLACEMENT_DESCRIPTION";
            dodgeRollSkillDef.skillName             = "BULLETSTORM_DODGEUTILITY_REPLACEMENT_NAME";
            dodgeRollSkillDef.skillNameToken        = "BULLETSTORM_DODGEUTILITY_REPLACEMENT_NAME";

            LoadoutAPI.AddSkillDef(dodgeRollSkillDef);
        }
Esempio n. 3
0
        private static void CreateSecondary()
        {
            LoadoutAPI.AddSkill(typeof(SpiritLift));
            SkillDef secondarySkillDef = ScriptableObject.CreateInstance <SkillDef>();

            secondarySkillDef.activationState            = new SerializableEntityStateType(typeof(SpiritLift));
            secondarySkillDef.activationStateMachineName = "Weapon";
            secondarySkillDef.baseMaxStock                 = 1;
            secondarySkillDef.baseRechargeInterval         = 5f;
            secondarySkillDef.beginSkillCooldownOnSkillEnd = true;
            secondarySkillDef.canceledFromSprinting        = false;
            secondarySkillDef.fullRestockOnAssign          = true;
            secondarySkillDef.interruptPriority            = InterruptPriority.PrioritySkill;
            secondarySkillDef.isBullets             = false;
            secondarySkillDef.isCombatSkill         = true;
            secondarySkillDef.mustKeyPress          = false;
            secondarySkillDef.noSprint              = false;
            secondarySkillDef.rechargeStock         = 1;
            secondarySkillDef.requiredStock         = 1;
            secondarySkillDef.shootDelay            = 0.5f;
            secondarySkillDef.stockToConsume        = 1;
            secondarySkillDef.skillDescriptionToken = "AAAAAAAAAAAAAAAAAAAAAA";
            secondarySkillDef.skillName             = "aaa";
            secondarySkillDef.skillNameToken        = "aa";

            LoadoutAPI.AddSkillDef(secondarySkillDef);
            SkillFamily secondarySkillFamily = skillLocator.secondary.skillFamily;

            secondarySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = secondarySkillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(secondarySkillDef.skillNameToken, false, null)
            };
        }
 private void RegisterStates()
 {
     LoadoutAPI.AddSkill(typeof(DiscipleSwarm));
     LoadoutAPI.AddSkill(typeof(HealingWisp));
     LoadoutAPI.AddSkill(typeof(PrepShotgun));
     LoadoutAPI.AddSkill(typeof(FireShotgun));
 }
Esempio n. 5
0
 public static void RegisterStates()
 {
     LoadoutAPI.AddSkill(typeof(BaseMeleeAttack));
     LoadoutAPI.AddSkill(typeof(SlashCombo));
     LoadoutAPI.AddSkill(typeof(Shoot));
     LoadoutAPI.AddSkill(typeof(Roll));
     LoadoutAPI.AddSkill(typeof(ThrowBomb));
 }
Esempio n. 6
0
        private void CreateDefaultSpecial()
        {
            var skillDef = ScriptableObject.CreateInstance <ReactivatableSkillDef>();
            var variant  = new SkillFamily.Variant
            {
                skillDef       = skillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node("SniperDefaultSpecial", false)
            };
            var skillLoc = this.sniperBody.GetComponent <SkillLocator>();
            var ind      = skillLoc.special.skillFamily.variants.Length;

            Array.Resize <SkillFamily.Variant>(ref skillLoc.special.skillFamily.variants, ind + 1);
            skillLoc.special.skillFamily.variants[ind] = variant;
            LoadoutAPI.AddSkillDef(skillDef);
            LoadoutAPI.AddSkill(typeof(SniperKnife));
            LoadoutAPI.AddSkill(typeof(SniperKnifeBlink));
            LoadoutAPI.AddSkill(typeof(SniperKnifeSlash));

            skillDef.activationState            = new SerializableEntityStateType(typeof(SniperKnife));
            skillDef.activationStateMachineName = "Weapon";
            skillDef.interruptPriority          = InterruptPriority.PrioritySkill;
            skillDef.icon = Resources.Load <Sprite>("NotAPath");

            skillDef.reactivationState             = new SerializableEntityStateType(typeof(SniperKnifeBlink));
            skillDef.reactivationInterruptPriority = InterruptPriority.PrioritySkill;
            skillDef.reactivationIcon = Resources.Load <Sprite>("NotAPath");

            skillDef.skillName             = "SniperKnife";
            skillDef.skillNameToken        = "SNIPER_SPECIAL_NAME";
            skillDef.skillDescriptionToken = "SNIPER_SPECIAL_DESC";

            skillDef.isBullets = false;
            skillDef.beginSkillCooldownOnSkillEnd = false;
            skillDef.isCombatSkill         = true;
            skillDef.noSprint              = true;
            skillDef.canceledFromSprinting = false;
            skillDef.mustKeyPress          = true;
            skillDef.fullRestockOnAssign   = true;

            skillDef.reactivationNoSprint         = false;
            skillDef.reactivationRestartsCooldown = false;

            skillDef.baseMaxStock   = 1;
            skillDef.rechargeStock  = 1;
            skillDef.requiredStock  = 1;
            skillDef.stockToConsume = 1;

            skillDef.reactivationRequiredStock  = 0;
            skillDef.reactivationStockToConsume = 0;

            skillDef.baseRechargeInterval = 10f;
            skillDef.shootDelay           = 0.1f;

            skillDef.reactivationDelay  = 0.2f;
            skillDef.reactivationWindow = 5f;
        }
Esempio n. 7
0
        internal static void RegisterSkills()
        {
            LoadoutAPI.AddSkill(typeof(LaunchMissile));
            LoadoutAPI.AddSkill(typeof(NuclearNova));
            LoadoutAPI.AddSkill(typeof(SpawnNova));

            missileLaunchDef = NewSkillDef(new SerializableEntityStateType(typeof(LaunchMissile)), "Weapon");
            nuclearNovaDef   = NewSkillDef(new SerializableEntityStateType(typeof(NuclearNova)), "Body");
            spawnNovaDef     = NewSkillDef(new SerializableEntityStateType(typeof(SpawnNova)), "Body");
        }
Esempio n. 8
0
 void RegisterStates()
 {
     // register the entitystates for networking reasons
     LoadoutAPI.AddSkill(typeof(WispFireball));
     LoadoutAPI.AddSkill(typeof(WispHasteSkillState));
     LoadoutAPI.AddSkill(typeof(WispInvigorateSkillState));
     LoadoutAPI.AddSkill(typeof(WispSiphon));
     LoadoutAPI.AddSkill(typeof(WispBurst));
     LoadoutAPI.AddSkill(typeof(Spawn));
 }
Esempio n. 9
0
        public static void RegisterStates()
        {
            LoadoutAPI.AddSkill(typeof(Punch));

            LoadoutAPI.AddSkill(typeof(ChargeSuperJump));
            LoadoutAPI.AddSkill(typeof(LaunchSuperJump));

            LoadoutAPI.AddSkill(typeof(Crouch));
            LoadoutAPI.AddSkill(typeof(Weighdown));

            LoadoutAPI.AddSkill(typeof(Rage));
            LoadoutAPI.AddSkill(typeof(NoAttackState));
        }
Esempio n. 10
0
        public static void RegisterStates()
        {
            LoadoutAPI.AddSkill(typeof(PaladinMain));
            LoadoutAPI.AddSkill(typeof(SpawnState));
            LoadoutAPI.AddSkill(typeof(BaseEmote));
            LoadoutAPI.AddSkill(typeof(PraiseTheSun));
            LoadoutAPI.AddSkill(typeof(PointDown));
            LoadoutAPI.AddSkill(typeof(Rest));
            LoadoutAPI.AddSkill(typeof(Drip));

            LoadoutAPI.AddSkill(typeof(Slash));

            LoadoutAPI.AddSkill(typeof(SpinSlashEntry));
            LoadoutAPI.AddSkill(typeof(GroundSweep));
            LoadoutAPI.AddSkill(typeof(AirSlam));
            LoadoutAPI.AddSkill(typeof(AirSlamAlt));

            LoadoutAPI.AddSkill(typeof(ChargeLightningSpear));
            LoadoutAPI.AddSkill(typeof(ThrowLightningSpear));

            LoadoutAPI.AddSkill(typeof(LunarShards));

            LoadoutAPI.AddSkill(typeof(QuickstepSimple));

            LoadoutAPI.AddSkill(typeof(AimHeal));
            LoadoutAPI.AddSkill(typeof(CastHeal));

            LoadoutAPI.AddSkill(typeof(ChannelHealZone));
            LoadoutAPI.AddSkill(typeof(CastChanneledHealZone));

            LoadoutAPI.AddSkill(typeof(ChannelTorpor));
            LoadoutAPI.AddSkill(typeof(CastChanneledTorpor));

            LoadoutAPI.AddSkill(typeof(ChannelWarcry));
            LoadoutAPI.AddSkill(typeof(CastChanneledWarcry));

            LoadoutAPI.AddSkill(typeof(MaceSlam));

            // and now apply custom states to our prefabs- probably shouldn't go here but meh

            EntityStateMachine paladinStateMachine = Prefabs.paladinPrefab.GetComponent <EntityStateMachine>();

            paladinStateMachine.mainStateType    = new SerializableEntityStateType(typeof(PaladinMain));
            paladinStateMachine.initialStateType = new SerializableEntityStateType(typeof(SpawnState));

            EntityStateMachine lunarKnightStateMachine = Prefabs.lunarKnightPrefab.GetComponent <EntityStateMachine>();

            lunarKnightStateMachine.mainStateType    = new SerializableEntityStateType(typeof(PaladinMain));
            lunarKnightStateMachine.initialStateType = new SerializableEntityStateType(typeof(SpawnState));
        }
Esempio n. 11
0
        public static void RegisterStates()
        {
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireScattergun));
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireForceNature));

            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireScoutPistol));
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireCleaver));
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireMilk));

            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireMarkFan));
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireBleedBat));
            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.FireSandman));

            LoadoutAPI.AddSkill(typeof(ROR2_Scout.States.ActivateRage));
        }
        public override void SetupAttributes()
        {
            base.SetupAttributes();

            LanguageAPI.Add("BULLETSTORM_UTILITY_REPLACEMENT_NAME", "Teleport");
            LanguageAPI.Add("BULLETSTORM_UTILITY_REPLACEMENT_DESCRIPTION", "Bloodied Scarf:\n" +
                            "Teleport 10m <style=cStack>(+5m per stack)</style> away and gain 25% damage vulnerability <style=cStack>(+25% per stack)</style> for 1 second.");

            LoadoutAPI.AddSkill(typeof(Lunar.TeleportUtilitySkillState));
            teleportSkillDef = ScriptableObject.CreateInstance <SkillDef>();
            teleportSkillDef.activationState            = new SerializableEntityStateType(typeof(Lunar.TeleportUtilitySkillState));
            teleportSkillDef.activationStateMachineName = "Weapon";
            teleportSkillDef.baseMaxStock                 = 1;
            teleportSkillDef.baseRechargeInterval         = 12f;
            teleportSkillDef.beginSkillCooldownOnSkillEnd = true;
            teleportSkillDef.canceledFromSprinting        = true;
            teleportSkillDef.fullRestockOnAssign          = true;
            teleportSkillDef.interruptPriority            = InterruptPriority.Skill;
            teleportSkillDef.isBullets             = false;
            teleportSkillDef.isCombatSkill         = true;
            teleportSkillDef.mustKeyPress          = false;
            teleportSkillDef.noSprint              = true;
            teleportSkillDef.rechargeStock         = 1;
            teleportSkillDef.requiredStock         = 1;
            teleportSkillDef.shootDelay            = 0.5f;
            teleportSkillDef.stockToConsume        = 1;
            teleportSkillDef.icon                  = Resources.Load <Sprite>("textures/difficultyicons/texDifficultyEclipse1Icon");
            teleportSkillDef.skillDescriptionToken = "BULLETSTORM_UTILITY_REPLACEMENT_DESCRIPTION";
            teleportSkillDef.skillName             = "BULLETSTORM_UTILITY_REPLACEMENT_NAME";
            teleportSkillDef.skillNameToken        = "BULLETSTORM_UTILITY_REPLACEMENT_NAME";

            LoadoutAPI.AddSkillDef(teleportSkillDef);

            //teleportSkillDef
            var scarfDebuff = new CustomBuff(
                new BuffDef
            {
                buffColor = Color.blue,
                canStack  = true,
                isDebuff  = true,
                name      = "Bloodied Scarf: Vulnerable!",
            });

            ScarfVuln = BuffAPI.Add(scarfDebuff);
        }
Esempio n. 13
0
        private void CreateSecondary()
        {
            LoadoutAPI.AddSkill(typeof(FireGun));

            SkillDef secondarySkillDef = ScriptableObject.CreateInstance <SkillDef>();

            secondarySkillDef.activationState            = new SerializableEntityStateType(typeof(FireGun));
            secondarySkillDef.activationStateMachineName = "Weapon";
            secondarySkillDef.baseMaxStock                 = 1;
            secondarySkillDef.baseRechargeInterval         = 3f;
            secondarySkillDef.beginSkillCooldownOnSkillEnd = true;
            secondarySkillDef.canceledFromSprinting        = false;
            secondarySkillDef.fullRestockOnAssign          = false;
            secondarySkillDef.interruptPriority            = InterruptPriority.Skill;
            secondarySkillDef.isBullets             = false;
            secondarySkillDef.isCombatSkill         = true;
            secondarySkillDef.mustKeyPress          = false;
            secondarySkillDef.noSprint              = false;
            secondarySkillDef.rechargeStock         = 1;
            secondarySkillDef.requiredStock         = 1;
            secondarySkillDef.shootDelay            = 0.08f;
            secondarySkillDef.stockToConsume        = 1;
            secondarySkillDef.skillDescriptionToken = "HENRY_SECONDARY_DESCRIPTION";
            secondarySkillDef.skillName             = "aaa";
            secondarySkillDef.skillNameToken        = "HENRY_SECONDARY_NAME";
            secondarySkillDef.icon          = Assets.mainAssetBundle.LoadAsset <Sprite>("texSecondaryIcon");
            secondarySkillDef.keywordTokens = new string[] {
                // "KEYWORD_AGILE",
                // "KEYWORD_CHARGEABLE",
                // "KEYWORD_CLOCKED"
            };

            LanguageAPI.Add(secondarySkillDef.skillNameToken, "Gun Power");
            LanguageAPI.Add(secondarySkillDef.skillDescriptionToken, "Shoot your gun of Epicness, dealing x% damage.");

            LoadoutAPI.AddSkillDef(secondarySkillDef);
            SkillFamily secondarySkillFamily = skillLocator.secondary.skillFamily;

            secondarySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = secondarySkillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(secondarySkillDef.skillNameToken, false, null)
            };
        }
        private void ModifySkill()
        {
            LoadoutAPI.AddSkill(typeof(MirrorLaser));
            LoadoutAPI.AddSkill(typeof(SearchLaser));
            SkillDef newSkillDefRed = Object.Instantiate(drone1Skill);

            newSkillDefRed.activationState              = new SerializableEntityStateType(typeof(MirrorLaser));
            newSkillDefRed.baseRechargeInterval         = 5f;
            newSkillDefRed.beginSkillCooldownOnSkillEnd = true;
            newSkillDefRed.baseMaxStock        = 1;
            newSkillDefRed.fullRestockOnAssign = false;
            LoadoutAPI.AddSkillDef(newSkillDefRed);
            SkillLocator locator        = droneBodyRed.GetComponent <SkillLocator>();
            SkillFamily  newSkillFamily = Object.Instantiate(locator.primary.skillFamily);

            newSkillFamily.variants    = new SkillFamily.Variant[1];
            newSkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef      = newSkillDefRed,
                unlockableDef = null,
                viewableNode  = new ViewablesCatalog.Node("", false, null)
            };
            locator.primary.SetFieldValue("_skillFamily", newSkillFamily);
            LoadoutAPI.AddSkillFamily(newSkillFamily);
            SkillDef newSkillDefGreen = Object.Instantiate(drone1Skill);

            newSkillDefGreen.activationState              = new SerializableEntityStateType(typeof(SearchLaser));
            newSkillDefGreen.baseRechargeInterval         = newSkillDefRed.baseRechargeInterval;
            newSkillDefGreen.beginSkillCooldownOnSkillEnd = newSkillDefRed.beginSkillCooldownOnSkillEnd;
            newSkillDefGreen.baseMaxStock        = newSkillDefRed.baseMaxStock;
            newSkillDefGreen.fullRestockOnAssign = newSkillDefRed.fullRestockOnAssign;
            LoadoutAPI.AddSkillDef(newSkillDefGreen);
            locator                    = droneBodyGreen.GetComponent <SkillLocator>();
            newSkillFamily             = Object.Instantiate(locator.primary.skillFamily);
            newSkillFamily.variants    = new SkillFamily.Variant[1];
            newSkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef      = newSkillDefGreen,
                unlockableDef = null,
                viewableNode  = new ViewablesCatalog.Node("", false, null)
            };
            locator.primary.SetFieldValue("_skillFamily", newSkillFamily);
            LoadoutAPI.AddSkillFamily(newSkillFamily);
        }
Esempio n. 15
0
        private void AssignUtility(SkillLocator sk)
        {
            JetpackStateMachineSetup(sk.gameObject);

            SkillFamily utilitySkillFamily = ScriptableObject.CreateInstance <SkillFamily>();

            utilitySkillFamily.defaultVariantIndex = 0u;
            utilitySkillFamily.variants            = new SkillFamily.Variant[1];
            Reflection.SetFieldValue <SkillFamily>(sk.utility, "_skillFamily", utilitySkillFamily);

            SkillDef utilityJetpackDef = SkillDef.CreateInstance <SkillDef>();

            utilityJetpackDef.activationState            = new SerializableEntityStateType(typeof(Jetpack));
            utilityJetpackDef.activationStateMachineName = "Jetpack";
            utilityJetpackDef.baseMaxStock                 = 1;
            utilityJetpackDef.baseRechargeInterval         = 5f;
            utilityJetpackDef.beginSkillCooldownOnSkillEnd = true;
            utilityJetpackDef.canceledFromSprinting        = false;
            utilityJetpackDef.dontAllowPastMaxStocks       = true;
            utilityJetpackDef.forceSprintDuringState       = true;
            utilityJetpackDef.fullRestockOnAssign          = true;
            utilityJetpackDef.icon = Resources.Load <Sprite>(assetPrefix + ":skill3.png");
            utilityJetpackDef.interruptPriority     = InterruptPriority.Skill;
            utilityJetpackDef.isBullets             = false;
            utilityJetpackDef.isCombatSkill         = false;
            utilityJetpackDef.keywordTokens         = new string[] { "KEYWORD_PYRO_HEAT" };
            utilityJetpackDef.mustKeyPress          = false;
            utilityJetpackDef.noSprint              = false;
            utilityJetpackDef.rechargeStock         = 1;
            utilityJetpackDef.requiredStock         = 1;
            utilityJetpackDef.shootDelay            = 0f;
            utilityJetpackDef.skillName             = "Jetpack";
            utilityJetpackDef.skillNameToken        = "PYRO_UTILITY_NAME";
            utilityJetpackDef.skillDescriptionToken = "PYRO_UTILITY_DESC";
            utilityJetpackDef.stockToConsume        = 1;
            LoadoutAPI.AddSkill(typeof(Jetpack));
            LoadoutAPI.AddSkillDef(utilityJetpackDef);
            utilitySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = utilityJetpackDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(utilityJetpackDef.skillNameToken, false)
            };
        }
Esempio n. 16
0
        private void CreateDefaultPrimary()
        {
            var skillDef = ScriptableObject.CreateInstance <SkillDef>();
            var variant  = new SkillFamily.Variant
            {
                skillDef       = skillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node("SniperDefaultPrimary", false)
            };
            var skillLoc = this.sniperBody.GetComponent <SkillLocator>();
            var ind      = skillLoc.primary.skillFamily.variants.Length;

            Array.Resize <SkillFamily.Variant>(ref skillLoc.primary.skillFamily.variants, ind + 1);
            skillLoc.primary.skillFamily.variants[ind] = variant;
            LoadoutAPI.AddSkillDef(skillDef);
            LoadoutAPI.AddSkill(typeof(SniperShoot));
            LoadoutAPI.AddSkill(typeof(SniperReload));
            LoadoutAPI.AddSkill(typeof(SniperLoaded));

            skillDef.activationState            = new SerializableEntityStateType(typeof(SniperShoot));
            skillDef.activationStateMachineName = "Load";
            skillDef.interruptPriority          = InterruptPriority.Skill;
            skillDef.icon = Resources.Load <Sprite>("NotAPath");

            skillDef.skillName             = "SniperShoot";
            skillDef.skillNameToken        = "SNIPER_PRIMARY_NAME";
            skillDef.skillDescriptionToken = "SNIPER_PRIMARY_DESC";

            skillDef.isBullets = false;
            skillDef.beginSkillCooldownOnSkillEnd = false;
            skillDef.isCombatSkill         = true;
            skillDef.noSprint              = true;
            skillDef.canceledFromSprinting = false;
            skillDef.mustKeyPress          = true;
            skillDef.fullRestockOnAssign   = true;

            skillDef.baseMaxStock   = 1;
            skillDef.rechargeStock  = 1;
            skillDef.requiredStock  = 1;
            skillDef.stockToConsume = 1;

            skillDef.baseRechargeInterval = 0f;
            skillDef.shootDelay           = 0.1f;
        }
Esempio n. 17
0
        private void CreatePrimary()
        {
            //Register our melee attack.
            LoadoutAPI.AddSkill(typeof(HenryMeleeAttack));

            SteppedSkillDef primarySkillDef = ScriptableObject.CreateInstance <SteppedSkillDef>();

            primarySkillDef.activationState            = new SerializableEntityStateType(typeof(HenryMeleeAttack));
            primarySkillDef.activationStateMachineName = "Weapon";
            primarySkillDef.baseMaxStock                 = 1;
            primarySkillDef.baseRechargeInterval         = 0f;
            primarySkillDef.beginSkillCooldownOnSkillEnd = true;
            primarySkillDef.canceledFromSprinting        = false;
            primarySkillDef.fullRestockOnAssign          = true;
            primarySkillDef.interruptPriority            = InterruptPriority.Any;
            primarySkillDef.isBullets             = false;
            primarySkillDef.isCombatSkill         = true;
            primarySkillDef.mustKeyPress          = false;
            primarySkillDef.noSprint              = false;
            primarySkillDef.rechargeStock         = 1;
            primarySkillDef.requiredStock         = 1;
            primarySkillDef.shootDelay            = 0.1f;
            primarySkillDef.stockToConsume        = 0;
            primarySkillDef.skillDescriptionToken = "HENRY_PRIMARY_DESCRIPTION";
            primarySkillDef.skillName             = "HENRY_PRIMARY_NAME";
            primarySkillDef.skillNameToken        = "HENRY_PRIMARY_NAME";
            primarySkillDef.icon          = Assets.mainAssetBundle.LoadAsset <Sprite>("texPrimaryIcon");
            primarySkillDef.keywordTokens = new string[] {
                "KEYWORD_AGILE",
            };

            LanguageAPI.Add(primarySkillDef.skillNameToken, "Sword Slash");
            LanguageAPI.Add(primarySkillDef.skillDescriptionToken, "<style=cIsUtility>Agile</style>. Swing your sword of Epic Awesomeness, dealing X% damage to enemies!!");

            LoadoutAPI.AddSkillDef(primarySkillDef);
            SkillFamily primarySkillFamily = skillLocator.primary.skillFamily;

            primarySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = primarySkillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(primarySkillDef.skillNameToken, false, null)
            };
        }
Esempio n. 18
0
        private static void ModifyPrimary()
        {
            SkillLocator skillLocator = archWisp.GetComponent <SkillLocator>();

            if (skillLocator)
            {
                LoadoutAPI.AddSkill(typeof(ArchWispSummoner));
                LoadoutAPI.AddSkill(typeof(ChargeSummon));
                SkillFamily skillFamily = skillLocator.primary.skillFamily;
                SkillDef    primary     = skillFamily.variants[skillFamily.defaultVariantIndex].skillDef;

                primary.rechargeStock        = 1;
                primary.shootDelay           = .3f;
                primary.stockToConsume       = 1;
                primary.baseMaxStock         = 3;
                primary.baseRechargeInterval = 5;
                primary.activationState      = new EntityStates.SerializableEntityStateType(typeof(ChargeSummon));
            }
        }
Esempio n. 19
0
        public static void RegisterStates()
        {
            LoadoutAPI.AddSkill(typeof(StockPassive));
            LoadoutAPI.AddSkill(typeof(CritPassive));
            LoadoutAPI.AddSkill(typeof(ResPassive));
            LoadoutAPI.AddSkill(typeof(HealPassive));

            LoadoutAPI.AddSkill(typeof(FireSyringeGun));
            LoadoutAPI.AddSkill(typeof(FireHealSyringeGun));
            LoadoutAPI.AddSkill(typeof(FireCrossbow));

            LoadoutAPI.AddSkill(typeof(ChooseHealTarget));

            LoadoutAPI.AddSkill(typeof(ActivateUber));
            LoadoutAPI.AddSkill(typeof(Weighdown));

            LoadoutAPI.AddSkill(typeof(Rage));
            LoadoutAPI.AddSkill(typeof(NoAttackState));
        }
Esempio n. 20
0
        public static void Setup()
        {
            //SUMMON BROOD
            LoadoutAPI.AddSkill(typeof(VTStates.States.Acrid.SummonBrood));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Acrid.SummonBrood));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 1;
                mySkillDef.baseRechargeInterval         = 40f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = true;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Summon a swarm of 4 miniature acrids that inherit your items";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SUMMONBROOD_SPECIAL";
                mySkillDef.skillNameToken        = "Pack leader";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/crocobody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.special.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
        }
Esempio n. 21
0
        private void AssignPrimary(SkillLocator sk)
        {
            SkillFamily primarySkillFamily = ScriptableObject.CreateInstance <SkillFamily>();

            primarySkillFamily.defaultVariantIndex = 0u;
            primarySkillFamily.variants            = new SkillFamily.Variant[1];
            Reflection.SetFieldValue <SkillFamily>(sk.primary, "_skillFamily", primarySkillFamily);

            SkillDef primaryScorchDef = SkillDef.CreateInstance <SkillDef>();

            primaryScorchDef.activationState            = new SerializableEntityStateType(typeof(Scorch));
            primaryScorchDef.activationStateMachineName = "Weapon";
            primaryScorchDef.baseMaxStock                 = 1;
            primaryScorchDef.baseRechargeInterval         = 0f;
            primaryScorchDef.beginSkillCooldownOnSkillEnd = false;
            primaryScorchDef.canceledFromSprinting        = false;
            primaryScorchDef.dontAllowPastMaxStocks       = true;
            primaryScorchDef.forceSprintDuringState       = false;
            primaryScorchDef.fullRestockOnAssign          = true;
            primaryScorchDef.icon = Resources.Load <Sprite>(assetPrefix + ":skill1.png");
            primaryScorchDef.interruptPriority     = InterruptPriority.Any;
            primaryScorchDef.isBullets             = true;
            primaryScorchDef.isCombatSkill         = true;
            primaryScorchDef.keywordTokens         = new string[] { };
            primaryScorchDef.mustKeyPress          = false;
            primaryScorchDef.noSprint              = true;
            primaryScorchDef.rechargeStock         = 1;
            primaryScorchDef.requiredStock         = 1;
            primaryScorchDef.shootDelay            = 0f;
            primaryScorchDef.skillName             = "Scorch";
            primaryScorchDef.skillNameToken        = "PYRO_PRIMARY_NAME";
            primaryScorchDef.skillDescriptionToken = "PYRO_PRIMARY_DESC";
            primaryScorchDef.stockToConsume        = 1;
            LoadoutAPI.AddSkill(typeof(Scorch));
            LoadoutAPI.AddSkillDef(primaryScorchDef);
            primarySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = primaryScorchDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(primaryScorchDef.skillNameToken, false)
            };
        }
        public void AddNewFireboltSkill()
        {
            GameObject mageCharacterBody = Resources.Load <GameObject>("prefabs/characterbodies/MageBody");

            SkillLocator skillLocator = mageCharacterBody.GetComponent <SkillLocator>();

            SkillFamily skillFamily = skillLocator.primary.skillFamily;

            SteppedSkillDef mySkillDef = spoofFireBoltSkillDef(skillFamily.variants[0].skillDef as SteppedSkillDef);

            LoadoutAPI.AddSkillDef(mySkillDef);
            LoadoutAPI.AddSkill(typeof(FireFastBolt));

            Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

            skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant {
                skillDef       = mySkillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
            };
        }
        private void RegisterSkillType(List <ICustomSkill> skills)
        {
            if (skills.Count > 0)
            {
                SkillFamily family = GetSkillFamily(skills);

                foreach (var skill in skills)
                {
                    LoadoutAPI.AddSkill(skill.GetType());
                }
                foreach (var variant in family.variants)
                {
                    LoadoutAPI.AddSkillDef(variant.skillDef);
                }
                LoadoutAPI.AddSkillFamily(family);

                switch (skills.First().SkillType)
                {
                case SkillType.Primary:
                    locator.primary.SetFieldValue <SkillFamily>("_skillFamily", family);
                    break;

                case SkillType.Secondary:
                    locator.secondary.SetFieldValue <SkillFamily>("_skillFamily", family);
                    break;

                case SkillType.Special:
                    locator.special.SetFieldValue <SkillFamily>("_skillFamily", family);
                    break;

                case SkillType.Utility:
                    locator.utility.SetFieldValue <SkillFamily>("_skillFamily", family);
                    break;

                case SkillType.Passive:
                    locator.passiveSkill.SetFieldValue <SkillFamily>("_skillFamily", family);
                    break;
                }
            }
        }
Esempio n. 24
0
        public static void RegisterStates()
        {
            LoadoutAPI.AddSkill(typeof(HenryMain));

            LoadoutAPI.AddSkill(typeof(BaseEmote));
            LoadoutAPI.AddSkill(typeof(Rest));
            LoadoutAPI.AddSkill(typeof(Dance));

            LoadoutAPI.AddSkill(typeof(BaseMeleeAttack));
            LoadoutAPI.AddSkill(typeof(SlashCombo));
            LoadoutAPI.AddSkill(typeof(PunchCombo));

            LoadoutAPI.AddSkill(typeof(Shoot));
            LoadoutAPI.AddSkill(typeof(ShootUzi));

            LoadoutAPI.AddSkill(typeof(Roll));

            LoadoutAPI.AddSkill(typeof(ThrowBomb));

            LoadoutAPI.AddSkill(typeof(StingerEntry));
            LoadoutAPI.AddSkill(typeof(Stinger));
            LoadoutAPI.AddSkill(typeof(DashPunch));
        }
Esempio n. 25
0
        private static void CreateUtility()
        {
            LoadoutAPI.AddSkill(typeof(Weapon.GrandParentBoss.PortalJump));
            SkillDef utilitySkillDef = ScriptableObject.CreateInstance <SkillDef>();

            utilitySkillDef.activationState            = new SerializableEntityStateType(typeof(EntityStates.GrandParentBoss.Offspring));
            utilitySkillDef.activationStateMachineName = "Weapon";
            utilitySkillDef.baseMaxStock                 = 1;
            utilitySkillDef.baseRechargeInterval         = 3f;
            utilitySkillDef.beginSkillCooldownOnSkillEnd = true;
            utilitySkillDef.canceledFromSprinting        = false;
            utilitySkillDef.fullRestockOnAssign          = true;
            utilitySkillDef.interruptPriority            = InterruptPriority.PrioritySkill;
            utilitySkillDef.isBullets             = false;
            utilitySkillDef.isCombatSkill         = false;
            utilitySkillDef.mustKeyPress          = false;
            utilitySkillDef.noSprint              = false;
            utilitySkillDef.rechargeStock         = 1;
            utilitySkillDef.requiredStock         = 1;
            utilitySkillDef.shootDelay            = 0.5f;
            utilitySkillDef.stockToConsume        = 1;
            utilitySkillDef.skillDescriptionToken = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
            utilitySkillDef.skillName             = "AAAAAAAAAAAAAA";
            utilitySkillDef.skillNameToken        = "AAAAAAAAAAAA";
            //utilitySkillDef.icon = Sprite.Create(this.OVERCLOCK, new Rect(0, 0, this.OVERCLOCK.width, this.OVERCLOCK.height), new Vector2(.5f, .5f));

            LoadoutAPI.AddSkillDef(utilitySkillDef);
            SkillFamily utilitySkillFamily = skillLocator.utility.skillFamily;

            utilitySkillFamily.variants[0] = new SkillFamily.Variant
            {
                skillDef       = utilitySkillDef,
                unlockableName = "",
                viewableNode   = new ViewablesCatalog.Node(utilitySkillDef.skillNameToken, false, null)
            };
        }
Esempio n. 26
0
 private void RegisterSkillTypes()
 {
     _ = LoadoutAPI.AddSkill(typeof(States.Special.IonSurge));
     _ = LoadoutAPI.AddSkill(typeof(States.Main.AltArtiPassive));
 }
        private void skillsetup()
        {
            myCharacter.GetComponent <SkillLocator>().passiveSkill = new SkillLocator.PassiveSkill()
            {
                skillNameToken        = "Blubber",
                enabled               = true,
                skillDescriptionToken = "You are immune to being frozen or stunned!"
            };

            LoadoutAPI.AddSkill(typeof(VTStates.States.Scavenger.PrepSack));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Scavenger.PrepSack));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 16;
                mySkillDef.baseRechargeInterval         = 1f;
                mySkillDef.beginSkillCooldownOnSkillEnd = true;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = false;
                mySkillDef.interruptPriority            = InterruptPriority.PrioritySkill;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = true;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 16;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 16;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Throw a stack of stashed thqwibs, they activate any on-kill items you have.";
                mySkillDef.skillName             = "VT_SCAVSTASH_SPECIAL";
                mySkillDef.skillNameToken        = "Stashed Friends";

                LoadoutAPI.AddSkillDef(mySkillDef);
                GameObject   gameObject  = myCharacter;
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.special.skillFamily;

                skillFamily.variants[0] =
                    new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }

            LoadoutAPI.AddSkill(typeof(VTStates.States.Scavenger.ScavFlamethrower));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Scavenger.ScavFlamethrower));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 1;
                mySkillDef.baseRechargeInterval         = 0f;
                mySkillDef.beginSkillCooldownOnSkillEnd = true;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = true;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = true;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0.5f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Shoot a powerful shotgun blast for 8 x 100% damage, Accuracy increases with fire rate.";
                mySkillDef.skillName             = "VT_SCAVSHOT_PRIMARY";
                mySkillDef.skillNameToken        = "Compressed Air Shotgun";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = myCharacter;
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.primary.skillFamily;


                skillFamily.variants[0] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }


            LoadoutAPI.AddSkill(typeof(VTStates.States.Scavenger.ScavengerShotgun));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Scavenger.ScavengerShotgun));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 3;
                mySkillDef.baseRechargeInterval         = 4f;
                mySkillDef.beginSkillCooldownOnSkillEnd = true;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 3;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 3;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Shoot a powerful shotgun blast";
                mySkillDef.skillName             = "VT_SCAVSHOT_SECONDARY";
                mySkillDef.skillNameToken        = "Soupcan shotgun";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = myCharacter;
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.secondary.skillFamily;


                skillFamily.variants[0] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }

            LoadoutAPI.AddSkill(typeof(VTStates.States.Scavenger.ScavengerLeap));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Scavenger.ScavengerLeap));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 1;
                mySkillDef.baseRechargeInterval         = 4f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = true;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Propel yourself forwards";
                mySkillDef.skillName             = "VT_SCAVLEAP_UTILITY";
                mySkillDef.skillNameToken        = "Leap";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = myCharacter;
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.utility.skillFamily;


                skillFamily.variants[0] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
        }
Esempio n. 28
0
 void RegisterStates()
 {
     // register the entitystates for networking reasons
     LoadoutAPI.AddSkill(typeof(ExampleSurvivorFireArrow));
 }
Esempio n. 29
0
        public static void CreateDireseeker()
        {
            if (DiggerPlugin.direseekerInstalled)
            {
                AddUnlockComponent();
            }

            if (DiggerPlugin.fatAcrid.Value)
            {
                PerroGrande();
            }

            CreateProjectiles();

            LanguageAPI.Add("DIRESEEKER_BODY_NAME", "Direseeker");
            LanguageAPI.Add("DIRESEEKER_BODY_SUBTITLE", "Track and Kill");
            //LanguageAPI.Add("DIRESEEKER_BODY_LORE", "Direseeker\n\nDireseeker is a giant Elder Lemurian that acts as a boss in the Stage 4 area Magma Barracks. Upon defeating it, the player will unlock the Miner character for future playthroughs. The path leading to Direseeker's location only appears in one of the three variants of the level, and even then Direseeker may or may not spawn with random chance. Completing the teleporter event will also prevent it from spawning.\nNote that in online co-op the boss may spawn for the Host, but not others, although they can still damage it.\nActivating the Artifact of Kin does not prevent it from appearing.\n\nCategories: Enemies | Bosses | Unlisted Enemies\n\nLanguages: Español");
            LanguageAPI.Add("DIRESEEKER_BODY_LORE", "Legends tell of a monstrous beast that once roamed the underground barracks of Petrichor V.\n\nFeared by the bravest of survivors and the nastiest of monsters, the massive beast was unrivaled. It donned blood-red scales, tempered by hellfire. It had burning yellow eyes, with a glare so intense it made the largest of creatures stop dead in their tracks. It had smoldering breath, hot enough to melt metal in an instant.\n\nOnly once stopped by a survivor strong enough to slay Providence himself, it was believed that the beast had finally met its match.\n\n<style=cIsHealth>Until it showed its terrifying face once again.</style>");
            LanguageAPI.Add("DIRESEEKER_BODY_OUTRO_FLAVOR", "..and so it left, in search of new prey.");

            //skills and states
            LoadoutAPI.AddSkill(typeof(EntityStates.Direseeker.SpawnState));
            LoadoutAPI.AddSkill(typeof(EntityStates.Direseeker.ChargeUltraFireball));
            LoadoutAPI.AddSkill(typeof(EntityStates.Direseeker.FireUltraFireball));

            if (!DiggerPlugin.direseekerInstalled)
            {
                bodyPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/CharacterBodies/LemurianBruiserBody"), "DireseekerBody");

                CharacterBody bodyComponent = bodyPrefab.GetComponent <CharacterBody>();

                bodyComponent.name              = "DireseekerBody";
                bodyComponent.baseNameToken     = "DIRESEEKER_BODY_NAME";
                bodyComponent.subtitleNameToken = "DIRESEEKER_BODY_SUBTITLE";
                bodyComponent.baseMoveSpeed     = 11f;
                bodyComponent.baseMaxHealth     = 2800f;
                bodyComponent.levelMaxHealth    = 840f;
                bodyComponent.baseDamage        = 20f;
                bodyComponent.levelDamage       = 4f;
                bodyComponent.isChampion        = true;
                bodyComponent.portraitIcon      = Assets.mainAssetBundle.LoadAsset <Sprite>("texDireseekerIcon").texture;

                SkillSetup(bodyPrefab);

                var stateMachine = bodyComponent.GetComponentInChildren <EntityStateMachine>();
                if (stateMachine)
                {
                    stateMachine.initialStateType = new SerializableEntityStateType(typeof(EntityStates.Direseeker.SpawnState));
                }

                //resize

                bodyPrefab.GetComponent <ModelLocator>().modelBaseTransform.gameObject.transform.localScale *= 1.5f;
                //bodyPrefab.GetComponent<ModelLocator>().modelBaseTransform.gameObject.transform.Translate(new Vector3(0f, 5.6f, 0f));

                foreach (KinematicCharacterMotor kinematicCharacterMotor in bodyPrefab.GetComponentsInChildren <KinematicCharacterMotor>())
                {
                    kinematicCharacterMotor.SetCapsuleDimensions(kinematicCharacterMotor.Capsule.radius * 1.5f, kinematicCharacterMotor.Capsule.height * 1.5f, 1.5f);
                }

                //

                CharacterModel model = bodyPrefab.GetComponentInChildren <CharacterModel>();

                Material newMat = UnityEngine.Object.Instantiate <Material>(model.baseRendererInfos[0].defaultMaterial);
                newMat.SetTexture("_MainTex", Assets.mainAssetBundle.LoadAsset <Material>("matDireseeker").GetTexture("_MainTex"));
                newMat.SetTexture("_EmTex", Assets.mainAssetBundle.LoadAsset <Material>("matDireseeker").GetTexture("_EmissionMap"));
                newMat.SetFloat("_EmPower", 50f);

                model.baseRendererInfos[0].defaultMaterial = newMat;

                GameObject horn1 = Assets.mainAssetBundle.LoadAsset <GameObject>("DireHorn").InstantiateClone("DireseekerHorn", false);
                GameObject horn2 = Assets.mainAssetBundle.LoadAsset <GameObject>("DireHornBroken").InstantiateClone("DireseekerHornBroken", false);
                //GameObject rageFlame = Assets.mainAssetBundle.LoadAsset<GameObject>("DireseekerRageFlame").InstantiateClone("DireseekerRageFlame", false);
                GameObject burstFlame = Assets.mainAssetBundle.LoadAsset <GameObject>("DireseekerBurstFlame").InstantiateClone("DireseekerBurstFlame", false);

                ChildLocator childLocator = bodyPrefab.GetComponentInChildren <ChildLocator>();

                horn1.transform.SetParent(childLocator.FindChild("Head"));
                horn1.transform.localPosition = new Vector3(-2.5f, 1, -0.5f);
                horn1.transform.localRotation = Quaternion.Euler(new Vector3(45, 0, 90));
                horn1.transform.localScale    = new Vector3(100, 100, 100);

                horn2.transform.SetParent(childLocator.FindChild("Head"));
                horn2.transform.localPosition = new Vector3(2.5f, 1, -0.5f);
                horn2.transform.localRotation = Quaternion.Euler(new Vector3(45, 0, 90));
                horn2.transform.localScale    = new Vector3(100, -100, 100);

                /*rageFlame.transform.SetParent(childLocator.FindChild("Head"));
                 * rageFlame.transform.localPosition = new Vector3(0, 1, 0);
                 * rageFlame.transform.localRotation = Quaternion.Euler(new Vector3(270, 180, 0));
                 * rageFlame.transform.localScale = new Vector3(5, 5, 5);*/

                burstFlame.transform.SetParent(childLocator.FindChild("Head"));
                burstFlame.transform.localPosition = new Vector3(0, 1, 0);
                burstFlame.transform.localRotation = Quaternion.Euler(new Vector3(270, 180, 0));
                burstFlame.transform.localScale    = new Vector3(5, 5, 5);

                bodyPrefab.AddComponent <DireseekerController>().burstFlame = burstFlame.GetComponent <ParticleSystem>();

                Shader hotpoo = Resources.Load <Shader>("Shaders/Deferred/hgstandard");

                Material hornMat = horn1.GetComponentInChildren <MeshRenderer>().material;
                hornMat.shader = hotpoo;

                //add horns

                CharacterModel.RendererInfo[] infos    = model.baseRendererInfos;
                CharacterModel.RendererInfo[] newInfos = new CharacterModel.RendererInfo[]
                {
                    infos[0],
                    new CharacterModel.RendererInfo
                    {
                        renderer                 = horn1.GetComponentInChildren <MeshRenderer>(),
                        defaultMaterial          = hornMat,
                        defaultShadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On,
                        ignoreOverlays           = true
                    },
                    new CharacterModel.RendererInfo
                    {
                        renderer                 = horn2.GetComponentInChildren <MeshRenderer>(),
                        defaultMaterial          = hornMat,
                        defaultShadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On,
                        ignoreOverlays           = true
                    }
                };

                model.baseRendererInfos = newInfos;

                masterPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/CharacterMasters/LemurianBruiserMaster"), "DireseekerMaster");

                CharacterMaster master = masterPrefab.GetComponent <CharacterMaster>();

                master.bodyPrefab = bodyPrefab;
                master.isBoss     = false;

                DiggerPlugin.bodyPrefabs.Add(bodyPrefab);
                DiggerPlugin.masterPrefabs.Add(masterPrefab);

                if (DiggerPlugin.enableDireseeker.Value && !DiggerPlugin.direseekerInstalled)
                {
                    CharacterSpawnCard characterSpawnCard = ScriptableObject.CreateInstance <CharacterSpawnCard>();
                    characterSpawnCard.name               = "cscDireseeker";
                    characterSpawnCard.prefab             = masterPrefab;
                    characterSpawnCard.sendOverNetwork    = true;
                    characterSpawnCard.hullSize           = HullClassification.BeetleQueen;
                    characterSpawnCard.nodeGraphType      = MapNodeGroup.GraphType.Ground;
                    characterSpawnCard.requiredFlags      = NodeFlags.None;
                    characterSpawnCard.forbiddenFlags     = NodeFlags.TeleporterOK;
                    characterSpawnCard.directorCreditCost = 800;
                    characterSpawnCard.occupyPosition     = false;
                    characterSpawnCard.loadout            = new SerializableLoadout();
                    characterSpawnCard.noElites           = true;
                    characterSpawnCard.forbiddenAsBoss    = false;

                    DirectorCard card = new DirectorCard
                    {
                        spawnCard               = characterSpawnCard,
                        selectionWeight         = 1,
                        allowAmbushSpawn        = false,
                        preventOverhead         = false,
                        minimumStageCompletions = 2,
                        spawnDistance           = DirectorCore.MonsterSpawnDistance.Close
                    };

                    DirectorAPI.DirectorCardHolder direseekerCard = new DirectorAPI.DirectorCardHolder
                    {
                        Card                 = card,
                        MonsterCategory      = DirectorAPI.MonsterCategory.Champions,
                        InteractableCategory = DirectorAPI.InteractableCategory.None
                    };

                    DirectorAPI.MonsterActions += delegate(List <DirectorAPI.DirectorCardHolder> list, DirectorAPI.StageInfo stage)
                    {
                        if (stage.stage == DirectorAPI.Stage.AbyssalDepths)
                        {
                            if (!list.Contains(direseekerCard))
                            {
                                list.Add(direseekerCard);
                            }
                        }
                    };
                }
            }

            if (DiggerPlugin.enableDireseekerSurvivor.Value)
            {
                survivorPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/CharacterBodies/LemurianBruiserBody"), "DireseekerPlayerBody");

                CharacterBody bodyComponent2 = survivorPrefab.GetComponent <CharacterBody>();

                bodyComponent2.name              = "DireseekerPlayerBody";
                bodyComponent2.baseNameToken     = "DIRESEEKER_BODY_NAME";
                bodyComponent2.subtitleNameToken = "DIRESEEKER_BODY_SUBTITLE";
                bodyComponent2.baseMoveSpeed     = 11f;
                bodyComponent2.baseMaxHealth     = 2200f;
                bodyComponent2.levelMaxHealth    = 800f;
                bodyComponent2.baseRegen         = 0.5f;
                bodyComponent2.levelRegen        = 0.2f;
                bodyComponent2.baseDamage        = 20f;
                bodyComponent2.levelDamage       = 4f;
                bodyComponent2.isChampion        = false;
                bodyComponent2.portraitIcon      = Assets.mainAssetBundle.LoadAsset <Sprite>("texDireseekerPlayerIcon").texture;
                bodyComponent2.hideCrosshair     = true;

                SkillSetup(survivorPrefab);

                var stateMachine = survivorPrefab.GetComponentInChildren <EntityStateMachine>();
                if (stateMachine)
                {
                    stateMachine.initialStateType = new SerializableEntityStateType(typeof(EntityStates.Direseeker.SpawnState));
                }

                //resize

                survivorPrefab.GetComponent <ModelLocator>().modelBaseTransform.gameObject.transform.localScale *= 0.75f;
                survivorPrefab.transform.GetChild(0).localPosition = new Vector3(0, -2.75f, 0);
                survivorPrefab.transform.GetChild(2).localPosition = new Vector3(0, 0.8f, 1.5f);

                foreach (KinematicCharacterMotor kinematicCharacterMotor in survivorPrefab.GetComponentsInChildren <KinematicCharacterMotor>())
                {
                    kinematicCharacterMotor.SetCapsuleDimensions(kinematicCharacterMotor.Capsule.radius * 0.75f, kinematicCharacterMotor.Capsule.height * 0.75f, 0.75f);
                }

                //

                CharacterModel model2 = survivorPrefab.GetComponentInChildren <CharacterModel>();

                Material newMat = UnityEngine.Object.Instantiate <Material>(model2.baseRendererInfos[0].defaultMaterial);
                newMat.SetTexture("_MainTex", Assets.mainAssetBundle.LoadAsset <Material>("matDireseeker").GetTexture("_MainTex"));
                newMat.SetTexture("_EmTex", Assets.mainAssetBundle.LoadAsset <Material>("matDireseeker").GetTexture("_EmissionMap"));
                newMat.SetFloat("_EmPower", 50f);

                model2.baseRendererInfos[0].defaultMaterial = newMat;

                GameObject horn1b = Assets.mainAssetBundle.LoadAsset <GameObject>("DireHorn").InstantiateClone("DireseekerHorn", false);
                GameObject horn2b = Assets.mainAssetBundle.LoadAsset <GameObject>("DireHornBroken").InstantiateClone("DireseekerHornBroken", false);
                //GameObject rageFlame = Assets.mainAssetBundle.LoadAsset<GameObject>("DireseekerRageFlame").InstantiateClone("DireseekerRageFlame", false);
                GameObject burstFlame2 = Assets.mainAssetBundle.LoadAsset <GameObject>("DireseekerBurstFlame").InstantiateClone("DireseekerBurstFlame", false);

                ChildLocator childLocator2 = survivorPrefab.GetComponentInChildren <ChildLocator>();

                horn1b.transform.SetParent(childLocator2.FindChild("Head"));
                horn1b.transform.localPosition = new Vector3(-2.5f, 1, -0.5f);
                horn1b.transform.localRotation = Quaternion.Euler(new Vector3(45, 0, 90));
                horn1b.transform.localScale    = new Vector3(100, 100, 100);

                horn2b.transform.SetParent(childLocator2.FindChild("Head"));
                horn2b.transform.localPosition = new Vector3(2.5f, 1, -0.5f);
                horn2b.transform.localRotation = Quaternion.Euler(new Vector3(45, 0, 90));
                horn2b.transform.localScale    = new Vector3(100, -100, 100);

                /*rageFlame.transform.SetParent(childLocator.FindChild("Head"));
                 * rageFlame.transform.localPosition = new Vector3(0, 1, 0);
                 * rageFlame.transform.localRotation = Quaternion.Euler(new Vector3(270, 180, 0));
                 * rageFlame.transform.localScale = new Vector3(5, 5, 5);*/

                burstFlame2.transform.SetParent(childLocator2.FindChild("Head"));
                burstFlame2.transform.localPosition = new Vector3(0, 1, 0);
                burstFlame2.transform.localRotation = Quaternion.Euler(new Vector3(270, 180, 0));
                burstFlame2.transform.localScale    = new Vector3(5, 5, 5);

                survivorPrefab.AddComponent <DireseekerController>().burstFlame = burstFlame2.GetComponent <ParticleSystem>();

                Shader hotpoo = Resources.Load <Shader>("Shaders/Deferred/hgstandard");

                Material hornMat = horn1b.GetComponentInChildren <MeshRenderer>().material;
                hornMat.shader = hotpoo;

                //add horns

                CharacterModel.RendererInfo[] infos2    = model2.baseRendererInfos;
                CharacterModel.RendererInfo[] newInfos2 = new CharacterModel.RendererInfo[]
                {
                    infos2[0],
                    new CharacterModel.RendererInfo
                    {
                        renderer                 = horn1b.GetComponentInChildren <MeshRenderer>(),
                        defaultMaterial          = hornMat,
                        defaultShadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On,
                        ignoreOverlays           = true
                    },
                    new CharacterModel.RendererInfo
                    {
                        renderer                 = horn2b.GetComponentInChildren <MeshRenderer>(),
                        defaultMaterial          = hornMat,
                        defaultShadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On,
                        ignoreOverlays           = true
                    }
                };

                model2.baseRendererInfos = newInfos2;

                survivorPrefab.GetComponent <DeathRewards>().logUnlockableDef     = null;
                survivorPrefab.GetComponent <Interactor>().maxInteractionDistance = 5f;

                survivorPrefab.tag = "Player";

                SkinSetup();

                DiggerPlugin.bodyPrefabs.Add(survivorPrefab);

                GameObject displayPrefab = PrefabAPI.InstantiateClone(survivorPrefab.GetComponent <ModelLocator>().modelTransform.gameObject, "DireseekerDisplay", true);
                displayPrefab.AddComponent <NetworkIdentity>();
                displayPrefab.transform.localScale *= 0.5f;

                SurvivorDef survivorDef = new SurvivorDef
                {
                    displayNameToken = "DIRESEEKER_BODY_NAME",
                    descriptionToken = "MINER_DESCRIPTION",
                    primaryColor     = Color.red,
                    bodyPrefab       = survivorPrefab,
                    displayPrefab    = displayPrefab,
                    outroFlavorToken = "DIRESEEKER_BODY_OUTRO_FLAVOR"
                };

                SurvivorAPI.AddSurvivor(survivorDef);
            }
        }
Esempio n. 30
0
        public static void Setup()
        {
            LoadoutAPI.AddSkill(typeof(VTStates.States.Engineer.SummonDrone));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Engineer.SummonDrone));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 2;
                mySkillDef.baseRechargeInterval         = 20f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = true;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Spawn a drone that <style=cIsUtility>inherits all your items.</style> Fires 4 shots for <style=cIsDamage>100% damage</style>. Can have up to 2.";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SUMMONDRONE_SPECIAL";
                mySkillDef.skillNameToken        = "Backup Drone";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.special.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }

            LoadoutAPI.AddSkill(typeof(VTStates.States.Engineer.SummonProbe));
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Engineer.SummonProbe));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 2;
                mySkillDef.baseRechargeInterval         = 40f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = true;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Spawn a miniature probe that <style=cIsUtility>inherits all your items.</style> Fires a beam for <style=cIsDamage>100% damage</style>. Can have up to 2.";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SUMMONPROBE_SPECIAL";
                mySkillDef.skillNameToken        = "TR-8R Probe";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.special.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
            {
                EntityStates.Mage.Weapon.FireLaserbolt.damageCoefficient = 2f;
                EntityStates.Mage.Weapon.FireLaserbolt.force             = -600f;

                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(EntityStates.Mage.Weapon.FireLaserbolt));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 1;
                mySkillDef.baseRechargeInterval         = 1f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 0;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Fire a beam that deals <style=cIsDamage>200% damage</style> and <style=cIsUtility> Brings enemies towards you </style>";
                mySkillDef.skillName             = "EXPANDEDSKILLS_BEAM_PRIMARY";
                mySkillDef.skillNameToken        = "Augmented Beam";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.primary.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Engineer.MinorShield));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 3;
                mySkillDef.baseRechargeInterval         = 8f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 0;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Give each ally shields equal to their maximum health that last 5 seconds and shock anyone nearby them. Each ally takes one stock of this skill.";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SHIELDALL_UTILITY";
                mySkillDef.skillNameToken        = "Panic Button";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.utility.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
            {
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(VTStates.States.Engineer.TrueShield));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 3;
                mySkillDef.baseRechargeInterval         = 15f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = true;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 1;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Make all allies <style=cIsUtility>immune</style> for 3 seconds,  gain <style=cIsUtility>damage Reduction</style> for 8 seconds and <style=cIsUtility>regenerate their shields</style>. Each ally takes one stock of this skill.";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SHIELDALL_UTILITY";
                mySkillDef.skillNameToken        = "Panic Button";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.utility.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
            {
                LoadoutAPI.AddSkill(typeof(SummonPounder));
                SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>();
                mySkillDef.activationState            = new SerializableEntityStateType(typeof(SummonPounder));
                mySkillDef.activationStateMachineName = "Weapon";
                mySkillDef.baseMaxStock                 = 2;
                mySkillDef.baseRechargeInterval         = 15f;
                mySkillDef.beginSkillCooldownOnSkillEnd = false;
                mySkillDef.canceledFromSprinting        = false;
                mySkillDef.fullRestockOnAssign          = false;
                mySkillDef.interruptPriority            = InterruptPriority.Any;
                mySkillDef.isBullets      = false;
                mySkillDef.isCombatSkill  = false;
                mySkillDef.mustKeyPress   = false;
                mySkillDef.noSprint       = false;
                mySkillDef.rechargeStock  = 1;
                mySkillDef.requiredStock  = 1;
                mySkillDef.shootDelay     = 0f;
                mySkillDef.stockToConsume = 0;
                //mySkillDef.icon = Resources.Load<Sprite>()
                mySkillDef.skillDescriptionToken = "Summon a pounder that periodically damages enemies and pulls them towards itself";
                mySkillDef.skillName             = "EXPANDEDSKILLS_SUMMONPOUNDER_SECONDARY";
                mySkillDef.skillNameToken        = "Leftover Mining Equipment";

                LoadoutAPI.AddSkillDef(mySkillDef);

                GameObject   gameObject  = Resources.Load <GameObject>("prefabs/characterbodies/engibody");
                SkillLocator component   = gameObject.GetComponent <SkillLocator>();
                SkillFamily  skillFamily = component.secondary.skillFamily;

                Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);

                skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant
                {
                    skillDef       = mySkillDef,
                    unlockableName = "",
                    viewableNode   = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null)
                };
            }
        }