diff --git a/Readme.md b/Readme.md index 0c9a80f..6958635 100644 --- a/Readme.md +++ b/Readme.md @@ -13,6 +13,11 @@ NOW REQUIRES TabletopTweaks Core Module and ModMenu ## Changelog +### + +Added Mass Fly + + ### 1.4.13 Fixed compatibility issue with Expanded Content. @@ -400,6 +405,8 @@ Made rewards from Monster Slayers and Local Production crusade events permanent ##Coming Soon: +Over + Internal Buffer will be more elegant. Bloodline Mutations (Havoc first) diff --git a/TomeOfTheFirebird/Config/Blueprints.json b/TomeOfTheFirebird/Config/Blueprints.json index c6ea251..a6a29a8 100644 --- a/TomeOfTheFirebird/Config/Blueprints.json +++ b/TomeOfTheFirebird/Config/Blueprints.json @@ -282,8 +282,8 @@ "MetakinesisDoubleCheaperAbility": "e37c47f4-2f88-4ff4-859d-430e7cb9c44b", "MetakinesisDoubleCheaperBuff": "187e1cb4-6252-4216-a0cb-2d8cb42a8e42", "MetakinesisDoubleFeature": "05582d62-e705-484f-a760-0981f6f6fb4b", - "MetakinesisMasterDouble": "52661f4d-0add-48b2-be74-d627808679f5" - + "MetakinesisMasterDouble": "52661f4d-0add-48b2-be74-d627808679f5", + "MassFlySpell": "2ddc377f-87b9-4aba-9e8b-ab6c03f477e8" }, "DerivedBlueprintMasters": { diff --git a/TomeOfTheFirebird/Localization/Spells.json b/TomeOfTheFirebird/Localization/Spells.json index 5288106..5ae795e 100644 --- a/TomeOfTheFirebird/Localization/Spells.json +++ b/TomeOfTheFirebird/Localization/Spells.json @@ -9,7 +9,7 @@ "enGB": "You charge a ally with a magic rune of fire. \n When the wielder of the weapon successfully strikes a foe in melee with the weapon, the wielder can discharge the rune as a swift action to deal 1d4+1 points of fire damage to the target.This damage isn’t multiplied on a critical hit. If the target has spell resistance, you attempt a caster level check (1d20 + caster level) against that spell resistance when the rune is discharged.If the rune is successfully resisted, the rune is expended and does no damage; otherwise, the rune deals damage normally.\n For every 2 caster levels beyond 3rd the caster possesses, the rune deals an additional 1d4+1 points of fire damage(2d4+2 at caster level 5th, 3d4+3 at 7th, and so on) to a maximum of 5d4+5 points of fire damage at caster level 11th." - + }, { "Key": "FieryRuneArray.Name", @@ -31,9 +31,20 @@ "Key": "Fly.Desc", "ProcessTemplates": false, "enGB": "The subject gains flight, increasing their speed by ten feet, ignoring ground effects, and gaining a +3 dodge bonus to AC against melee attacks" + }, + { + "Key": "MassFly.Name", + "ProcessTemplates": false, + "enGB": "Fly, Mass" + }, + { + "Key": "MassFly.Desc", + "ProcessTemplates": false, + "enGB": "The party gains flight, increasing their speed by ten feet, ignoring ground effects, and gaining a +3 dodge bonus to AC against melee attacks" } + ] \ No newline at end of file diff --git a/TomeOfTheFirebird/New Content/Spells/Fly.cs b/TomeOfTheFirebird/New Content/Spells/Fly.cs index fd3f7ed..b3f7d45 100644 --- a/TomeOfTheFirebird/New Content/Spells/Fly.cs +++ b/TomeOfTheFirebird/New Content/Spells/Fly.cs @@ -29,7 +29,7 @@ public static void Make() var buffGUID = Main.TotFContext.Blueprints.GetGUID("FlyBuff"); var spellGUID = Main.TotFContext.Blueprints.GetGUID("FlySpell"); var touchGUID = Main.TotFContext.Blueprints.GetGUID("FlySpellTouch"); - + var massSpellGUID = Main.TotFContext.Blueprints.GetGUID("MassFlySpell"); Sprite flyIcon = AssetLoader.LoadInternal(Main.TotFContext, "Spells", "Fly.png"); if (Settings.IsEnabled("Fly")) @@ -40,6 +40,7 @@ public static void Make() buff.SetIcon(flyIcon); buff.AddBuffDescriptorImmunity(descriptor: new Kingmaker.Blueprints.Classes.Spells.SpellDescriptorWrapper(Kingmaker.Blueprints.Classes.Spells.SpellDescriptor.Ground)); buff.AddSpellImmunityToSpellDescriptor(descriptor: new Kingmaker.Blueprints.Classes.Spells.SpellDescriptorWrapper(Kingmaker.Blueprints.Classes.Spells.SpellDescriptor.Ground)); + buff.AddStatBonus(Kingmaker.Enums.ModifierDescriptor.Enhancement, stat: Kingmaker.EntitySystem.Stats.StatType.Speed, value: 10); buff.AddFormationACBonus(bonus: 3); buff.AddACBonusAgainstAttacks(againstMeleeOnly: true, armorClassBonus: 3, descriptor: Kingmaker.Enums.ModifierDescriptor.Dodge); buff.AddToFlags(flags: BlueprintBuff.Flags.IsFromSpell); @@ -50,6 +51,7 @@ public static void Make() touch.SetDisplayName("Fly.Name"); touch.SetDescription("Fly.Desc"); touch.SetLocalizedDuration(Duration.MinutePerLevel); + touch.AllowTargeting(friends: true, self:true); touch.SetEffectOnAlly(AbilityEffectOnUnit.Helpful); touch.SetAnimation(UnitAnimationActionCastSpell.CastAnimationStyle.Touch); @@ -71,6 +73,7 @@ public static void Make() spell.SetAnimation(UnitAnimationActionCastSpell.CastAnimationStyle.Touch); spell.SetLocalizedSavingThrow(new Kingmaker.Localization.LocalizedString()); spell.SetAvailableMetamagic(Metamagic.Quicken, Metamagic.Heighten, Metamagic.CompletelyNormal, Metamagic.Reach); + spell.SetDisplayName("Fly.Name"); spell.SetDescription("Fly.Desc"); spell.AddSpellToMedium(3); @@ -83,6 +86,23 @@ public static void Make() spell.Configure(); + var massSpell = AbilityConfigurator.NewSpell("MassFlySpell", massSpellGUID.ToString(), Kingmaker.Blueprints.Classes.Spells.SpellSchool.Transmutation, true); + massSpell.SetIcon(flyIcon); + massSpell.AddToSpellLists(3, SpellList.Alchemist, SpellList.Wizard, SpellList.Bloodrager, SpellList.Magus, SpellList.Shaman, SpellList.Witch); + massSpell.SetActionType(Kingmaker.UnitLogic.Commands.Base.UnitCommand.CommandType.Standard); + massSpell.SetLocalizedDuration(Duration.MinutePerLevel); + massSpell.AllowTargeting(self: true); + massSpell.SetEffectOnAlly(AbilityEffectOnUnit.Helpful); + massSpell.SetAnimation(UnitAnimationActionCastSpell.CastAnimationStyle.Self); + massSpell.SetLocalizedSavingThrow(new Kingmaker.Localization.LocalizedString()); + massSpell.SetAvailableMetamagic(Metamagic.Quicken, Metamagic.Heighten, Metamagic.CompletelyNormal, Metamagic.Reach); + massSpell.SetDisplayName("MassFly.Name"); + massSpell.SetDescription("MassFly.Desc"); + massSpell.AddSpellToPsychic(7); + massSpell.AddToSpellLists(7, SpellList.Wizard); + massSpell.AddAbilityEffectRunAction(ActionsBuilder.New().ApplyBuff(buffMade.AssetGuidThreadSafe, durationValue: MakerTools.GetContextDurationValue(Kingmaker.UnitLogic.Mechanics.DurationRate.Minutes, true)).PartyMembers(ActionsBuilder.New().ApplyBuff(buffMade.AssetGuidThreadSafe, durationValue: MakerTools.GetContextDurationValue(Kingmaker.UnitLogic.Mechanics.DurationRate.Minutes, true)))); + massSpell.Configure(); + //TODO MASS FLY - level 7, 30 foot burst of fly, 10 minutes per level @@ -90,6 +110,7 @@ public static void Make() else { AbilityConfigurator.New("FlySpell", spellGUID.ToString()).Configure(); + AbilityConfigurator.New("MassFlySpell", spellGUID.ToString()).Configure(); AbilityConfigurator.New("FlySpellTouch", touchGUID.ToString()).Configure(); BuffConfigurator.New("FlyBuff", buffGUID.ToString()).Configure();